sunlang/Makefile

53 lines
1.4 KiB
Makefile

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