CXX = clang++ # Detect OS UNAME_S := $(shell uname -s) # Default LLVM_CONFIG LLVM_CONFIG ?= llvm-config # If llvm-config is not in PATH, try to guess location based on OS ifeq ($(shell which $(LLVM_CONFIG) 2>/dev/null),) ifeq ($(UNAME_S),Darwin) # macOS Homebrew path LLVM_CONFIG = /opt/homebrew/opt/llvm/bin/llvm-config endif endif # Verify if llvm-config exists ifeq ($(shell which $(LLVM_CONFIG) 2>/dev/null),) # If still not found, try common versioned names on Linux ifneq ($(UNAME_S),Darwin) LLVM_CONFIG := $(shell which llvm-config-18 2>/dev/null || which llvm-config-17 2>/dev/null || which llvm-config-16 2>/dev/null || which llvm-config-15 2>/dev/null) endif endif # Final check ifeq ($(LLVM_CONFIG),) $(error "llvm-config not found. Please install LLVM or set LLVM_CONFIG manually (e.g., make LLVM_CONFIG=llvm-config-15)") endif CXXFLAGS = -std=c++17 -Wall -Wextra -Wno-unused-parameter $(shell $(LLVM_CONFIG) --cxxflags) LDFLAGS = $(shell $(LLVM_CONFIG) --ldflags --system-libs --libs core) SRC_DIR = src BUILD_DIR = build TARGET = sun SRCS = $(wildcard $(SRC_DIR)/*.cpp) OBJS = $(patsubst $(SRC_DIR)/%.cpp, $(BUILD_DIR)/%.o, $(SRCS)) all: $(TARGET) $(TARGET): $(OBJS) $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp @mkdir -p $(BUILD_DIR) $(CXX) $(CXXFLAGS) -c -o $@ $< clean: rm -rf $(BUILD_DIR) $(TARGET) .PHONY: all clean