69 lines
2.8 KiB
CMake
69 lines
2.8 KiB
CMake
cmake_minimum_required(VERSION 3.18)
|
|||
|
|
project(edge_engine CXX)
|
||
|
|
|
||
|
|
set(CMAKE_CXX_STANDARD 17)
|
||
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
|
|
|
||
|
|
# ── Release build optimisations ──────────────────────────────
|
||
|
|
if(NOT CMAKE_BUILD_TYPE)
|
||
|
|
set(CMAKE_BUILD_TYPE Release)
|
||
|
|
endif()
|
||
|
|
|
||
|
|
if(MSVC)
|
||
|
|
add_compile_options(/O2 /Ob2 /Oi /GL /arch:AVX2 /fp:fast /W3)
|
||
|
|
add_link_options(/LTCG)
|
||
|
|
else()
|
||
|
|
add_compile_options(-O3 -march=native -ffast-math -funroll-loops -Wall)
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# ── pybind11 ─────────────────────────────────────────────────
|
||
|
|
find_package(Python COMPONENTS Interpreter Development REQUIRED)
|
||
|
|
find_package(pybind11 CONFIG)
|
||
|
|
|
||
|
|
if(NOT pybind11_FOUND)
|
||
|
|
include(FetchContent)
|
||
|
|
FetchContent_Declare(
|
||
|
|
pybind11
|
||
|
|
GIT_REPOSITORY https://github.com/pybind/pybind11.git
|
||
|
|
GIT_TAG v2.13.1
|
||
|
|
)
|
||
|
|
FetchContent_MakeAvailable(pybind11)
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# ── Shared include path ────────────────────────────────────────
|
||
|
|
set(ENGINE_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/core/include)
|
||
|
|
|
||
|
|
# ── General-Purpose MT5 Strategy Tester API ──────────────────
|
||
|
|
pybind11_add_module(edge_tester
|
||
|
|
core/src/tester_bindings.cpp
|
||
|
|
)
|
||
|
|
|
||
|
|
target_include_directories(edge_tester PRIVATE ${ENGINE_INCLUDES})
|
||
|
|
|
||
|
|
# ── Optional: Parallel STL via TBB ───────────────────────────
|
||
|
|
find_package(TBB QUIET)
|
||
|
|
if(TBB_FOUND)
|
||
|
|
target_link_libraries(edge_tester PRIVATE TBB::tbb)
|
||
|
|
target_compile_definitions(edge_tester PRIVATE EDGE_USE_TBB=1)
|
||
|
|
message(STATUS "TBB found — parallel STL enabled")
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# ── Threading ─────────────────────────────────────────────────
|
||
|
|
find_package(Threads REQUIRED)
|
||
|
|
target_link_libraries(edge_tester PRIVATE Threads::Threads)
|
||
|
|
|
||
|
|
# ── Visibility ────────────────────────────────────────────────
|
||
|
|
set_target_properties(edge_tester PROPERTIES
|
||
|
|
CXX_VISIBILITY_PRESET hidden
|
||
|
|
VISIBILITY_INLINES_HIDDEN ON
|
||
|
|
)
|
||
|
|
|
||
|
|
# ── Install ───────────────────────────────────────────────────
|
||
|
|
install(TARGETS edge_tester DESTINATION edge_engine)
|
||
|
|
install(TARGETS edge_tester DESTINATION .)
|
||
|
|
|
||
|
|
message(STATUS "EdgeEngine build type: ${CMAKE_BUILD_TYPE}")
|
||
|
|
message(STATUS "Python: ${Python_EXECUTABLE}")
|
||
|
|
message(STATUS "Module: edge_tester (general-purpose MT5 Strategy Tester replica)")
|
||
|
|
|