193 lines
4.7 KiB
Makefile
193 lines
4.7 KiB
Makefile
# Flags to pass to the compiler
|
|
CFLAGS = -std=c99 -D_GNU_SOURCE -fPIC -Iinclude -I. -Wunused -Wall -Wextra -Wpedantic
|
|
|
|
# Additional CFLAGS for debug build
|
|
DCFLAGS = -Og -g3
|
|
|
|
# Addditional CFLAGS for release build
|
|
RCFLAGS = -O3 -s
|
|
|
|
# Flags to pass to the linker
|
|
LDFLAGS =
|
|
|
|
# Flags to enable sanitize checker
|
|
SFLAGS = -fsanitize=address -fsanitize=leak
|
|
|
|
# Destination directory
|
|
DESTDIR ?= $(realpath .)/binary
|
|
|
|
##############################################
|
|
### Do not modify anything below this line ###
|
|
##############################################
|
|
ifeq ($(OS),Windows_NT)
|
|
PLATFORM := Windows
|
|
else
|
|
PLATFORM := $(shell uname -s)
|
|
endif
|
|
|
|
ifeq "$(PLATFORM)" "Darwin"
|
|
CC := clang
|
|
CP := cp -v
|
|
MD := mkdir -p
|
|
RM := rm -rfv
|
|
LDFLAGS := $(LDFLAGS) -Wl,-export_dynamic -undefined dynamic_lookup
|
|
LIBS := -ldl -lm
|
|
EXESUFFIX :=
|
|
LIBSUFFIX := .dylib
|
|
endif
|
|
ifeq "$(PLATFORM)" "FreeBSD"
|
|
CC := clang
|
|
CP := cp -v
|
|
MD := mkdir -p
|
|
RM := rm -rfv
|
|
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
|
LIBS := -lm
|
|
EXESUFFIX :=
|
|
LIBSUFFIX := .so
|
|
endif
|
|
ifeq "$(PLATFORM)" "Linux"
|
|
CC := gcc
|
|
CP := cp -v
|
|
MD := mkdir -p
|
|
RM := rm -rfv
|
|
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
|
LIBS := -ldl -lm
|
|
EXESUFFIX :=
|
|
LIBSUFFIX := .so
|
|
endif
|
|
ifeq "$(PLATFORM)" "OpenBSD"
|
|
CC := clang
|
|
CP := cp -v
|
|
MD := mkdir -p
|
|
RM := rm -rfv
|
|
LDFLAGS := $(LDFLAGS) -Wl,--export-dynamic
|
|
LIBS := -lm
|
|
EXESUFFIX :=
|
|
LIBSUFFIX := .so
|
|
endif
|
|
ifeq "$(PLATFORM)" "Windows"
|
|
CC := gcc
|
|
CP := copy
|
|
MD := md
|
|
RM := del /F
|
|
LDFLAGS := $(LDFLAGS) -Wl,--export-all-symbols
|
|
LIBS :=
|
|
EXESUFFIX := .exe
|
|
LIBSUFFIX := .dll
|
|
endif
|
|
|
|
ASTYLE_FLAGS =\
|
|
--style=java \
|
|
--indent=force-tab \
|
|
--attach-closing-while \
|
|
--attach-inlines \
|
|
--attach-classes \
|
|
--indent-classes \
|
|
--indent-modifiers \
|
|
--indent-switches \
|
|
--indent-cases \
|
|
--indent-preproc-block \
|
|
--indent-preproc-define \
|
|
--indent-col1-comments \
|
|
--pad-oper \
|
|
--pad-comma \
|
|
--unpad-paren \
|
|
--delete-empty-lines \
|
|
--align-pointer=name \
|
|
--align-reference=name \
|
|
--break-one-line-headers \
|
|
--add-braces \
|
|
--verbose \
|
|
--formatted \
|
|
--lineend=linux
|
|
|
|
BINARY := aer
|
|
BUILD_DIR := build
|
|
CFLAGS := $(CFLAGS) -DPH7_LIBRARY_SUFFIX=\"$(LIBSUFFIX)\"
|
|
LIBFLAGS := -Wl,-rpath,$(DESTDIR) -L$(BUILD_DIR) -l$(BINARY)
|
|
|
|
ENGINE_DIRS := engine/lib engine
|
|
ENGINE_SRCS := $(foreach dir,$(ENGINE_DIRS),$(wildcard $(dir)/*.c))
|
|
ENGINE_MAKE := $(ENGINE_SRCS:.c=.o)
|
|
ENGINE_OBJS := $(addprefix $(BUILD_DIR)/,$(ENGINE_MAKE))
|
|
|
|
MODULE := $(subst /,,$(subst modules/,,$(dir $(wildcard modules/*/))))
|
|
SAPI := $(subst /,,$(subst sapi/,,$(dir $(wildcard sapi/*/))))
|
|
|
|
TEST_DIR := tests
|
|
TEST_EXT := aer
|
|
TESTS := $(subst .$(TEST_EXT),.test,$(wildcard $(TEST_DIR)/*.$(TEST_EXT)))
|
|
|
|
|
|
.SUFFIXES:
|
|
.PHONY: clean debug install release style tests
|
|
|
|
debug: export CFLAGS := $(CFLAGS) $(DCFLAGS)
|
|
debug: engine sapi modules
|
|
release: export CFLAGS := $(CFLAGS) $(RCFLAGS)
|
|
release: engine sapi modules
|
|
sanitize: export CFLAGS := $(CFLAGS) $(DCFLAGS) $(SFLAGS)
|
|
sanitize: $(eval LDFLAGS := $(LDFLAGS) $(SFLAGS))
|
|
sanitize: engine sapi modules
|
|
|
|
engine: $(ENGINE_OBJS)
|
|
$(CC) -o $(BUILD_DIR)/lib$(BINARY)$(LIBSUFFIX) $(LDFLAGS) $(LIBS) -shared $(ENGINE_OBJS)
|
|
|
|
modules: $(MODULE)
|
|
|
|
sapi: $(SAPI)
|
|
|
|
$(BUILD_DIR)/%.o: %.c
|
|
$(MD) $(dir $@)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(MODULE):
|
|
$(eval MODULE_DIRS := $@)
|
|
$(eval MODULE_SRCS := $(foreach dir,modules/$(MODULE_DIRS),$(wildcard $(dir)/*.c)))
|
|
$(eval MODULE_MAKE := $(MODULE_SRCS:.c=.o))
|
|
$(eval MODULE_OBJS := $(addprefix $(BUILD_DIR)/,$(MODULE_MAKE)))
|
|
$(eval MODULE_PROG := $(MODULE_DIRS)$(LIBSUFFIX))
|
|
$(MAKE) $(MODULE_OBJS)
|
|
$(CC) -o $(BUILD_DIR)/$(MODULE_PROG) $(LDFLAGS) -shared $(MODULE_OBJS)
|
|
|
|
$(SAPI):
|
|
$(eval SAPI_DIRS := $@)
|
|
$(eval SAPI_SRCS := $(foreach dir,sapi/$(SAPI_DIRS),$(wildcard $(dir)/*.c)))
|
|
$(eval SAPI_MAKE := $(SAPI_SRCS:.c=.o))
|
|
$(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE)))
|
|
$(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(EXESUFFIX))
|
|
$(MAKE) $(SAPI_OBJS)
|
|
$(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LDFLAGS) $(LIBFLAGS) $(SAPI_OBJS)
|
|
|
|
%.test: %.exp %.$(TEST_EXT)
|
|
@$(MD) ${BUILD_DIR}/${TEST_DIR}
|
|
@echo -n "Executing test: $*.$(TEST_EXT) ... "
|
|
@if [ "x`echo $* | grep args`" != "x" ]; \
|
|
then \
|
|
binary/$(BINARY)$(EXESUFFIX) $*.$(TEST_EXT) - arg1 arg2 arg3 arg4 2>&1 >$(BUILD_DIR)/$*.out; \
|
|
else \
|
|
binary/$(BINARY)$(EXESUFFIX) $*.$(TEST_EXT) 2>&1 >$(BUILD_DIR)/$*.out; \
|
|
fi
|
|
@if [ "x`diff -qbu $*.exp $(BUILD_DIR)/$*.out`" != "x" ]; \
|
|
then \
|
|
echo "ERROR!"; \
|
|
diff -u $*.exp $(BUILD_DIR)/$*.out; \
|
|
rm -f $(BUILD_DIR)/$(TEST_DIR)/*.out \
|
|
exit 1; \
|
|
fi;
|
|
@rm -f $(BUILD_DIR)/$(TEST_DIR)/*.out
|
|
@echo "OK!"
|
|
|
|
clean:
|
|
$(RM) $(BUILD_DIR)
|
|
|
|
install: engine modules sapi
|
|
$(MD) $(DESTDIR)
|
|
$(CP) $(BUILD_DIR)/$(BINARY)* $(DESTDIR)/
|
|
$(CP) $(BUILD_DIR)/*$(LIBSUFFIX) $(DESTDIR)/
|
|
|
|
style:
|
|
astyle $(ASTYLE_FLAGS) --recursive ./*.c,*.h
|
|
|
|
tests: $(TESTS)
|