diff --git a/vendor/box2d/box2d.odin b/vendor/box2d/box2d.odin index bc2e63c24..2a0b31457 100644 --- a/vendor/box2d/box2d.odin +++ b/vendor/box2d/box2d.odin @@ -3,16 +3,30 @@ package vendor_box2d import "base:intrinsics" import "core:c" +@(private) VECTOR_EXT :: "avx2" when #config(VENDOR_BOX2D_ENABLE_AVX2, intrinsics.has_target_feature("avx2")) else "sse2" + when ODIN_OS == .Windows { - @(private) VECTOR_EXT :: "avx2" when #config(VENDOR_BOX2D_ENABLE_AVX2, intrinsics.has_target_feature("avx2")) else "sse2" - @(private) LIB_PATH :: "lib/box2d_windows_amd64_" + VECTOR_EXT + ".lib" + @(private) LIB_PATH :: "lib/box2d_windows_amd64_" + VECTOR_EXT + ".lib" foreign import lib { LIB_PATH, } } else { + when ODIN_ARCH == .amd64 { + @(private) OS :: "darwin" when ODIN_OS == .Darwin else "other" + @(private) LIB_PATH :: "lib/box2d_" + OS + "_amd64_" + VECTOR_EXT + ".a" + } else when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 { + @(private) LIB_PATH :: "lib/box2d_darwin_arm64.a" + } else { + @(private) LIB_PATH :: "lib/box2d_other.a" + } + + when !#exists(LIB_PATH) { + #panic("Could not find the compiled box2d libraries at \"" + LIB_PATH + "\", they can be compiled by running the `build.sh` script at `" + ODIN_ROOT + "vendor/box2d/build_box2d.sh\"`") + } + foreign import lib { - "box2d", + LIB_PATH, } } diff --git a/vendor/box2d/build_box2d.sh b/vendor/box2d/build_box2d.sh new file mode 100755 index 000000000..4fa64faa0 --- /dev/null +++ b/vendor/box2d/build_box2d.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +set -eu + +VERSION="3.0.0" +RELEASE="https://github.com/erincatto/box2d/archive/refs/tags/v$VERSION.tar.gz" + +cd "$(odin root)"/vendor/box2d + +curl -O -L "$RELEASE" +tar -xzvf "v$VERSION.tar.gz" + +cd "box2d-$VERSION" + +DISABLE_FLAGS="-DBOX2D_SAMPLES=OFF -DBOX2D_VALIDATE=OFF -DBOX2D_UNIT_TESTS=OFF" + +case "$(uname -s)" in +Darwin) + export MACOSX_DEPLOYMENT_TARGET="11" + + case "$(uname -m)" in + "x86_64" | "amd64") + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DBOX2D_AVX2=ON -DCMAKE_OSX_ARCHITECTURES=x86_64 -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_darwin_amd64_avx2.a + + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DBOX2D_AVX2=OFF -DCMAKE_OSX_ARCHITECTURES=x86_64 -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_darwin_amd64_sse2.a + ;; + *) + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DCMAKE_OSX_ARCHITECTURES=arm64 -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_darwin_arm64.a + ;; + esac + ;; +*) + case "$(uname -m)" in + "x86_64" | "amd64") + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DBOX2D_AVX2=ON -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_other_amd64_avx2.a + + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DBOX2D_AVX2=OFF -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_other_amd64_sse2.a + ;; + *) + rm -rf build + mkdir build + cmake $DISABLE_FLAGS -DCMAKE_OSX_ARCHITECTURES=arm64 -S . -B build + cmake --build build + cp build/src/libbox2d.a ../lib/box2d_other.a + ;; + esac + ;; +esac + +cd .. + +rm -rf v3.0.0.tar.gz +rm -rf box2d-3.0.0 diff --git a/vendor/box2d/lib/box2d_darwin_amd64_avx2.a b/vendor/box2d/lib/box2d_darwin_amd64_avx2.a new file mode 100644 index 000000000..2e2b72cb1 Binary files /dev/null and b/vendor/box2d/lib/box2d_darwin_amd64_avx2.a differ diff --git a/vendor/box2d/lib/box2d_darwin_amd64_sse2.a b/vendor/box2d/lib/box2d_darwin_amd64_sse2.a new file mode 100644 index 000000000..cd6cb1ca8 Binary files /dev/null and b/vendor/box2d/lib/box2d_darwin_amd64_sse2.a differ diff --git a/vendor/box2d/lib/box2d_darwin_arm64.a b/vendor/box2d/lib/box2d_darwin_arm64.a new file mode 100644 index 000000000..5723290b7 Binary files /dev/null and b/vendor/box2d/lib/box2d_darwin_arm64.a differ