shithub: ft²

Download patch

ref: f0b12a6ec4503fae7b1436dfac4a785722185b37
parent: f42084c7138a0ce455e601b6818ba35aec822928
author: Olav Sørensen <olav.sorensen@live.no>
date: Wed Jan 13 16:21:16 EST 2021

New MacOS make-scripts for universal Intel/ARM binary building

--- 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