box3d universal binary

This commit is contained in:
Jeroen van Rijn
2026-07-09 15:46:24 +02:00
parent 65d4ec726b
commit bf8a6d81d8
3 changed files with 60 additions and 22 deletions

View File

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

3
vendor/box3d/lib/darwin/libbox3d.a vendored Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6b000b0b69028af14d6a481b6bf6ca3b70d2c3a29cd9e73eab8b96e0deffa07d
size 2524600

View File

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