# CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(IrcoPy)

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

# Set this to use the modern FindPython module
set(PYBIND11_FINDPYTHON ON)

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(ircopy_core STATIC ${IMPL_SOURCES})
set_target_properties(ircopy_core PROPERTIES POSITION_INDEPENDENT_CODE ON)

pybind11_add_module(ircopy ${BINDING_SOURCES})

target_link_libraries(ircopy PRIVATE ircopy_core)

install(TARGETS ircopy ircopy_core DESTINATION .)

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