Files
ecgsyn.js/CMakeLists.txt
2024-11-13 01:31:51 -06:00

72 lines
1.9 KiB
CMake

cmake_minimum_required(VERSION 3.20)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
project(ecgsyn.js)
option(BUILD_WITH_EMSCRIPTEN "Build with Emscripten" ON)
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
if(BUILD_WITH_EMSCRIPTEN)
set(EMSCRIPTEN_ROOT $ENV{EMSDK})
if(NOT EMSCRIPTEN_ROOT)
set(EMSCRIPTEN_ROOT /usr/lib/emscripten)
endif()
set(EMSCRIPTEN_ROOT
"${EMSCRIPTEN_ROOT}"
CACHE PATH "Emscripten SDK path")
set(CMAKE_TOOLCHAIN_FILE
"${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake"
CACHE FILEPATH "Emscripten toolchain file")
set(BUILD_SHARED_LIBS OFF FORCE)
endif(BUILD_WITH_EMSCRIPTEN)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 20)
set(PFFFT_USE_TYPE_FLOAT
OFF
CACHE BOOL "activate pffft float" FORCE)
include(CheckIPOSupported)
check_ipo_supported(RESULT ipo_supported)
if(ipo_supported)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
endif()
if(BUILD_WITH_EMSCRIPTEN)
include_directories(BEFORE SYSTEM compat)
add_compile_options(-msimd128 -msse -mavx -fwasm-exceptions)
set(ecgsyn_link_options # -flto
-fwasm-exceptions
-sEXPORTED_FUNCTIONS=_rr_gen_new,_rr_gen_new_series,_destroy_obj,_ecgsyn,_realloc,_free
--no-entry
-sSTRICT
-sNO_ASSERTIONS
-sNO_FILESYSTEM
-sMALLOC=emmalloc)
else()
set(TARGET_C_ARCH haswell)
set(TARGET_CXX_ARCH haswell)
set(ecgsyn_defs ECGSYN_HOST_BUILD)
endif()
add_subdirectory(mini-odeint EXCLUDE_FROM_ALL)
add_subdirectory(pffft EXCLUDE_FROM_ALL)
add_executable(ecgsyn ecgsyn.cpp)
target_compile_definitions(ecgsyn PRIVATE PFFFT_ENABLE_DOUBLE ${ecgsyn_defs})
target_link_options(ecgsyn PRIVATE ${ecgsyn_link_options})
target_link_libraries(ecgsyn PRIVATE PFFFT mini-odeint)
if(BUILD_WITH_EMSCRIPTEN)
set_target_properties(ecgsyn PROPERTIES SUFFIX ".wasm")
endif(BUILD_WITH_EMSCRIPTEN)