commit f0b12a6ec4503fae7b1436dfac4a785722185b37 parent f42084c7138a0ce455e601b6818ba35aec822928 Author: Olav Sørensen <olav.sorensen@live.no> Date: Wed, 13 Jan 2021 21:20:49 +0100 New MacOS make-scripts for universal Intel/ARM binary building Diffstat:
M | make-macos.sh | | | 85 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- |
1 file changed, 74 insertions(+), 11 deletions(-)
diff --git a/make-macos.sh b/make-macos.sh @@ -1,17 +1,80 @@ #!/bin/bash +# Thanks to odaki on GitHub for this script. I have modified it a bit. + arch=$(arch) if [ $arch == "ppc" ]; then echo Sorry, PowerPC \(PPC\) is not supported... -else - echo Compiling 64-bit binary, please wait patiently... - - rm release/macos/ft2-clone-macos.app/Contents/MacOS/ft2-clone-macos &> /dev/null - - clang -mmacosx-version-min=10.7 -arch x86_64 -mmmx -mfpmath=sse -msse2 -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks -g0 -DNDEBUG -DHAS_MIDI -D__MACOSX_CORE__ -stdlib=libc++ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.c src/*.c -O3 /usr/lib/libiconv.dylib -lm -Winit-self -Wno-deprecated -Wextra -Wunused -mno-ms-bitfields -Wno-missing-field-initializers -Wswitch-default -framework SDL2 -framework CoreMidi -framework CoreAudio -framework Cocoa -lpthread -lm -lstdc++ -o release/macos/ft2-clone-macos.app/Contents/MacOS/ft2-clone-macos - strip release/macos/ft2-clone-macos.app/Contents/MacOS/ft2-clone-macos - install_name_tool -change @rpath/SDL2.framework/Versions/A/SDL2 @executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2 release/macos/ft2-clone-macos.app/Contents/MacOS/ft2-clone-macos - - rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null - echo Done. The executable can be found in \'release/macos\' if everything went well. fi + +if [ "$1" = "-v" ]; then + VERBOSE=-v +fi + +# +# Setup variables +# +VERSION=v`grep PROG_VER_STR src/ft2_header.h|cut -d'"' -f 2` + +RELEASE_MACOS_DIR=release/macos/ +APP_DIR=${RELEASE_MACOS_DIR}ft2-clone-macos.app/ + +TARGET_X86_64=${APP_DIR}Contents/MacOS/ft2-clone-macos-x86_64 +TARGET_ARM64=${APP_DIR}Contents/MacOS/ft2-clone-macos-arm64 +TARGET_UNIVERSAL=${APP_DIR}Contents/MacOS/ft2-clone-macos +TARGET_DIR=${APP_DIR}Contents/MacOS/ + +# +# Prepare +# +if [ ! -d $TARGET_DIR ]; then + mkdir -p $TARGET_DIR +fi + +# +# Compile +# +function compile() { + rm $1 &> /dev/null + clang $VERBOSE $CFLAGS -F /Library/Frameworks -g0 -DNDEBUG -DHAS_MIDI -D__MACOSX_CORE__ -stdlib=libc++ src/rtmidi/*.cpp src/gfxdata/*.c src/mixer/*.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 + return $? +} + +echo Compiling x86_64 binary, please wait patiently... +CFLAGS="-target x86_64-apple-macos10.7 -mmacosx-version-min=10.7 -arch x86_64 -mmmx -mfpmath=sse -msse2 -O3" +LDFLAGS= +export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk +compile $TARGET_X86_64 +if [ $? -ne 0 ]; then + echo failed + exit 1 +fi + +echo Compiling arm64 binary, please wait patiently... +CFLAGS="-target arm64-apple-macos11 -mmacosx-version-min=11.0 -arch arm64 -march=armv8.3-a+sha3 -O3" +LDFLAGS= +export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk +compile $TARGET_ARM64 +if [ $? -ne 0 ]; then + echo failed + exit 1 +fi + +# +# Merge binaries +# +# Reference: Building a Universal macOS Binary +# https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary +echo Building universal binary... +rm $TARGET_UNIVERAL &> /dev/null +lipo -create -output $TARGET_UNIVERSAL $TARGET_X86_64 $TARGET_ARM64 +rm $TARGET_X86_64 +rm $TARGET_ARM64 +strip $TARGET_UNIVERSAL +install_name_tool -change @rpath/SDL2.framework/Versions/A/SDL2 @executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2 $TARGET_UNIVERSAL +echo Done. The executable can be found in \'${RELEASE_MACOS_DIR}\' if everything went well. + +# +# Cleanup +# +rm src/rtmidi/*.o src/gfxdata/*.o src/*.o &> /dev/null