Files
ARMSX1/Makefile
T

207 lines
5.5 KiB
Makefile
Raw Normal View History

.ONESHELL:
WASM_TARGET := $(filter wasm,$(MAKECMDGOALS))
ifeq ($(WASM_TARGET),wasm)
CC := emcc
CXX := em++
SDL_STATIC := 0
SDL_CFLAGS := -sUSE_SDL=2
SDL_LIBS_DYNAMIC :=
SDL_LIBS_STATIC :=
WASM_LDFLAGS := -sUSE_SDL=2 -sALLOW_MEMORY_GROWTH=1 -sASSERTIONS=1 -sFORCE_FILESYSTEM=1 -sEXPORTED_RUNTIME_METHODS='["FS","ccall","cwrap"]' -sEXPORTED_FUNCTIONS='["_main","_psxe_run","_external_main"]'
IMGUI_FRONTEND := 0
endif
2025-11-18 12:32:45 +03:00
SDL_CONFIG ?= sdl2-config
2025-11-18 12:32:45 +03:00
CC ?= gcc
CXX ?= g++
SDL_CFLAGS ?= $(shell $(SDL_CONFIG) --cflags 2>/dev/null)
SDL_LIBS_DYNAMIC ?= $(shell $(SDL_CONFIG) --libs 2>/dev/null)
SDL_LIBS_STATIC ?= $(shell $(SDL_CONFIG) --static-libs 2>/dev/null || $(SDL_CONFIG) --libs --static 2>/dev/null)
2025-11-18 12:32:45 +03:00
SDL_STATIC ?= 1
WASM_LDFLAGS ?=
2025-11-18 03:59:11 +03:00
PLATFORM := $(shell uname -s)
ifeq ($(WASM_TARGET),wasm)
PLATFORM := Emscripten
endif
2025-11-18 12:32:45 +03:00
IOS_TARGET ?= 0
IOS_SDK ?= iphoneos
2025-11-21 04:55:59 +03:00
IOS_DEPLOYMENT_TARGET ?= 14.0
2025-11-18 12:32:45 +03:00
IOS_SDL_FRAMEWORK ?= $(CURDIR)/ios/Frameworks/SDL2.xcframework/ios-arm64/SDL2.framework
IOS_SDL_FRAMEWORK_PARENT := $(dir $(IOS_SDL_FRAMEWORK))
SDKROOT ?=
IMGUI_FRONTEND ?= 0
CONTROLLER_GENERIC ?= 0
2025-11-18 12:32:45 +03:00
ifeq ($(IOS_TARGET),1)
SDKROOT ?= $(shell xcrun --sdk $(IOS_SDK) --show-sdk-path)
CC ?= $(shell xcrun --sdk $(IOS_SDK) --find clang)
CXX ?= $(shell xcrun --sdk $(IOS_SDK) --find clang++)
# Force dynamic SDL when targeting iOS
SDL_STATIC := 0
SDL_CFLAGS := -isysroot $(SDKROOT) -arch arm64 -miphoneos-version-min=$(IOS_DEPLOYMENT_TARGET) \
-F$(IOS_SDL_FRAMEWORK_PARENT) -I$(IOS_SDL_FRAMEWORK)/Headers -DIOS_TARGET -D_THREAD_SAFE
SDL_LIBS_DYNAMIC := -isysroot $(SDKROOT) -arch arm64 -miphoneos-version-min=$(IOS_DEPLOYMENT_TARGET) \
-F$(IOS_SDL_FRAMEWORK_PARENT) -framework SDL2
SDL_LIBS_STATIC :=
endif
BASE_CFLAGS = -g -DLOG_USE_COLOR -I"." -I"psx" $(SDL_CFLAGS)
BASE_CFLAGS += -Ofast -Wno-overflow -Wall -pedantic -Wno-address-of-packed-member -flto
BASE_CXXFLAGS = -std=c++17 $(BASE_CFLAGS)
ifeq ($(CONTROLLER_GENERIC),1)
BASE_CFLAGS += -DCONTROLLER_GENERIC
BASE_CXXFLAGS += -DCONTROLLER_GENERIC
endif
ifeq ($(WASM_TARGET),wasm)
BASE_CFLAGS := $(filter-out -flto,$(BASE_CFLAGS))
BASE_CXXFLAGS := $(filter-out -flto,$(BASE_CXXFLAGS))
endif
2025-11-18 12:32:45 +03:00
ifeq ($(IOS_TARGET),1)
BASE_CFLAGS += -fembed-bitcode
BASE_CXXFLAGS += -fembed-bitcode
endif
ifeq ($(IMGUI_FRONTEND),1)
ifneq ($(IOS_TARGET),1)
ifneq ($(filter shared,$(MAKECMDGOALS)),)
$(warning IMGUI_FRONTEND is disabled for shared builds)
else
BASE_CFLAGS += -DIMGUI_FRONTEND
BASE_CXXFLAGS += -DIMGUI_FRONTEND
endif
endif
endif
ifeq ($(WASM_TARGET),wasm)
OS_INFO := Emscripten
else ifneq ($(IOS_TARGET),1)
2025-11-18 12:32:45 +03:00
OS_INFO := $(shell uname -rmo)
else
OS_INFO := iOS
endif
2025-11-18 03:59:11 +03:00
ifeq ($(PLATFORM),Darwin)
2025-11-18 12:32:45 +03:00
ifneq ($(IOS_TARGET),1)
BASE_CFLAGS += -mmacosx-version-min=10.9 -Wno-newline-eof
2025-11-18 03:59:11 +03:00
endif
2025-11-18 12:32:45 +03:00
endif
2025-11-18 03:59:11 +03:00
SHARED_EXT := .so
SHARED_LDFLAGS := -shared
SHARED_CFLAGS := $(BASE_CFLAGS) -D__DLL_BUILD -fPIC
SHARED_CXXFLAGS := $(BASE_CXXFLAGS) -D__DLL_BUILD -fPIC
2025-11-18 03:59:11 +03:00
ifeq ($(PLATFORM),Darwin)
SHARED_EXT := .dylib
SHARED_LDFLAGS := -dynamiclib
endif
2025-11-18 12:32:45 +03:00
ifeq ($(IOS_TARGET),1)
SHARED_LDFLAGS += -Wl,-install_name,@rpath/libarmsx$(SHARED_EXT)
2025-11-18 12:32:45 +03:00
SHARED_CFLAGS += -DIOS_TARGET
SHARED_CXXFLAGS += -DIOS_TARGET
endif
2025-11-18 03:59:11 +03:00
VERSION_TAG := $(shell git describe --always --tags --abbrev=0)
COMMIT_HASH := $(shell git rev-parse --short HEAD)
BIN_DIR := bin
ifeq ($(WASM_TARGET),wasm)
BIN_DIR := bin/wasm
endif
OBJ_DIR := $(BIN_DIR)/obj
BIN := $(BIN_DIR)/armsx
ifeq ($(WASM_TARGET),wasm)
BIN := $(BIN_DIR)/armsx.html
endif
SHARED_BIN := $(BIN_DIR)/libarmsx$(SHARED_EXT)
2025-11-18 03:59:11 +03:00
IMGUI_DIR := third_party/imgui
C_SOURCES := $(wildcard psx/*.c) \
$(wildcard psx/dev/*.c) \
$(wildcard psx/dev/cdrom/*.c) \
$(wildcard psx/input/*.c) \
$(wildcard psx/disc/*.c) \
$(wildcard frontend/*.c)
2025-11-18 12:32:45 +03:00
C_SOURCES_SHARED := $(C_SOURCES)
CPP_SOURCES := frontend/imgui_layer.cpp \
$(IMGUI_DIR)/imgui.cpp \
$(IMGUI_DIR)/imgui_draw.cpp \
$(IMGUI_DIR)/imgui_tables.cpp \
$(IMGUI_DIR)/imgui_widgets.cpp \
$(IMGUI_DIR)/backends/imgui_impl_sdl2.cpp \
$(IMGUI_DIR)/backends/imgui_impl_sdlrenderer2.cpp
C_OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(C_SOURCES))
C_OBJS_SHARED := $(patsubst %.c,$(OBJ_DIR)/%.o,$(C_SOURCES_SHARED))
CPP_OBJS := $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(CPP_SOURCES))
ALL_OBJS := $(C_OBJS) $(CPP_OBJS)
ALL_OBJS_SHARED := $(C_OBJS_SHARED) $(CPP_OBJS)
2025-11-18 12:32:45 +03:00
# Force dynamic SDL when building the shared library
ifneq (,$(filter shared,$(MAKECMDGOALS)))
override SDL_STATIC := 0
endif
ifeq ($(SDL_STATIC),1)
ifeq ($(SDL_LIBS_STATIC),)
$(warning Static SDL2 libraries not found; falling back to dynamic SDL2)
SDL_STATIC := 0
endif
endif
SDL_LIBS := $(if $(filter 1,$(SDL_STATIC)),$(SDL_LIBS_STATIC),$(SDL_LIBS_DYNAMIC))
SDL_LIBS_SHARED := $(SDL_LIBS_DYNAMIC)
.PHONY: all clean shared wasm
2025-11-18 03:59:11 +03:00
all: $(BIN)
shared: $(SHARED_BIN)
wasm: $(BIN)
2025-11-18 03:59:11 +03:00
$(BIN_DIR):
mkdir -p $(BIN_DIR)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR)
mkdir -p $(dir $@)
$(CC) -c $< -o $@ $(BASE_CFLAGS) \
2025-11-18 03:59:11 +03:00
-DOS_INFO="$(OS_INFO)" \
-DREP_VERSION="$(VERSION_TAG)" \
-DREP_COMMIT_HASH="$(COMMIT_HASH)"
2025-11-18 03:59:11 +03:00
$(OBJ_DIR)/%.o: %.cpp | $(OBJ_DIR)
mkdir -p $(dir $@)
$(CXX) -c $< -o $@ $(BASE_CXXFLAGS) \
-I$(IMGUI_DIR) \
-I$(IMGUI_DIR)/backends \
2025-11-18 03:59:11 +03:00
-DOS_INFO="$(OS_INFO)" \
-DREP_VERSION="$(VERSION_TAG)" \
-DREP_COMMIT_HASH="$(COMMIT_HASH)"
$(BIN): $(ALL_OBJS) | $(BIN_DIR)
$(CXX) $(ALL_OBJS) -o $(BIN) $(SDL_LIBS) $(WASM_LDFLAGS)
$(SHARED_BIN): $(ALL_OBJS_SHARED) | $(BIN_DIR)
2025-11-18 12:32:45 +03:00
$(CXX) $(SHARED_LDFLAGS) $(ALL_OBJS_SHARED) -o $(SHARED_BIN) $(SDL_LIBS_SHARED)
2025-11-18 03:59:11 +03:00
clean:
rm -rf "$(BIN_DIR)"