CFLAGS += -Wall -Wextra -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough -Werror=format-security \ -Wbidi-chars=any -Werror=implicit -Werror=incompatible-pointer-types -Werror=int-conversion \ -fno-delete-null-pointer-checks -fstack-clash-protection -fstack-protector-strong -fstrict-flex-arrays=3 DEBUG_CFLAGS = -DDEBUGBUILD -g -Werror -fsanitize=address -O0 PROD_CFLAGS = -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -FPIE -pie -Wl,-z,noexecstack -Wl,--as-needed -Wl,--no-copy-dt-needed-entries CFLAGS += -I include all: \ out/custom_uniq \ out/mem_internal_check \ out/remove_existing_lines \ out/sort_example \ out/split_for_sort \ out/tree_based_check debug: \ out/debug/custom_uniq \ out/debug/mem_internal_check \ out/debug/remove_existing_lines \ out/debug/sort_example \ out/debug/split_for_sort \ out/debug/tree_based_check clean: out rm -fv out/debug/* rmdir out/debug rm -fv out/* rm -rfv out out: mkdir -p out out/debug: out mkdir -p out/debug # Lazy, not splitting compiler & linker calls out/custom_uniq: out src/custom_uniq.c include/trace_macros.h ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/custom_uniq.c out/debug/custom_uniq: out/debug src/custom_uniq.c include/trace_macros.h ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/custom_uniq.c out/mem_internal_check: out src/mem_internal_check.c \ include/trace_macros.h include/hex_conversion.h include/time_utils.h ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/mem_internal_check.c out/debug/mem_internal_check: out/debug src/mem_internal_check.c \ include/trace_macros.h include/hex_conversion.h include/time_utils.h ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/mem_internal_check.c out/remove_existing_lines: out src/remove_existing_lines.c \ include/trace_macros.h include/time_utils.h ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/remove_existing_lines.c out/debug/remove_existing_lines: out/debug src/mem_internal_check.c \ include/trace_macros.h include/hex_conversion.h ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/remove_existing_lines.c out/sort_example: out src/sort_example.c ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/sort_example.c out/debug/sort_example: out src/sort_example.c ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/sort_example.c out/split_for_sort: out src/split_for_sort.c include/trace_macros.h ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/split_for_sort.c out/debug/split_for_sort: out/debug src/split_for_sort.c include/trace_macros.h ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/split_for_sort.c out/tree_based_check: out src/tree_based_check.c \ include/trace_macros.h include/hex_conversion.h ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/tree_based_check.c out/debug/tree_based_check: out/debug src/tree_based_check.c \ include/trace_macros.h include/hex_conversion.h ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/tree_based_check.c