Makefile: Add release and debug builds

This commit is contained in:
olemorud
2023-04-22 19:41:29 +02:00
parent 89dc8149c0
commit c1398004fc
2 changed files with 45 additions and 17 deletions

View File

@@ -1,31 +1,57 @@
all:
CC=gcc BUILD ?= debug
CFLAGS=-ggdb -Og COMPILER ?= gcc
CFLAGS+=-Wextra -Wall -Wpedantic
#CFLAGS+=-fsanitize=address -fsanitize=undefined
CFLAGS+=-fanalyzer
CFLAGS+=-rdynamic
CFLAGS+=-Iinclude
LDFLAGS= # ==== set compiler flags ====
LDLIBS= # credits Maxim Egorushkin:
# https://stackoverflow.com/questions/48791883/best-practice-for-building-a-make-file/48793058#48793058
_OBJS=main.o parse.o json_obj.o util.o CC := gcc
OBJS=$(patsubst %,.obj/%,$(_OBJS))
all: bin/parse LDFLAGS.debug :=
LDFLAGS.release :=
LDFLAGS := -g ${LDFLAGS.${BUILD}}
LDLIBS :=
bin/parse: $(OBJS) | bin # -fsanitize={address,undefined}
CFLAGS.gcc.debug := -Og -ggdb -fanalyzer -DBACKTRACE -rdynamic
CFLAGS.gcc.release := -O3 -march=native -DNDEBUG
CFLAGS.gcc := ${CFLAGS.gcc.${BUILD}} -Iinclude -W{all,extra,error} -fstack-protector-all -std=gnu11
CFLAGS.clang.debug=-O0 -ggdb -DBACKTRACE
CFLAGS.clang.release=-O3 -march=native -DNDEBUG
CFLAGS.clang=-Wextra -Wall -Wpedantic -fstack-protector-all ${CFLAGS.clang.${BUILD}}
CFLAGS := ${CFLAGS.${COMPILER}}
# ==== end set compiler flags ====
BUILD_DIR := bin/${BUILD}
OBJ_DIR := .obj/${BUILD}
_OBJS := main.o parse.o json_obj.o util.o
OBJS := $(patsubst %,$(OBJ_DIR)/%,$(_OBJS))
all : $(BUILD_DIR)/parse
$(BUILD_DIR)/parse : $(OBJS) | $(BUILD_DIR) Makefile
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDLIBS) -o $@ $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDLIBS) -o $@
.obj/main.o: src/main.c | .obj $(OBJ_DIR)/main.o : src/main.c | $(OBJ_DIR) Makefile
$(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -c $< -o $@ $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -c $< -o $@
.obj/%.o: src/%.c include/%.h | .obj $(OBJ_DIR)/%.o : src/%.c include/%.h | $(OBJ_DIR) Makefile
$(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -c $< -o $@ $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -c $< -o $@
bin: $(BUILD_DIR) :
mkdir -p $@ mkdir -p $@
.obj: $(OBJ_DIR) :
mkdir -p $@ mkdir -p $@
clean :
rm -rfi $(OBJ_DIR) $(BUILD_DIR)
.PHONY : clean all

View File

@@ -41,6 +41,7 @@ void* calloc_or_die(size_t nmemb, size_t size)
// https://www.gnu.org/software/libc/manual/html_node/Backtraces.html // https://www.gnu.org/software/libc/manual/html_node/Backtraces.html
void print_trace() void print_trace()
{ {
#ifdef BACKTRACE
void* array[500]; void* array[500];
char** strings; char** strings;
int size, i; int size, i;
@@ -55,4 +56,5 @@ void print_trace()
} }
free(strings); free(strings);
#endif
} }