# 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) # 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 raylib