mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Merge pull request #4208 from laytan/more-wasm-vendor-support
wasm: support more vendor libraries
This commit is contained in:
Vendored
+18
-4
@@ -3,7 +3,11 @@ 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_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 {
|
||||
@(private) VECTOR_EXT :: "_simd" when #config(VENDOR_BOX2D_ENABLE_SIMD128, intrinsics.has_target_feature("simd128")) else ""
|
||||
} else {
|
||||
@(private) VECTOR_EXT :: "avx2" when #config(VENDOR_BOX2D_ENABLE_AVX2, intrinsics.has_target_feature("avx2")) else "sse2"
|
||||
}
|
||||
|
||||
when ODIN_OS == .Windows {
|
||||
@(private) LIB_PATH :: "lib/box2d_windows_amd64_" + VECTOR_EXT + ".lib"
|
||||
@@ -13,6 +17,8 @@ when ODIN_OS == .Windows {
|
||||
@(private) LIB_PATH :: "lib/box2d_darwin_amd64_" + VECTOR_EXT + ".a"
|
||||
} else when ODIN_ARCH == .amd64 {
|
||||
@(private) LIB_PATH :: "lib/box2d_other_amd64_" + VECTOR_EXT + ".a"
|
||||
} else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 {
|
||||
@(private) LIB_PATH :: "lib/box2d_wasm" + VECTOR_EXT + ".o"
|
||||
} else {
|
||||
@(private) LIB_PATH :: "lib/box2d_other.a"
|
||||
}
|
||||
@@ -21,8 +27,16 @@ 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 {
|
||||
LIB_PATH,
|
||||
when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 {
|
||||
when VECTOR_EXT == "_simd" {
|
||||
foreign import lib "lib/box2d_wasm_simd.o"
|
||||
} else {
|
||||
foreign import lib "lib/box2d_wasm.o"
|
||||
}
|
||||
} else {
|
||||
foreign import lib {
|
||||
LIB_PATH,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1520,4 +1534,4 @@ IsValid :: proc{
|
||||
Joint_IsValid,
|
||||
|
||||
IsValidRay,
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
//+build wasm32, wasm64p32
|
||||
package vendor_box2d
|
||||
|
||||
@(require) import _ "vendor:libc"
|
||||
Vendored
+2
@@ -68,5 +68,7 @@ esac
|
||||
|
||||
cd ..
|
||||
|
||||
make -f wasm.Makefile
|
||||
|
||||
rm -rf v3.0.0.tar.gz
|
||||
rm -rf box2d-3.0.0
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
# Custom Makefile to build box2d for Odin's WASM targets.
|
||||
# I tried to make a cmake toolchain file for this / use cmake but this is far easier.
|
||||
# NOTE: We are pretending to be emscripten to box2d so it takes WASM code paths, but we don't actually use emscripten.
|
||||
|
||||
# CC = $(shell brew --prefix llvm)/bin/clang
|
||||
# LD = $(shell brew --prefix llvm)/bin/wasm-ld
|
||||
|
||||
VERSION = 3.0.0
|
||||
SRCS = $(wildcard box2d-$(VERSION)/src/*.c)
|
||||
OBJS_SIMD = $(SRCS:.c=_simd.o)
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
SYSROOT = $(shell odin root)/vendor/libc
|
||||
CFLAGS = -Ibox2d-$(VERSION)/include -Ibox2d-$(VERSION)/Extern/simde --target=wasm32 -D__EMSCRIPTEN__ -DNDEBUG -O3 --sysroot=$(SYSROOT)
|
||||
|
||||
all: lib/box2d_wasm.o lib/box2d_wasm_simd.o clean
|
||||
|
||||
%.o: %.c
|
||||
$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
%_simd.o: %.c
|
||||
$(CC) -c $(CFLAGS) -msimd128 $< -o $@
|
||||
|
||||
lib/box2d_wasm.o: $(OBJS)
|
||||
$(LD) -r -o lib/box2d_wasm.o $(OBJS)
|
||||
|
||||
lib/box2d_wasm_simd.o: $(OBJS_SIMD)
|
||||
$(LD) -r -o lib/box2d_wasm_simd.o $(OBJS_SIMD)
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJS) $(OBJS_SIMD)
|
||||
|
||||
.PHONY: clean
|
||||
Reference in New Issue
Block a user