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