Files
Chloride/Makefile
2025-09-12 01:21:08 +01:00

54 lines
1.3 KiB
Makefile

# SPDX-FileCopyrightText: 2025 William Bell
#
# SPDX-License-Identifier: GPL-3.0-or-later
BINARY = bin/argon
FLEX_TOOL = flex
SRC_DIRS = src external/xxhash external/cwalk/src external/libdye/src external/linenoise
CFILES = $(shell find $(SRC_DIRS) -name '*.c' \
! -path "*/tests/*" \
! -path "*/fuzz/*" \
! -path "*/cli/*" \
! -path "*/example*") \
$(LEXER_C)
OBJDIR = build
OBJS = $(CFILES:%.c=$(OBJDIR)/%.o)
CFLAGS = $(ARCHFLAGS) -Wall -Wextra -Wno-unused-function -Werror=unused-result \
-Iexternal/cwalk/include -Iexternal/libdye/include
LDFLAGS = -lgc -lgmp -lm
all: $(BINARY)
# Rule to build lexer
$(LEXER_C) $(LEXER_H): $(LEXER_SRC)
$(FLEX_TOOL) --header-file=$(LEXER_H) -o $(LEXER_C) $(LEXER_SRC)
# Pattern rule for compiling .c -> .o
$(OBJDIR)/%.o: %.c $(LEXER_C) $(LEXER_H)
@mkdir -p $(dir $@)
gcc -O3 -c $< -o $@ $(CFLAGS)
# Link final binary
$(BINARY): $(OBJS)
@mkdir -p bin
gcc -o $@ $^ $(CFLAGS) $(LDFLAGS) -s
native: CFLAGS += -march=native
native: $(BINARY)
debug: CFLAGS += -g
debug: $(BINARY)
full-debug: CFLAGS += -g -fsanitize=address -fno-omit-frame-pointer
full-debug: $(BINARY)
optimised: CFLAGS += -fprofile-generate
optimised: $(BINARY)
${BINARY} rand_test.ar
$(MAKE) CFLAGS="$(CFLAGS:-fprofile-generate=-fprofile-use)" $(BINARY)
clean:
rm -rf build bin
rm -f $(LEXER_C) $(LEXER_H)