Files
HardCompound/Makefile

70 lines
1.6 KiB
Makefile
Raw Normal View History

APPNAME = HardCompound
2025-12-17 12:19:31 +01:00
SRCDIR = src
BUILDDIR = build
VENDORDIR = vendor
target ?= linux
profile ?= debug
2026-01-08 12:33:39 +01:00
valgrind ?= false
2025-12-17 12:19:31 +01:00
ifeq ($(target), windows)
CC = x86_64-w64-mingw32-gcc
EXT = .exe
OPT_FLAGS = -O2 -DNDEBUG
INCLUDES = -I$(SRCDIR) -I$(VENDORDIR)/mariadb/include -I$(VENDORDIR)/duckdb/windows/include
LIBS = -L$(VENDORDIR)/mariadb/lib -llibmariadb -L$(VENDORDIR)/duckdb/windows/lib -lduckdb
# Command to copy DLL after build
POST_BUILD_CMD = @cp $(VENDORDIR)/duckdb/windows/lib/duckdb.dll $(BUILDDIR)
2025-12-17 12:19:31 +01:00
else
CC = gcc
EXT =
INCLUDES = -I$(SRCDIR) `pkg-config --cflags libmariadb` -I$(VENDORDIR)/duckdb/linux/include
LIBS = `pkg-config --libs libmariadb` -L$(VENDORDIR)/duckdb/linux/lib -lduckdb
POST_BUILD_CMD = @echo "Build complete."
# Profile Logic
ifeq ($(profile), release)
OPT_FLAGS = -O3 -DNDEBUG -march=native
else
OPT_FLAGS = -O0 -g -DDEBUG -Wall -Wextra
endif
2025-12-17 12:19:31 +01:00
endif
# Combine Flags
CFLAGS = -Wall $(OPT_FLAGS) $(INCLUDES)
2025-12-17 12:19:31 +01:00
SRC = $(shell find $(SRCDIR) -name "*.c")
OBJ = $(SRC:$(SRCDIR)/%.c=$(BUILDDIR)/%.o)
all: $(BUILDDIR)/$(APPNAME)$(EXT)
$(BUILDDIR)/$(APPNAME)$(EXT): $(OBJ)
@echo "Linking $@ (Target: $(target), Profile: $(profile))"
2025-12-17 12:19:31 +01:00
@mkdir -p $(dir $@)
$(CC) $(OBJ) -o $@ $(LIBS)
$(POST_BUILD_CMD)
2025-12-17 12:19:31 +01:00
$(BUILDDIR)/%.o: $(SRCDIR)/%.c
@echo "Compiling $<"
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(BUILDDIR)
2026-01-08 12:33:39 +01:00
ifeq ($(valgrind), true)
RUN_CMD = valgrind --leak-check=full ./$(BUILDDIR)/$(APPNAME)$(EXT)
else
RUN_CMD = ./$(BUILDDIR)/$(APPNAME)$(EXT)
endif
2025-12-17 12:19:31 +01:00
run: all
2026-01-08 12:33:39 +01:00
$(RUN_CMD) ./data/Circuit.duckdb
2025-12-17 12:19:31 +01:00
.PHONY: all clean run