macOS: compile universal binaries (x86_64 and arm64) (#64)
This commit is contained in:
@@ -18,10 +18,10 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout project
|
- name: Checkout project
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
default: lib
|
default: lib
|
||||||
|
|
||||||
|
ifeq ($(shell uname -s),Darwin)
|
||||||
|
MACOS_BUILD = 1
|
||||||
|
else ifeq ($(OS),Windows_NT)
|
||||||
|
WINDOWS_BUILD = 1
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef LIBSM64_MUSL
|
ifdef LIBSM64_MUSL
|
||||||
CC := musl-gcc
|
CC := musl-gcc
|
||||||
CXX := musl-g++
|
CXX := musl-g++
|
||||||
@@ -25,35 +31,54 @@ H_IMPORTED := $(C_IMPORTED:.c=.h)
|
|||||||
IMPORTED := $(C_IMPORTED) $(H_IMPORTED)
|
IMPORTED := $(C_IMPORTED) $(H_IMPORTED)
|
||||||
|
|
||||||
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) $(C_IMPORTED)
|
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) $(C_IMPORTED)
|
||||||
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o))
|
ifdef MACOS_BUILD
|
||||||
DEP_FILES := $(O_FILES:.o=.d)
|
O_FILES_x86_64 := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=_x86_64.o))
|
||||||
|
O_FILES_arm64 := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=_arm64.o))
|
||||||
|
DEP_FILES := $(O_FILES_x86_64:.o=.d) $(O_FILES_arm64:.o=.d)
|
||||||
|
else
|
||||||
|
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o))
|
||||||
|
DEP_FILES := $(O_FILES:.o=.d)
|
||||||
|
endif
|
||||||
|
|
||||||
TEST_SRCS_C := test/context.c test/level.c test/gl33core/gl33core_renderer.c test/gl20/gl20_renderer.c
|
TEST_SRCS_C := test/context.c test/level.c test/gl33core/gl33core_renderer.c test/gl20/gl20_renderer.c
|
||||||
TEST_SRCS_CPP := test/main.cpp test/audio.cpp
|
TEST_SRCS_CPP := test/main.cpp test/audio.cpp
|
||||||
TEST_OBJS := $(foreach file,$(TEST_SRCS_C),$(BUILD_DIR)/$(file:.c=.o)) $(foreach file,$(TEST_SRCS_CPP),$(BUILD_DIR)/$(file:.cpp=.o))
|
TEST_OBJS := $(foreach file,$(TEST_SRCS_C),$(BUILD_DIR)/$(file:.c=.o)) $(foreach file,$(TEST_SRCS_CPP),$(BUILD_DIR)/$(file:.cpp=.o))
|
||||||
|
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS_BUILD
|
||||||
LIB_FILE := $(DIST_DIR)/sm64.dll
|
LIB_FILE := $(DIST_DIR)/sm64.dll
|
||||||
TEST_FILE := $(DIST_DIR)/run-test.exe
|
TEST_FILE := $(DIST_DIR)/run-test.exe
|
||||||
|
else ifdef MACOS_BUILD
|
||||||
|
LIB_FILE := $(DIST_DIR)/libsm64.dylib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DUMMY := $(shell mkdir -p $(ALL_DIRS) build/test build/test/gl33core build/test/gl20 src/decomp/mario $(DIST_DIR)/include)
|
DUMMY := $(shell mkdir -p $(ALL_DIRS) build/test build/test/gl33core build/test/gl20 src/decomp/mario $(DIST_DIR)/include)
|
||||||
|
|
||||||
|
|
||||||
$(filter-out src/decomp/mario/geo.inc.c,$(IMPORTED)): src/decomp/mario/geo.inc.c
|
$(filter-out src/decomp/mario/geo.inc.c,$(IMPORTED)): src/decomp/mario/geo.inc.c
|
||||||
src/decomp/mario/geo.inc.c: ./import-mario-geo.py
|
src/decomp/mario/geo.inc.c: ./import-mario-geo.py
|
||||||
./import-mario-geo.py
|
./import-mario-geo.py
|
||||||
|
|
||||||
|
ifdef MACOS_BUILD
|
||||||
|
$(BUILD_DIR)/%_x86_64.o: %.c $(IMPORTED)
|
||||||
|
@$(CC) $(CFLAGS) -arch x86_64 -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/$*_x86_64.d $<
|
||||||
|
$(CC) -c $(CFLAGS) -arch x86_64 -I src/decomp/include -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD_DIR)/%_arm64.o: %.c $(IMPORTED)
|
||||||
|
@$(CC) $(CFLAGS) -arch arm64 -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/$*_arm64.d $<
|
||||||
|
$(CC) -c $(CFLAGS) -arch arm64 -I src/decomp/include -o $@ $<
|
||||||
|
|
||||||
|
$(LIB_FILE): $(O_FILES_x86_64) $(O_FILES_arm64)
|
||||||
|
$(CC) $(LDFLAGS) -arch arm64 -o $@.arm64 $(O_FILES_arm64)
|
||||||
|
$(CC) $(LDFLAGS) -arch x86_64 -o $@.x86_64 $(O_FILES_x86_64)
|
||||||
|
lipo -create -output $@ $@.arm64 $@.x86_64
|
||||||
|
rm $@.arm64 $@.x86_64
|
||||||
|
else
|
||||||
$(BUILD_DIR)/%.o: %.c $(IMPORTED)
|
$(BUILD_DIR)/%.o: %.c $(IMPORTED)
|
||||||
@$(CC) $(CFLAGS) -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
|
@$(CC) $(CFLAGS) -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
|
||||||
$(CC) -c $(CFLAGS) -I src/decomp/include -o $@ $<
|
$(CC) -c $(CFLAGS) -I src/decomp/include -o $@ $<
|
||||||
|
|
||||||
$(BUILD_DIR)/%.o: %.cpp $(IMPORTED)
|
|
||||||
@$(CXX) $(CFLAGS) -I src/decomp/include -MM -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
|
|
||||||
$(CXX) -c $(CFLAGS) -I src/decomp/include -o $@ $<
|
|
||||||
|
|
||||||
$(LIB_FILE): $(O_FILES)
|
$(LIB_FILE): $(O_FILES)
|
||||||
$(CC) $(LDFLAGS) -o $@ $^
|
$(CC) $(LDFLAGS) -o $@ $^
|
||||||
|
endif
|
||||||
|
|
||||||
$(LIB_H_FILE): src/libsm64.h
|
$(LIB_H_FILE): src/libsm64.h
|
||||||
cp -f $< $@
|
cp -f $< $@
|
||||||
@@ -67,10 +92,14 @@ $(BUILD_DIR)/test/%.o: test/%.c
|
|||||||
@$(CC) $(CFLAGS) -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
@$(CC) $(CFLAGS) -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
||||||
$(CC) -c $(CFLAGS) -o $@ $<
|
$(CC) -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
$(BUILD_DIR)/test/%.o: test/%.cpp
|
||||||
|
@$(CXX) $(CFLAGS) -MM -MP -MT $@ -MF $(BUILD_DIR)/test/$*.d $<
|
||||||
|
$(CXX) -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
$(TEST_FILE): $(LIB_FILE) $(TEST_OBJS)
|
$(TEST_FILE): $(LIB_FILE) $(TEST_OBJS)
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS_BUILD
|
||||||
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -lglew32 -lopengl32 -lSDL2 -lSDL2main -lm
|
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -lglew32 -lopengl32 -lSDL2 -lSDL2main -lm
|
||||||
else ifeq ($(shell uname -s),Darwin)
|
else ifdef MACOS_BUILD
|
||||||
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -framework OpenGL -lGLEW -lSDL2 -lSDL2main -lm -lpthread
|
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -framework OpenGL -lGLEW -lSDL2 -lSDL2main -lm -lpthread
|
||||||
else
|
else
|
||||||
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -lGLEW -lGL -lSDL2 -lSDL2main -lm -lpthread
|
$(CC) -o $@ $(TEST_OBJS) $(LIB_FILE) -lGLEW -lGL -lSDL2 -lSDL2main -lm -lpthread
|
||||||
@@ -81,7 +110,7 @@ lib: $(LIB_FILE) $(LIB_H_FILE)
|
|||||||
test: $(TEST_FILE) $(LIB_H_FILE)
|
test: $(TEST_FILE) $(LIB_H_FILE)
|
||||||
|
|
||||||
run: test
|
run: test
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS_BUILD
|
||||||
cd dist && ./run-test
|
cd dist && ./run-test
|
||||||
else
|
else
|
||||||
./$(TEST_FILE)
|
./$(TEST_FILE)
|
||||||
|
|||||||
Reference in New Issue
Block a user