use compiler configured include for dependencies
[afunbrick.git] / Makefile
blob66231a699d903c977bfd043cefe33d16bd2ebcd4
1 CC = cc
2 INCLUDES = -I src -I deps
3 CFLAGS = -std=c99 -Wall -Wextra -Wconversion -Werror --pedantic $(INCLUDES)
4 LDFLAGS =
5 UPX_CMD =
6 MODE = debug
7 LIBC = gnu
8 ARCH = $(shell uname -m)
9 OS = $(shell uname | tr '/[:upper:]' '_[:lower:]' )
11 OBJECTS_FILENAMES = config.o bytecode.o vectors.o parser.o bf/parser.o bf/machine.o bfmm/parser.o bfmm/machine.o lcbf/machine.o ook/parser.o mndb/machine.o bfp3/parser.o bfp3/machine.o machine.o main.o
12 TARGET_FILENAME = afunbrick
14 ifdef MUSL
15 CC = musl-gcc
16 LDFLAGS += -static
17 LIBC = musl
18 endif
20 ifdef RELEASE
21 CFLAGS += -O9 -DNDEBUG
22 LDFLAGS += -s
23 UPX_CMD = upx --brute $(TARGET)
24 MODE = release
25 else
26 CFLAGS += -g -O0
27 endif
29 TARGET_DIR = target/$(ARCH)-$(OS)-$(LIBC)/$(MODE)
30 OBJECTS_DIR = $(TARGET_DIR)/obj
31 OBJECTS = $(OBJECTS_FILENAMES:%=$(OBJECTS_DIR)/%)
32 TARGET = $(TARGET_DIR)/$(TARGET_FILENAME)
34 include deps/module.mk
36 .PHONY: help clean test
38 help:
39 @echo "main targets: all test clean"
40 @echo "options:"
41 @echo " RELEASE=1 remove debug outputs, enable optimization and strip the executable"
42 @echo " MUSL=1 link statically against musl libc"
44 all: $(TARGET)
46 $(TARGET): $(OBJECTS)
47 $(CC) $^ -o $@ $(LDFLAGS)
48 $(UPX_CMD)
50 $(OBJECTS_DIR)/%.o: src/%.c $(DEPS)
51 @mkdir -p $(dir $@)
52 $(CC) $(CFLAGS) $< -c -o $@
54 clean:
55 /bin/rm -rf target
57 include test/module.mk