# 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 += -g # Specify the target binary (call it whatever) TARGET = build/bin.elf TARGET_TAR = $(TARGET).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) release : $(TARGET) @strip $(TARGET) @upx -q --force-overwrite $(TARGET) -o $(TARGET).upx > /dev/null @minisign -Sm $(TARGET) @tar --zstd -cvf $(TARGET).tar.zst $(TARGET) $(TARGET).minisig 1>/dev/null @zip $(TARGET).zip $(TARGET) $(TARGET).minisig 1>/dev/null @7za a $(TARGET).7z $(TARGET) $(TARGET).minisig 1>/dev/null # For convenience run : $(TARGET) @./$(TARGET) mkbuilddir: @mkdir -p build # Link the object files into the target binary $(TARGET) : $(OBJS) @$(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) # Clean up the build directory clean : rm -r build rm -f build/*.o rm -f $(TARGET)* # Create a signed release tar: $(TARGET_TAR) $(TARGET_SIG) $(TARGET_SIG): $(TARGET_TAR) minisign -Sm $< $(TARGET_TAR): $(TARGET) strip $< tar --zstd -cvf $@ $< .PHONY : all clean size mkbuilddir run gdb