| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- # Kohi Utils makefile
- # All compiler flags/rules used across the board.
- CFLAGS =-std=gnu11 -Wall -Wextra -Werror -Wno-error=deprecated-declarations -Wno-error=unused-function
- CFLAGS +=-Wvla -Werror=vla -Wgnu-folding-constant -Wno-missing-braces -Wstrict-prototypes -Wno-unused-parameter
- CFLAGS +=-Wno-missing-field-initializers -Wno-tautological-compare
- # NOTE: -fvisibility=hidden hides all symbols by default, and only those that explicitly say otherwise are exported (i.e. via KAPI).
- CFLAGS +=-fvisibility=hidden
- # Base linker flags
- LDFLAGS = -Lbin -Llib
- # Base include flags
- INCLUDE_FLAGS = -Isrc
- DEFINES =-DKIMPORT
- VG_ASSEMBLY_NAME =versiongen
- CFG_ASSEMBLY_NAME =cfgen
- KTIME_ASSEMBLY_NAME=ktime
- VG_OUTPUT_NAME =
- CFG_OUTPUT_NAME =
- KTIME_OUTPUT_NAME =
- UNAME_S :=
- ifneq ($(OS),Windows_NT)
- UNAME_S = $(shell uname -s)
- endif
- ifeq ($(OS),Windows_NT)
- PLATFORM := win32
- else ifeq ($(UNAME_S),Linux)
- PLATFORM := linux
- else ifeq ($(UNAME_S),Darwin)
- PLATFORM := macos
- else
- $(error Unsupported platform)
- endif
- # =========================================================
- # BEGIN TARGET RECIPES
- # =========================================================
- .PHONY: all-release all-debug flags-debug flags-release
- .PHONY: genversion genversion-win32 genversion-linux genversion-macos
- .PHONY: scaffold scaffold-win32 scaffold-linux scaffold-macos
- .PHONY: link link-win32 link-linux link-macos
- all-release: scaffold flags-release compile link
- all-debug: scaffold flags-debug compile link
- flags-debug: DEFINES += -D_DEBUG
- flags-debug: CFLAGS += -g -MD -O0 -fno-omit-frame-pointer
- flags-debug: LDFLAGS += -g
- flags-debug: link compile
- flags-release: DEFINES += -DKRELEASE
- flags-release: CFLAGS += -MD -O2
- flags-release: LDFLAGS +=
- flags-release: link compile
- scaffold: scaffold-$(PLATFORM)
- .NOTPARALLEL: scaffold
- scaffold-win32:
- @if not exist obj mkdir obj
- @if not exist bin mkdir bin
- scaffold-linux scaffold-macos:
- @mkdir -p bin
- @mkdir -p obj
- .PHONY: clean
- clean: clean-$(PLATFORM)
- clean-win32:
- if exist bin del /s /q bin\*.*
- if exist obj del /s /q obj\*.*
- clean-linux clean-macos:
- @rm -rf bin/*
- @rm -rf obj/*
- link: link-$(PLATFORM)
- link-win32: LDFLAGS += -fdeclspec -Wno-cast-function-type-mismatch -luser32 -lgdi32 -lwinmm -Xlinker /INCREMENTAL
- link-win32: DEFINES += -D_CRT_SECURE_NO_WARNINGS -DUNICODE
- link-win32: VG_OUTPUT_NAME = bin\$(VG_ASSEMBLY_NAME).exe
- link-win32: CFG_OUTPUT_NAME = bin\$(CFG_ASSEMBLY_NAME).exe
- link-win32: KTIME_OUTPUT_NAME = bin\$(KTIME_ASSEMBLY_NAME).exe
- # NOTE: --no-undefined and --no-allow-shlib-undefined ensure that symbols linking against are resolved.
- # These are linux-specific, as the default behaviour is the opposite of this, allowing code to compile
- # here that would not on other platforms from not being exported (i.e. Windows)
- # Discovered the solution here for this: https://github.com/ziglang/zig/issues/8180
- link-linux: CFLAGS += -Wno-cast-function-type-mismatch -fPIC
- link-linux: LDFLAGS += -lxcb -lX11 -lX11-xcb -lxkbcommon -lxcb-xkb -lm -ldl -L/usr/X11R6/lib -Wl,--no-undefined,--no-allow-shlib-undefined,-rpath='$$ORIGIN'
- link-linux: VG_OUTPUT_NAME = bin/$(VG_ASSEMBLY_NAME)
- link-linux: CFG_OUTPUT_NAME = bin/$(CFG_ASSEMBLY_NAME)
- link-linux: KTIME_OUTPUT_NAME = bin/$(KTIME_ASSEMBLY_NAME)
- link-macos: LDFLAGS += -lobjc -framework AppKit -framework QuartzCore -framework DiskArbitration -framework CoreFoundation
- link-macos: VG_OUTPUT_NAME = bin/$(VG_ASSEMBLY_NAME)
- link-macos: CFG_OUTPUT_NAME = bin/$(CFG_ASSEMBLY_NAME)
- link-macos: KTIME_OUTPUT_NAME = bin/$(KTIME_ASSEMBLY_NAME)
- link-win32 link-linux link-macos: link-common-vg link-common-cfg
- link-win32: link-ktime-win32
- link-common-vg: obj/versiongen.c.o
- clang obj/versiongen.c.o -o $(VG_OUTPUT_NAME) $(LDFLAGS)
- link-common-cfg: obj/cfgen.c.o
- clang obj/cfgen.c.o -o $(CFG_OUTPUT_NAME) $(LDFLAGS)
- link-ktime-win32: obj/ktime.c.o
- clang obj/ktime.c.o -o $(KTIME_OUTPUT_NAME) $(LDFLAGS)
- obj/versiongen.c.o obj/cfgen.c.o: compile
- .PHONY: compile
- compile: compile-$(PLATFORM)
- compile-macos compile-linux: compile-common
- compile-win32: compile-common
- clang src/ktime.c $(CFLAGS) -c -o obj/ktime.c.o $(DEFINES) $(INCLUDE_FLAGS)
- compile-common:
- clang src/versiongen.c $(CFLAGS) -c -o obj/versiongen.c.o $(DEFINES) $(INCLUDE_FLAGS)
- clang src/cfgen.c $(CFLAGS) -c -o obj/cfgen.c.o $(DEFINES) $(INCLUDE_FLAGS)
|