summaryrefslogtreecommitdiff
path: root/Makefile
blob: 158ca72390591fc336359612a9f45453eaa3f1e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# pke-at

PROJ=pke-at

-include config.mk

FLAGS_DEBUG         = -O0 -g -DDEBUG
FLAGS_RELEASE_DEBUG = -O2 -g -DDEBUG
FLAGS_RELEASE       = -O2 -s -DNDEBUG
BUILD_MODE_FLAGS    = $(FLAGS_DEBUG)

define cc-command
	$(CC) -std=c2x -c -o $@ $(BUILD_MODE_FLAGS) $(CFLAGS) $(INCS) $<
endef

define cxx-command
	$(CXX) -std=c++23 -c -o $@ $(BUILD_MODE_FLAGS) $(CXXFLAGS) $(INCS) $<
endef

.PHONY: default
default: options .WAIT bin/pke-at

.PHONY: prepare
prepare: ## Set up the current directory to build
	mkdir -p bin
	mkdir -p obj

.PHONY: options
options: prepare .WAIT
	@echo "$(PROJ)" build options:
	@echo "CFLAGS            = $(CFLAGS)"
	@echo "CXXFLAGS          = $(CXXFLAGS)"
	@echo "BUILD_MODE_FLAGS  = $(BUILD_MODE_FLAGS)"
	@echo "LDFLAGS           = $(LDFLAGS)"
	@echo "CC                = $(CC)"
	@echo "CXX               = $(CXX)"

obj/%.o  : src/%.c   | prepare
	$(cc-command)
obj/%.o  : src/%.cpp | prepare
	$(cxx-command)

bin/pke-at: ## Builds the pke-at executable
bin/pke-at: obj/pke-at.o
	$(CXX) -v -std=c++23 $(BUILD_MODE_FLAGS) $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -o $@

.PHONY: clean
clean:
	rm -rf bin
	rm -rf obj
	rm -rf *.plist

.PHONY: help
help: ## Prints help for targets with comments
	@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'