create_macos_release.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. set -e
  3. if [ "$#" -ne 6 ]; then
  4. echo "usage <BASE_DIR> <TEMP_DIRECTORY> <OUTPUT_DIRECTORY> <ENTITLEMENTS_FILE_PATH> <VERSION> <SOURCE_REVISION_ID>"
  5. exit 1
  6. fi
  7. mkdir -p $1
  8. mkdir -p $2
  9. mkdir -p $3
  10. BASE_DIR=$(readlink -f $1)
  11. TEMP_DIRECTORY=$(readlink -f $2)
  12. OUTPUT_DIRECTORY=$(readlink -f $3)
  13. ENTITLEMENTS_FILE_PATH=$(readlink -f $4)
  14. VERSION=$5
  15. SOURCE_REVISION_ID=$6
  16. RELEASE_TAR_FILE_NAME=Ryujinx-$VERSION-macos_universal.app.tar
  17. ARM64_APP_BUNDLE=$TEMP_DIRECTORY/output_arm64/Ryujinx.app
  18. X64_APP_BUNDLE=$TEMP_DIRECTORY/output_x64/Ryujinx.app
  19. UNIVERSAL_APP_BUNDLE=$OUTPUT_DIRECTORY/Ryujinx.app
  20. EXECUTABLE_SUB_PATH=Contents/MacOS/Ryujinx
  21. rm -rf $TEMP_DIRECTORY
  22. mkdir -p $TEMP_DIRECTORY
  23. DOTNET_COMMON_ARGS="-p:DebugType=embedded -p:Version=$VERSION -p:SourceRevisionId=$SOURCE_REVISION_ID -p:ExtraDefineConstants=DISABLE_UPDATER --self-contained true"
  24. dotnet restore
  25. dotnet build -c Release Ryujinx.Ava
  26. dotnet publish -c Release -r osx-arm64 -o $TEMP_DIRECTORY/publish_arm64 $DOTNET_COMMON_ARGS Ryujinx.Ava
  27. dotnet publish -c Release -r osx-x64 -o $TEMP_DIRECTORY/publish_x64 $DOTNET_COMMON_ARGS Ryujinx.Ava
  28. # Get ride of the support library for ARMeilleur for x64 (that's only for arm64)
  29. rm -rf $TEMP_DIRECTORY/publish_x64/libarmeilleure-jitsupport.dylib
  30. # Get ride of libsoundio from arm64 builds as we don't have a arm64 variant
  31. # TODO: remove this once done
  32. rm -rf $TEMP_DIRECTORY/publish_arm64/libsoundio.dylib
  33. pushd $BASE_DIR/distribution/macos
  34. ./create_app_bundle.sh $TEMP_DIRECTORY/publish_x64 $TEMP_DIRECTORY/output_x64 $ENTITLEMENTS_FILE_PATH
  35. ./create_app_bundle.sh $TEMP_DIRECTORY/publish_arm64 $TEMP_DIRECTORY/output_arm64 $ENTITLEMENTS_FILE_PATH
  36. popd
  37. rm -rf $UNIVERSAL_APP_BUNDLE
  38. mkdir -p $OUTPUT_DIRECTORY
  39. # Let's copy one of the two different app bundle and remove the executable
  40. cp -R $ARM64_APP_BUNDLE $UNIVERSAL_APP_BUNDLE
  41. rm $UNIVERSAL_APP_BUNDLE/$EXECUTABLE_SUB_PATH
  42. # Make it libraries universal
  43. python3 $BASE_DIR/distribution/macos/construct_universal_dylib.py $ARM64_APP_BUNDLE $X64_APP_BUNDLE $UNIVERSAL_APP_BUNDLE "**/*.dylib"
  44. if ! [ -x "$(command -v lipo)" ];
  45. then
  46. if ! [ -x "$(command -v llvm-lipo-14)" ];
  47. then
  48. LIPO=llvm-lipo
  49. else
  50. LIPO=llvm-lipo-14
  51. fi
  52. else
  53. LIPO=lipo
  54. fi
  55. # Make it the executable universal
  56. $LIPO $ARM64_APP_BUNDLE/$EXECUTABLE_SUB_PATH $X64_APP_BUNDLE/$EXECUTABLE_SUB_PATH -output $UNIVERSAL_APP_BUNDLE/$EXECUTABLE_SUB_PATH -create
  57. # Patch up the Info.plist to have appropriate version
  58. sed -r -i.bck "s/\%\%RYUJINX_BUILD_VERSION\%\%/$VERSION/g;" $UNIVERSAL_APP_BUNDLE/Contents/Info.plist
  59. sed -r -i.bck "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$SOURCE_REVISION_ID/g;" $UNIVERSAL_APP_BUNDLE/Contents/Info.plist
  60. rm $UNIVERSAL_APP_BUNDLE/Contents/Info.plist.bck
  61. # Now sign it
  62. if ! [ -x "$(command -v codesign)" ];
  63. then
  64. if ! [ -x "$(command -v rcodesign)" ];
  65. then
  66. echo "Cannot find rcodesign on your system, please install rcodesign."
  67. exit 1
  68. fi
  69. # NOTE: Currently require https://github.com/indygreg/apple-platform-rs/pull/44 to work on other OSes.
  70. # cargo install --git "https://github.com/marysaka/apple-platform-rs" --branch "fix/adhoc-app-bundle" apple-codesign --bin "rcodesign"
  71. echo "Usign rcodesign for ad-hoc signing"
  72. rcodesign sign --entitlements-xml-path $ENTITLEMENTS_FILE_PATH $UNIVERSAL_APP_BUNDLE
  73. else
  74. echo "Usign codesign for ad-hoc signing"
  75. codesign --entitlements $ENTITLEMENTS_FILE_PATH -f --deep -s - $UNIVERSAL_APP_BUNDLE
  76. fi
  77. echo "Creating archive"
  78. pushd $OUTPUT_DIRECTORY
  79. tar --exclude "Ryujinx.app/Contents/MacOS/Ryujinx" -cvf $RELEASE_TAR_FILE_NAME Ryujinx.app 1> /dev/null
  80. python3 $BASE_DIR/distribution/misc/add_tar_exec.py $RELEASE_TAR_FILE_NAME "Ryujinx.app/Contents/MacOS/Ryujinx" "Ryujinx.app/Contents/MacOS/Ryujinx"
  81. gzip -9 < $RELEASE_TAR_FILE_NAME > $RELEASE_TAR_FILE_NAME.gz
  82. rm $RELEASE_TAR_FILE_NAME
  83. popd
  84. echo "Done"