From 1532ecc992ddd72cd370ee8bf32e27119303c2eb Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 6 Sep 2026 14:38:35 +0000 Subject: refactor makefile --- Makefile | 92 ++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 31 deletions(-) (limited to 'Makefile') 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) + -- cgit v1.3.1-4-g156e