# CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(PhysicsCalculator)

set(CMAKE_CXX_STANDARD 26)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_COMPILER "clang++")

find_package(pybind11 REQUIRED)
include_directories(include)

file(GLOB_RECURSE IMPL_SOURCES "impl/**/*.cpp")
file(GLOB MECHANICS_BINDINGS "bindings/Mechanics/*.cpp")
file(GLOB GRAVITY_BINDINGS "bindings/Gravity/*.cpp")
file(GLOB ENERGY_BINDINGS "bindings/Energy/*.cpp")
file(GLOB ROTATIONAL_DYNAMICS_BINDINGS "bindings/Rotational_Dynamics/*.cpp")
file(GLOB ELECTRICITY_BINDINGS "bindings/Electricity/*.cpp")
file(GLOB WAVE_BINDINGS "bindings/Waves/*.cpp")

set(BINDING_SOURCES 
    "bindings/bind_main_module.cpp"
    ${MECHANICS_BINDINGS} ${GRAVITY_BINDINGS} ${ENERGY_BINDINGS}
    ${ROTATIONAL_DYNAMICS_BINDINGS} ${ELECTRICITY_BINDINGS} ${WAVE_BINDINGS}
)

add_library(physics_lib STATIC ${IMPL_SOURCES})
set_target_properties(physics_lib PROPERTIES POSITION_INDEPENDENT_CODE ON)

pybind11_add_module(physics_calc ${BINDING_SOURCES})
target_link_libraries(physics_calc PRIVATE physics_lib)

install(TARGETS physics_calc DESTINATION .)

add_executable(app src/main.cpp)
target_link_libraries(app PRIVATE physics_lib)