UNAME_M := $(shell uname -m) ifeq ($(UNAME_M),x86_64) ARCH := ARCHITECTURE_X64 else ifneq ($(filter $(UNAME_M),i686,i386),) ARCH := ARCHITECTURE_X86 else ifneq ($(filter $(UNAME_M),aarch64 arm64),) ARCH := ARCHITECTURE_ARM64 else ifneq ($(filter $(UNAME_M),armv7l armv6l),) ARCH := ARCHITECTURE_ARM32 endif UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) OS := OS_MACOS else ifeq ($(UNAME_S),Linux) OS := OS_LINUX endif CC = clang ifeq ($(CC),clang) COMP := COMPILER_CLANG else ifeq ($(CC),gcc) COMP := COMPILER_GCC endif # printf '\x01\x00' | od -to2 | head -n 1 # -ansi -pedantic -pedantic-errors CFLAGS = -Wno-long-long -Wall -Wextra \ -Wincompatible-pointer-types \ -Wint-conversion -Wimplicit-int-float-conversion -Wformat \ -Wno-strict-prototypes -Wno-missing-field-initializers \ -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable \ -Wno-unused-but-set-variable \ -fno-show-column ifeq ($(COMP),COMPILER_CLANG) CFLAGS += -fno-caret-diagnostics else ifeq ($(COMP),COMPILER_GCC) CFLAGS += -fno-diagnostics-show-caret endif ifeq ($(OS),OS_MACOS) FLAGS = -glldb INCLUDE = -I./libs/include/ LIBS = ./libs/lib/arm-macos/libSDL3.a -lm FRAMEWORKS = -framework Cocoa -framework IOKit -framework CoreAudio \ -framework AudioToolbox -framework ForceFeedback \ -framework Carbon -framework GameController \ -framework Metal -framework QuartzCore \ -framework CoreHaptics else ifeq ($(OS),OS_LINUX) FLAGS = -ggdb -D_POSIX_C_SOURCE=200809L -no-pie -fno-omit-frame-pointer INCLUDE = -I./libs/include/ LIBS = ./libs/lib/x86_64-linux/libSDL3.a -lm -lX11 FRAMEWORKS = endif EXE=handmadehero default: libhandmade $(EXE) libhandmade: handmade.c $(CC) $(CFLAGS) $(FLAGS) \ -D$(ARCH)=1 -D$(OS)=1 -D$(COMP)=1 \ -fPIC -shared $(INCLUDE) $^ $(LIBS) \ $(FRAMEWORKS) -o libhandmade.so $(EXE): sdl_handmade.c libhandmade $(CC) $(CFLAGS) $(FLAGS) \ -D$(ARCH)=1 -D$(OS)=1 -D$(COMP)=1 \ $(INCLUDE) $< $(LIBS) \ $(FRAMEWORKS) -o $@ $(ifneq $(filter $(OS), OS_MACOS OS_LINUX), \ /link /FORCE:MULTIPLE) watch: @ while true; do \ inotifywait -q -q -e 'modify' . && clear && make -B; \ done perf: perf record --call-graph dwarf ./$(EXE) run: @ clear; ./$(EXE) clean: @ rm -rf $(EXE) $(EXE).dSYM libhandmade.so libhandmade.so.dSYM