1COMPILER_DIR = src/compiler/ 2RUNTIME_DIR = src/runtime/ 3SHARED_DIR = src/shared/ 4UTILS_DIR = src/utils/ 5OPT_DIR = src/optionals/ 6GRAVITY_SRC = src/cli/gravity.c 7EXAMPLE_SRC = examples/example.c 8 9CC ?= gcc 10SRC = $(wildcard $(COMPILER_DIR)*.c) \ 11 $(wildcard $(RUNTIME_DIR)*.c) \ 12 $(wildcard $(SHARED_DIR)*.c) \ 13 $(wildcard $(UTILS_DIR)*.c) \ 14 $(wildcard $(OPT_DIR)*.c) 15 16INCLUDE = -I$(COMPILER_DIR) -I$(RUNTIME_DIR) -I$(SHARED_DIR) -I$(UTILS_DIR) -I$(OPT_DIR) 17CFLAGS = $(INCLUDE) -std=gnu99 -fgnu89-inline -fPIC -DBUILD_GRAVITY_API 18OBJ = $(SRC:.c=.o) 19 20ifeq ($(OS),Windows_NT) 21 # Windows 22 LIBTARGET = gravity.dll 23 LDFLAGS = -lm -lShlwapi 24else 25 UNAME_S := $(shell uname -s) 26 ifeq ($(UNAME_S),Darwin) 27 # MacOS 28 LIBTARGET = libgravity.dylib 29 LDFLAGS = -lm 30 else ifeq ($(UNAME_S),OpenBSD) 31 # OpenBSD 32 LIBTARGET = libgravity.so 33 LDFLAGS = -lm 34 else ifeq ($(UNAME_S),FreeBSD) 35 # FreeBSD 36 LIBTARGET = libgravity.so 37 LDFLAGS = -lm 38 else ifeq ($(UNAME_S),NetBSD) 39 # NetBSD 40 LIBTARGET = libgravity.so 41 LDFLAGS = -lm 42 else ifeq ($(UNAME_S),DragonFly) 43 # DragonFly 44 LIBTARGET = libgravity.so 45 LDFLAGS = -lm 46 else 47 # Linux 48 LIBTARGET = libgravity.so 49 LDFLAGS = -lm -lrt 50 endif 51endif 52 53ifeq ($(mode),debug) 54 CFLAGS += -g -O0 -DDEBUG 55else 56 CFLAGS += -O2 57endif 58 59all: gravity 60 61gravity: $(OBJ) $(GRAVITY_SRC) 62 $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) 63 64example: $(OBJ) $(EXAMPLE_SRC) 65 $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) 66 67lib: gravity 68 $(CC) -shared -o $(LIBTARGET) $(OBJ) $(LDFLAGS) 69 70clean: 71 rm -f $(OBJ) gravity example libgravity.so gravity.dll 72 73.PHONY: all clean gravity example 74