diff options
Diffstat (limited to 'makefile')
-rw-r--r-- | makefile | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/makefile b/makefile new file mode 100644 index 0000000..1938be4 --- /dev/null +++ b/makefile @@ -0,0 +1,54 @@ +# Copyright (c) 2023, Marvin Borner <dev@marvinborner.de> +# SPDX-License-Identifier: MIT + +CC = gcc +TG = ctags + +BUILD = ${CURDIR}/build +SRC = ${CURDIR}/src +INC = ${CURDIR}/inc +SRCS = $(wildcard $(SRC)/*.c) $(wildcard $(SRC)/*/*.c) +OBJS = $(patsubst $(SRC)/%.c, $(BUILD)/%.o, $(SRCS)) + +CFLAGS_DEBUG = -fsanitize=leak,undefined,address -g -O0 +CFLAGS_WARNINGS = -Wall -Wextra -Wshadow -Wpointer-arith -Wwrite-strings -Wredundant-decls -Wnested-externs -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wcast-qual -Wswitch-default -Wswitch-enum -Wunreachable-code -Wundef -Wold-style-definition -pedantic -Wno-switch-enum +CFLAGS = $(CFLAGS_WARNINGS) -std=c99 -Ofast -I$(INC) + +ifdef DEBUG # TODO: Somehow clean automagically +CFLAGS += $(CFLAGS_DEBUG) +endif + +ifeq ($(PREFIX),) + PREFIX := /usr/local +endif + +all: genopts compile + +full: all sync + +genopts: + @gengetopt -i ${CURDIR}/options.ggo -G --output-dir=$(SRC) + +compile: $(BUILD) $(OBJS) $(BUILD)/blocade + +clean: + @rm -rf $(BUILD)/* + +install: + @install -m 755 $(BUILD)/blocade $(DESTDIR)$(PREFIX)/bin/ + +sync: # Ugly hack + @$(MAKE) $(BUILD)/blocade --always-make --dry-run | grep -wE 'gcc|g\+\+' | grep -w '\-c' | jq -nR '[inputs|{directory:".", command:., file: match(" [^ ]+$$").string[1:]}]' >compile_commands.json + @$(TG) -R --exclude=.git --exclude=build . + +$(BUILD)/%.o: $(SRC)/%.c + @mkdir -p $(@D) + @$(CC) -c -o $@ $(CFLAGS) $< + +$(BUILD)/blocade: $(OBJS) + @$(CC) -o $@ $(CFLAGS) $^ + +.PHONY: all compile clean sync + +$(BUILD): + @mkdir -p $@ |