#dd Compiler and assembler CC = gcc AS = as LD = ld OBJDUMP = objdump SIZE = size CFLAGS += -std=c2x CFLAGS += -Wall CFLAGS += -Wextra CFLAGS += -Werror CFLAGS += -Wno-unused-parameter CFLAGS += -Wno-unused-variable CFLAGS += -Wno-unused-function CFLAGS += -Wno-unused-but-set-variable CFLAGS += -Wno-unused-value CFLAGS += -Wno-unused-label CFLAGS += -Wno-unused-result CFLAGS += -Wno-unused-local-typedefs CFLAGS += -Wno-unused-const-variable CFLAGS += -Wno-unused-macros CFLAGS += -O3 CFLAGS += -Ilibadd/include CFLAGS += -lm CFLAGS += -lglfw CFLAGS += -lGL CFLAGS += -lGLU CFLAGS += -g GITHASH = $(shell git rev-parse --short HEAD) # Specify the target binary (call it whatever) TARGET = build/program TARGET_TAR = $(TARGET)-$(GITHASH).tar.zst TARGET_SIG = $(TARGET_TAR).minisig SRCS := $(wildcard src/*.c) # Specify the object files in the build directory OBJS := $(patsubst src/%.c,build/%.o,$(SRCS)) all: $(TARGET) libadd/libadd.a: $(MAKE) -C libadd # For convenience run: $(TARGET) @./$(TARGET) # Create the build directory mkbuilddir: @mkdir -p build # Link the object files into the target binary $(TARGET): $(OBJS) libadd/libadd.a @$(CC) $(CFLAGS) -o $@ $^ @echo -e "LD \t$^" # Compile the source files into object files build/%.o: src/%.c | mkbuilddir @$(CC) $(CFLAGS) -c -o $@ $< || (rm -f $@ && exit 1) @echo -e "CC \t$<" # Print the size of the target binary size: $(TARGET) $(SIZE) $(TARGET) # Format with clang-format format: $(SRCS) clang-format -i $^ # Clean up the build directory clean: rm -r build rm -f build/*.o rm -f $(TARGET)* $(MAKE) -C libadd clean --no-print-directory # Create a signed release tar: $(TARGET_TAR) # Sign the tar sign: $(TARGET_SIG) $(TARGET_SIG): $(TARGET_TAR) minisign -Sm $< $(TARGET_TAR): $(TARGET) strip $< tar --zstd -cvf $@ $< .PHONY: all clean size mkbuilddir run tar sign