vibe coding an orbital mechanics simulation to try out claude code
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

# 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