blob: 647ebcd35f0db7e96f6d1dd523d9c245889daf6f (
plain) (
tree)
|
|
# if $CC is not set, use gcc as a sensible default
CC ?= gcc
RM ?= rm -fv
# if $CFLAGS is not set, be very pedantic and compile
# as C11, that should catch some common errors, also
# fortify the source, which is a must for security.
CFLAGS ?= -Wall \
-D_FORTIFY_SOURCE=2 \
-Wextra -Wcast-align -Wcast-qual -Wpointer-arith \
-Waggregate-return -Wunreachable-code -Wfloat-equal \
-Wformat=2 -Wredundant-decls -Wundef \
-Wdisabled-optimization -Wshadow -Wmissing-braces \
-Wstrict-aliasing=2 -Wstrict-overflow=5 -Wconversion \
-Wno-unused-parameter \
-pedantic -std=c11
CFLAGS_DEBUG := -g3 \
-O \
-DDEBUG
CFLAGS_RELEASE := -O2 \
-DNDEBUG \
-march=native \
-mtune=native \
-ftree-vectorize
# the default target is debug
all: debug
# clean target, removing all .o and the executable
clean:
$(RM) *o bs_exe
# when the target is debug,
# add CFLAGS_DEBUG to CFLAGS
debug: CFLAGS += $(CFLAGS_DEBUG)
debug: clean bs_exe
# when the target is release,
# add CFLAGS_RELEASE to CFLAGS
release: CFLAGS += $(CFLAGS_RELEASE)
release: clean bs_exe
bs_exe: main.o
$(CC) $^ -o $@ $(CFLAGS)
# when looking for something that ends in .o, look
# for the same thing ending in .c and run gcc on it
%.o: %.c
$(CC) -c $< $(CFLAGS)
.PHONY: debug release clean
|