make-macos.sh (2623B)
1 #!/bin/bash 2 3 # Thanks to odaki on GitHub for this script. I have modified it a bit. 4 5 arch=$(arch) 6 if [ $arch == "ppc" ]; then 7 echo Sorry, PowerPC \(PPC\) is not supported... 8 fi 9 10 if [ "$1" = "-v" ]; then 11 VERBOSE=-v 12 fi 13 14 # 15 # Setup variables 16 # 17 VERSION=v`grep PROG_VER_STR src/ft2_header.h|cut -d'"' -f 2` 18 19 RELEASE_MACOS_DIR=release/macos/ 20 APP_DIR=${RELEASE_MACOS_DIR}ft2-clone-macos.app/ 21 22 TARGET_X86_64=${APP_DIR}Contents/MacOS/ft2-clone-macos-x86_64 23 TARGET_ARM64=${APP_DIR}Contents/MacOS/ft2-clone-macos-arm64 24 TARGET_UNIVERSAL=${APP_DIR}Contents/MacOS/ft2-clone-macos 25 TARGET_DIR=${APP_DIR}Contents/MacOS/ 26 27 # 28 # Prepare 29 # 30 if [ ! -d $TARGET_DIR ]; then 31 mkdir -p $TARGET_DIR 32 fi 33 34 # 35 # Compile 36 # 37 function compile() { 38 rm $1 &> /dev/null 39 clang $VERBOSE $CFLAGS -F /Library/Frameworks -g0 -DNDEBUG -DHAS_MIDI -D__MACOSX_CORE__ -DHAS_LIBFLAC -stdlib=libc++ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/scopes/*.c src/modloaders/*.c src/smploaders/*.c src/libflac/*.c src/*.c -Winit-self -Wno-deprecated -Wextra -Wunused -mno-ms-bitfields -Wno-missing-field-initializers -Wswitch-default $LDFLAGS -L /Library/Frameworks -framework SDL2 -framework CoreMidi -framework CoreAudio -framework Cocoa -liconv -lpthread -lm -lstdc++ -o $1 40 return $? 41 } 42 43 echo Compiling x86_64 binary, please wait patiently... 44 CFLAGS="-target x86_64-apple-macos10.11 -mmacosx-version-min=10.11 -arch x86_64 -mmmx -mfpmath=sse -msse2 -O3" 45 LDFLAGS= 46 export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 47 compile $TARGET_X86_64 48 if [ $? -ne 0 ]; then 49 echo failed 50 exit 1 51 fi 52 53 echo Compiling arm64 binary, please wait patiently... 54 CFLAGS="-target arm64-apple-macos11 -mmacosx-version-min=11.0 -arch arm64 -march=armv8.3-a+sha3 -O3" 55 LDFLAGS= 56 export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 57 compile $TARGET_ARM64 58 if [ $? -ne 0 ]; then 59 echo failed 60 exit 1 61 fi 62 63 # 64 # Merge binaries 65 # 66 # Reference: Building a Universal macOS Binary 67 # https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary 68 echo Building universal binary... 69 rm $TARGET_UNIVERAL &> /dev/null 70 lipo -create -output $TARGET_UNIVERSAL $TARGET_X86_64 $TARGET_ARM64 71 rm $TARGET_X86_64 72 rm $TARGET_ARM64 73 strip $TARGET_UNIVERSAL 74 install_name_tool -change @rpath/SDL2.framework/Versions/A/SDL2 @executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2 $TARGET_UNIVERSAL 75 codesign -s - --entitlements ft2-clone.entitlements release/macOS/ft2-clone-macos.app 76 echo Done. The executable can be found in \'${RELEASE_MACOS_DIR}\' if everything went well. 77 78 # 79 # Cleanup 80 # 81 rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null