diff --git a/vendor/box3d/box3d.odin b/vendor/box3d/box3d.odin index b78b5bad7..0e251dddc 100644 --- a/vendor/box3d/box3d.odin +++ b/vendor/box3d/box3d.odin @@ -24,15 +24,10 @@ when ODIN_OS == .Windows { foreign import lib { "lib/linux-arm64/libbox3d.a", } -} else when ODIN_OS == .Darwin && (ODIN_ARCH == .amd64) && !BOX3D_SHARED { +} else when ODIN_OS == .Darwin && (ODIN_ARCH == .amd64 || ODIN_ARCH == .arm64) && !BOX3D_SHARED { @(export) foreign import lib { - "lib/darwin-amd64/libbox3d.a", - } -} else when ODIN_OS == .Darwin && (ODIN_ARCH == .arm64) && !BOX3D_SHARED { - @(export) - foreign import lib { - "lib/darwin-arm64/libbox3d.a", + "lib/darwin/libbox3d.a", } } else { @(export) diff --git a/vendor/box3d/lib/darwin/libbox3d.a b/vendor/box3d/lib/darwin/libbox3d.a new file mode 100644 index 000000000..712d53de5 --- /dev/null +++ b/vendor/box3d/lib/darwin/libbox3d.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b000b0b69028af14d6a481b6bf6ca3b70d2c3a29cd9e73eab8b96e0deffa07d +size 2524600 diff --git a/vendor/box3d/src/build.sh b/vendor/box3d/src/build.sh index 525a90b32..7d3a99543 100755 --- a/vendor/box3d/src/build.sh +++ b/vendor/box3d/src/build.sh @@ -1,15 +1,6 @@ #!/usr/bin/env bash -# Detect OS -if [[ "$OSTYPE" == "darwin"* ]]; then - OS="darwin" -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - OS="linux" -else - echo "Error: Unsupported operating system: $OSTYPE" - exit 1 -fi - +LIB_NAME="libbox3d.a" # Detect architecture ARCH=$(uname -m) case "$ARCH" in @@ -25,8 +16,57 @@ case "$ARCH" in ;; esac -LIB_DIR="../lib/${OS}-${ARCH}" -mkdir -p "$LIB_DIR" -cc -c -O2 -std=c17 -fPIC -Iinclude src/*.c -ar rcs "$LIB_DIR/libbox3d.a" *.o -rm -f *.o \ No newline at end of file +# Detect OS +if [[ "$OSTYPE" == "darwin"* ]]; then + INSTALL_DIR="../lib/darwin" + mkdir -p "$INSTALL_DIR" build/x86_64 build/arm64 + + # Building box3d for amd64 + for src in src/*.c; do + obj="build/x86_64/$(basename "${src%.c}.o")" + clang -c -O2 -std=c17 -fPIC \ + -arch x86_64 \ + -mmacosx-version-min=11.0 \ + -Iinclude \ + "$src" -o "$obj" + done + + # Building box3d for arm64 + for src in src/*.c; do + obj="build/arm64/$(basename "${src%.c}.o")" + clang -c -O2 -std=c17 -fPIC \ + -arch arm64 \ + -mmacosx-version-min=11.0 \ + -Iinclude \ + "$src" -o "$obj" + done + + # Turn them into their respective *.a files + ar rcs "$INSTALL_DIR/libbox3d_x86_64.a" build/x86_64/*.o + ar rcs "$INSTALL_DIR/libbox3d_arm64.a" build/arm64/*.o + + ranlib "$INSTALL_DIR/libbox3d_x86_64.a" + ranlib "$INSTALL_DIR/libbox3d_arm64.a" + + # Bundle them into a universal library + lipo -create \ + "$INSTALL_DIR/libbox3d_x86_64.a" \ + "$INSTALL_DIR/libbox3d_arm64.a" \ + -output "$INSTALL_DIR/$LIB_NAME" + + # Clean up the single arch .a files and build temp + rm "$INSTALL_DIR/libbox3d_x86_64.a" "$INSTALL_DIR/libbox3d_arm64.a" + rm -rf build + +elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + OS="linux" + LIB_DIR="../lib/${OS}-${ARCH}" + mkdir -p "$LIB_DIR" + cc -c -O2 -std=c17 -fPIC -Iinclude src/*.c + ar rcs "$LIB_DIR/$LIB_NAME" *.o + rm -f *.o + +else + echo "Error: Unsupported operating system: $OSTYPE" + exit 1 +fi \ No newline at end of file