Bob/Makefile

56 lines
1.9 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Makefile - Bob language interpreter
# Compiler
CC = g++
# Compiler flags
CFLAGS = -Wall -Wextra -std=c++17 -Wno-unused-variable -Wno-unused-parameter -Wno-switch -O3 -march=native
# Source layout:
# src/
# ├── headers/ - All header files (public interface)
# │ ├── runtime/ - Runtime execution headers
# │ ├── parsing/ - Front-end processing headers
# │ ├── stdlib/ - Standard library headers
# │ ├── cli/ - CLI headers
# │ └── common/ - Shared utilities (helperFunctions)
# └── sources/ - All source files (implementation)
# ├── runtime/ - Interpreter, Evaluator, Executor, Environment, Value, TypeWrapper
# ├── parsing/ - Lexer, Parser, ErrorReporter, Expression AST
# ├── stdlib/ - Built-in functions (BobStdLib)
# └── cli/ - Command-line interface (main, bob)
SRC_ROOT = ./src
BUILD_DIR = ./build
# Find all .cpp files under src/sources (recursively)
CPP_FILES := $(shell find $(SRC_ROOT)/sources -type f -name '*.cpp')
# Map every source file to its corresponding object file inside build/
# Strip src/sources/ prefix and add build/ prefix
OBJ_FILES := $(patsubst $(SRC_ROOT)/sources/%.cpp,$(BUILD_DIR)/%.o,$(CPP_FILES))
# Make sure every object directory exists ahead of time
$(shell mkdir -p $(dir $(OBJ_FILES)))
# Default goal
all: build
# Pattern rule compile each .cpp from sources/ into a mirrored .o inside build/
$(BUILD_DIR)/%.o: $(SRC_ROOT)/sources/%.cpp
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -I$(SRC_ROOT)/headers/runtime -I$(SRC_ROOT)/headers/parsing -I$(SRC_ROOT)/headers/stdlib -I$(SRC_ROOT)/headers/cli -I$(SRC_ROOT)/headers/common -c $< -o $@
# Link all objects into the final executable
$(BUILD_DIR)/bob: $(OBJ_FILES)
$(CC) $(CFLAGS) $^ -o $@
# Convenience targets
run:
./$(BUILD_DIR)/bob
build: clean $(BUILD_DIR)/bob
clean:
rm -rf $(BUILD_DIR)/*