aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-09-06 14:38:35 +0000
committer_ov4 <ov4@ov4.org>2026-09-06 14:38:35 +0000
commit1532ecc992ddd72cd370ee8bf32e27119303c2eb (patch)
treee758b92aabe631e786e684cbca0bdc4a1795b588 /Makefile
parent99e5b08cc22310af93f765429976124edc3ff7bd (diff)
refactor makefile
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile92
1 files changed, 61 insertions, 31 deletions
diff --git a/Makefile b/Makefile
index a58f7fb..81edbdd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,54 +1,76 @@
CC = gcc
-CXX = g++
-SRC_DIR = src
-INCLUDE_DIR = include
-BUILD = build
-TARGET = $(BUILD)/ccshell
+CXX ?= g++
-DEPS_DIR = third_party
-MAGIC_ENUM_DIR = $(DEPS_DIR)/magic_enum
+SRC_DIR := src
+INCLUDE_DIR := include
+BUILD_ROOT := build
+
+DEPS_DIR := third_party
+MAGIC_ENUM_DIR := $(DEPS_DIR)/magic_enum
MAKEFLAGS += -j8
-CPPFLAGS = -I$(INCLUDE_DIR) -MMD -MP -flto
-CXXFLAGS = -std=c++23 -Wall -Wextra -O3 -flto
-CPPFLAGS += -I$(MAGIC_ENUM_DIR)/include
+# 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
+ CONFIG := release
+ OPTFLAGS := -O3 -DNDEBUG
+else
+ # debug
+ LTO := 0
+ CONFIG := debug
+ OPTFLAGS := -Og
+ OPTFLAGS += -g3 -fno-omit-frame-pointer -D_GLIBCXX_ASSERTIONS
+endif
+
+ifeq ($(LTO),1)
+ LTOFLAGS := -flto=auto
+endif
+
+BUILD := $(BUILD_ROOT)/$(CONFIG)
+TARGET := $(BUILD)/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 ($(TARGET_OS),Linux)
- LDFLAGS += -static -static-libgcc -static-libstdc++
-else ifeq ($(TARGET_OS),Darwin)
- # empty
-else
- # empty
+ifeq ($(STATIC),1)
+ ifeq ($(TARGET_OS),Linux)
+ LDFLAGS += -static -static-libgcc -static-libstdc++
+ else ifeq ($(TARGET_OS),Darwin)
+ # empty
+ else
+ # empty
+ endif
endif
-SRCS = $(shell find $(SRC_DIR) -name '*.cc')
-OBJS = $(SRCS:%=$(BUILD)/%.o)
-DEPS = $(OBJS:.o=.d)
+ALL_LDFLAGS += $(LDFLAGS) $(EXTRA_LDFLAGS)
+
+SRCS := $(shell find $(SRC_DIR) -name '*.cc')
+OBJS := $(SRCS:%=$(BUILD)/%.o)
+DEPS := $(OBJS:.o=.d)
$(TARGET): $(OBJS)
@mkdir -p $(dir $@)
- $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
+ $(CXX) $(ALL_LDFLAGS) $^ $(LDLIBS) -o $@
$(BUILD)/%.cc.o: %.cc
@mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
+ $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@
-include $(DEPS)
-clean:
- rm -rf $(BUILD)
-
-fresh:
- rm -rf $(BUILD)
- make
-
-.PHONY: clean
-
-.PHONY: magic-enum
+.PHONY: clean fresh magic-enum
magic-enum:
@mkdir -p $(DEPS_DIR)
@@ -57,3 +79,11 @@ magic-enum:
else \
git clone --depth 1 https://github.com/Neargye/magic_enum.git "$(MAGIC_ENUM_DIR)" -b master --single-branch; \
fi
+
+clean:
+ rm -rf $(BUILD_ROOT)
+
+fresh:
+ $(MAKE) clean
+ $(MAKE)
+