You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.2 KiB
104 lines
3.2 KiB
# Compiler and flags |
|
CXX = g++ |
|
CXXFLAGS = -Wall -Wextra -g -ggdb3 -std=c++14 -I./src -isystem./ext/raylib/src -I./ext/tomlc17/src |
|
LDFLAGS = -L./ext/raylib/src -lraylib -lm -lpthread -ldl -lrt -lX11 |
|
|
|
# Directories |
|
SRC_DIR = src |
|
BUILD_DIR = build |
|
RAYLIB_DIR = ext/raylib/src |
|
TARGET = orbit_sim |
|
TEST_DIR = tests |
|
TEST_TARGET = orbit_test |
|
|
|
# Source files |
|
CPP_SOURCES = $(SRC_DIR)/main.cpp \ |
|
$(SRC_DIR)/physics.cpp \ |
|
$(SRC_DIR)/bodies.cpp \ |
|
$(SRC_DIR)/config_loader.cpp \ |
|
$(SRC_DIR)/renderer.cpp |
|
|
|
C_SOURCES = $(SRC_DIR)/../ext/tomlc17/src/tomlc17.c |
|
|
|
SOURCES = $(CPP_SOURCES) $(C_SOURCES) |
|
|
|
# Object files |
|
CPP_OBJECTS = $(CPP_SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o) |
|
C_OBJECTS = $(C_SOURCES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) |
|
OBJECTS = $(CPP_OBJECTS) $(C_OBJECTS) |
|
|
|
# Default target |
|
all: raylib $(BUILD_DIR) $(TARGET) |
|
|
|
# Build raylib |
|
raylib: |
|
@if [ ! -f $(RAYLIB_DIR)/libraylib.a ]; then \ |
|
echo "Building raylib..."; \ |
|
cd $(RAYLIB_DIR) && $(MAKE) PLATFORM=PLATFORM_DESKTOP; \ |
|
fi |
|
|
|
# Create build directory |
|
$(BUILD_DIR): |
|
mkdir -p $(BUILD_DIR) |
|
|
|
# Link the executable |
|
$(TARGET): $(OBJECTS) raylib |
|
$(CXX) $(OBJECTS) -o $(TARGET) $(LDFLAGS) |
|
|
|
# Compile C++ source files |
|
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp |
|
$(CXX) $(CXXFLAGS) -c $< -o $@ |
|
|
|
# Compile C source files |
|
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c |
|
$(CC) -Wall -Wextra -g -ggdb3 -std=c99 -I./src -I./ext/tomlc17/src -c $< -o $@ |
|
|
|
# Clean build files |
|
clean: |
|
rm -rf $(BUILD_DIR) $(TARGET) |
|
|
|
# Clean everything including raylib |
|
clean-all: clean |
|
cd $(RAYLIB_DIR) && $(MAKE) clean |
|
|
|
# Rebuild |
|
rebuild: clean all |
|
|
|
# Run the simulation |
|
run: $(TARGET) |
|
./$(TARGET) |
|
|
|
# Run manual integration test with simulation |
|
test-manual: $(TARGET) |
|
./$(TARGET) configs/test_simple.toml --headless --readable --days 365 |
|
|
|
# Build automated test suite |
|
test-build: |
|
$(CXX) $(CXXFLAGS) -I/usr/include/catch2 \ |
|
-c $(TEST_DIR)/test_main.cpp -o build/test_main.o |
|
$(CXX) $(CXXFLAGS) -I/usr/include/catch2 \ |
|
-c $(TEST_DIR)/test_integration.cpp -o build/test_integration.o |
|
$(CXX) $(CXXFLAGS) -I/usr/include/catch2 \ |
|
-c $(TEST_DIR)/test_energy.cpp -o build/test_energy.o |
|
$(CXX) $(CXXFLAGS) -I/usr/include/catch2 \ |
|
-c $(TEST_DIR)/test_orbital_period.cpp -o build/test_orbital_period.o |
|
$(CXX) $(CXXFLAGS) -I/usr/include/catch2 \ |
|
-c $(TEST_DIR)/test_comet_orbit.cpp -o build/test_comet_orbit.o |
|
$(CXX) $(CXXFLAGS) \ |
|
-c $(SRC_DIR)/test_utilities.cpp -o build/test_utilities.o |
|
$(CXX) $(CXXFLAGS) \ |
|
-c $(SRC_DIR)/physics.cpp -o build/test_physics.o |
|
$(CXX) $(CXXFLAGS) \ |
|
-c $(SRC_DIR)/bodies.cpp -o build/test_bodies.o |
|
$(CXX) $(CXXFLAGS) \ |
|
-c $(SRC_DIR)/config_loader.cpp -o build/test_config_loader.o |
|
$(CC) -Wall -Wextra -g -ggdb3 -std=c99 -I./src -I./ext/tomlc17/src \ |
|
-c $(SRC_DIR)/../ext/tomlc17/src/tomlc17.c -o build/test_tomlc17.o |
|
$(CXX) build/test_main.o build/test_integration.o build/test_energy.o build/test_orbital_period.o build/test_comet_orbit.o build/test_utilities.o build/test_physics.o build/test_bodies.o build/test_config_loader.o build/test_tomlc17.o \ |
|
-o $(TEST_TARGET) -lCatch2Main -lCatch2 -lm |
|
|
|
# Run automated test suite |
|
test: test-build |
|
./$(TEST_TARGET) |
|
|
|
.PHONY: all clean clean-all rebuild run test test-build test-manual raylib
|
|
|