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)