MAKEFLAGS += -j$(nproc)
CC := clang
CXX := clang++
COMPFLAGS := -g3 -O3 -Wall -Wextra -MMD -MP -Xclang -load -Xclang LLVMPolly.so
CFLAGS := -std=c2x $(COMPFLAGS)
CXXFLAGS := -std=c++23 $(COMPFLAGS)
LDFLAGS := -fuse-ld=lld
BUILD_DIR := build
CSOURCES := $(shell find . -name '*.c')
CXXSOURCES := $(shell find . -name '*.cpp')
COBJS := $(CSOURCES:%.c=$(BUILD_DIR)/%.o)
CXXOBJS := $(CXXSOURCES:%.cpp=$(BUILD_DIR)/%.o)
DEPS := $(COBJS:.o=.d) $(CXXOBJS:.o=.d)
.PHONY: all clean vg help
all: $(BUILD_DIR)/main
$(BUILD_DIR)/main: $(COBJS) $(CXXOBJS)
@mkdir -p $(@D)
ifeq ($(strip $(CXXOBJS)),)
$(CC) $(LDFLAGS) -o $@ $(COBJS)
else
$(CXX) $(LDFLAGS) -o $@ $(COBJS) $(CXXOBJS)
endif
$(BUILD_DIR)/%.o: %.c
@mkdir -p $(@D)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: %.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) -c $< -o $@
-include $(DEPS)
cl:
rm -rf $(BUILD_DIR)
run: $(BUILD_DIR)/main
$< $(ARGS)
vg: $(BUILD_DIR)/main
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes $< $(ARGS)