93 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| #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
 | 
