blob: b5253ad3e8df07cee6f2581f0c229579c7107241 (
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
CC = gcc
CXX ?= g++
SRC_DIR := src
INCLUDE_DIR := include
BUILD_DIR := build
DEPS_DIR := third_party
MAGIC_ENUM_DIR := $(DEPS_DIR)/magic_enum
ifeq ($(MAKELEVEL),0)
MAKEFLAGS += -j8
endif
# make # releaseļ¼-O3 + LTO
# make DEBUG=1 # debug: -Og -g3 and no LTO
# make STATIC=1 # static (maybe tricky)
DEBUG ?= 0
LTO ?= 1
STATIC ?= 0
ifeq ($(DEBUG),0)
# release
OPTFLAGS := -O3 -DNDEBUG
else
# debug
LTO := 0
OPTFLAGS := -Og
OPTFLAGS += -g3 -fno-omit-frame-pointer -D_GLIBCXX_ASSERTIONS
endif
ifeq ($(LTO),1)
LTOFLAGS := -flto=auto
endif
TARGET := $(BUILD_DIR)/ccshell
WARNFLAGS := -Wall -Wextra
ALL_CPPFLAGS := -I$(INCLUDE_DIR) -I$(MAGIC_ENUM_DIR)/include -MMD -MP $(CPPFLAGS)
ALL_CXXFLAGS := -std=c++23 $(WARNFLAGS) $(OPTFLAGS) $(LTOFLAGS) $(CXXFLAGS)
ALL_LDFLAGS := $(OPTFLAGS) $(LTOFLAGS)
TARGET_OS ?= $(shell uname -s)
ifeq ($(STATIC),1)
ifeq ($(TARGET_OS),Linux)
LDFLAGS += -static -static-libgcc -static-libstdc++
else ifeq ($(TARGET_OS),Darwin)
# empty
else
# empty
endif
endif
ALL_LDFLAGS += $(LDFLAGS) $(EXTRA_LDFLAGS)
SRCS := $(shell find $(SRC_DIR) -name '*.cc')
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
$(TARGET): $(OBJS)
@mkdir -p $(dir $@)
$(CXX) $(ALL_LDFLAGS) $^ $(LDLIBS) -o $@
$(BUILD_DIR)/%.cc.o: %.cc
@mkdir -p $(dir $@)
$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@
-include $(DEPS)
.PHONY: clean fresh magic-enum
magic-enum:
@mkdir -p $(DEPS_DIR)
@if [ -d "$(MAGIC_ENUM_DIR)/.git" ]; then \
git -C "$(MAGIC_ENUM_DIR)" pull --ff-only; \
else \
git clone --depth 1 https://github.com/Neargye/magic_enum.git "$(MAGIC_ENUM_DIR)" -b master --single-branch; \
fi
clean:
rm -rf $(BUILD_DIR)
fresh:
$(MAKE) clean
$(MAKE)
|