.SILENT: .DEFAULT_GOAL := all # ====== Configurations and Binaries ====== # CC := clang CXX := clang++ CMAKE := cmake RM := rm -f PRINTF := printf # ====== Flags ====== # CCXX_FLAGS := \ -Wall -Wextra -Werror -pedantic \ -MMD -MP -I$(SRC_DIR) CXX_FLAGS := -std=c++14 \ $(CCXX_FLAGS) -fno-rtti -fno-exceptions LD_FLAGS := -lc -nostdlib++ MI_FLAGS := -G"Unix Makefiles" -DCMAKE_C_COMPILER=$(CC) \ -DMI_BUILD_TESTS=OFF -DMI_BUILD_STATIC=OFF -DMI_BUILD_SHARED=OFF -DMI_BUILD_OBJECT=ON \ -DMI_OVERRIDE=ON -DMI_NO_USE_CXX=ON -DMI_DEBUG=0 # ====== Sources ====== # TOP_DIR := . SRC_DIR := $(TOP_DIR)/src MI_DIR := $(TOP_DIR)/mimalloc MI_INCLUDE_DIR := $(MI_DIR)/include MI_O := $(MI_DIR)/mimalloc.o VOIDC_CXX := $(SRC_DIR)/voidc.cc VOIDC_O := $(VOIDC_CXX:.cc=.o) VOIDC_D := $(VOIDC_CXX:.cc=.d) VOIDC := $(TOP_DIR)/voidc # ====== Rules ====== # .PHONY: all all: $(VOIDC) $(MI_O): $(MI_DIR) $(CMAKE) $(MI_FLAGS) -S $(MI_DIR) -B $(MI_DIR) $(MAKE) -C $(MI_DIR) $(VOIDC_O): CCXX_FLAGS += -I$(MI_INCLUDE_DIR) $(VOIDC): $(VOIDC_O) $(MI_O) $(PRINTF) " CXXLD %s\n" $< $(CXX) $^ -o $@ $(LD_FLAGS) %.o: %.cc $(PRINTF) " CXX %s\n" $< $(CXX) $< -o $@ -c $(CXX_FLAGS) .PHONY: clean clean: $(MAKE) -C $(MI_DIR) clean $(RM) $(VOIDC_O) $(VOIDC_D) $(VOIDC) -include $(VOIDC_D)