Files
KDL_WORK/kdl-wasm/CMakeLists.txt
2026-06-27 08:45:38 -04:00

77 lines
2.9 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(kdl_wasm_wrapper LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(KDL_SOURCE_DIR "" CACHE PATH "Path to the Orocos KDL source tree")
if(KDL_SOURCE_DIR AND NOT EXISTS "${KDL_SOURCE_DIR}")
message(FATAL_ERROR "KDL_SOURCE_DIR does not exist: ${KDL_SOURCE_DIR}")
endif()
set(EIGEN3_INCLUDE_DIR "" CACHE PATH "Path to the Eigen3 include directory")
if(KDL_SOURCE_DIR AND NOT EIGEN3_INCLUDE_DIR)
find_path(EIGEN3_INCLUDE_DIR Eigen/Core PATH_SUFFIXES eigen3)
endif()
if(KDL_SOURCE_DIR AND NOT EIGEN3_INCLUDE_DIR AND EXISTS "/usr/include/eigen3/Eigen/Core")
set(EIGEN3_INCLUDE_DIR "/usr/include/eigen3" CACHE PATH "Path to the Eigen3 include directory" FORCE)
endif()
if(KDL_SOURCE_DIR AND NOT EIGEN3_INCLUDE_DIR)
message(FATAL_ERROR "Eigen3 include directory was not found")
endif()
set(KDL_WASM_SOURCES
bindings/kdl_c_api.cpp
)
if(KDL_SOURCE_DIR)
list(APPEND KDL_WASM_SOURCES
"${KDL_SOURCE_DIR}/src/chain.cpp"
"${KDL_SOURCE_DIR}/src/chainfksolverpos_recursive.cpp"
"${KDL_SOURCE_DIR}/src/chainjnttojacsolver.cpp"
"${KDL_SOURCE_DIR}/src/frames.cpp"
"${KDL_SOURCE_DIR}/src/jacobian.cpp"
"${KDL_SOURCE_DIR}/src/jntarray.cpp"
"${KDL_SOURCE_DIR}/src/joint.cpp"
"${KDL_SOURCE_DIR}/src/rigidbodyinertia.cpp"
"${KDL_SOURCE_DIR}/src/rotationalinertia.cpp"
"${KDL_SOURCE_DIR}/src/segment.cpp"
"${KDL_SOURCE_DIR}/src/utilities/utility.cxx"
)
endif()
if(EMSCRIPTEN)
add_executable(kdl ${KDL_WASM_SOURCES})
target_compile_options(kdl PRIVATE "-fexceptions")
if(KDL_SOURCE_DIR)
target_include_directories(kdl PRIVATE "${KDL_SOURCE_DIR}/src" "${EIGEN3_INCLUDE_DIR}")
target_compile_definitions(kdl PRIVATE KDL_WASM_HAS_OROCOS_KDL=1)
endif()
set_target_properties(kdl PROPERTIES OUTPUT_NAME "kdl" SUFFIX ".js")
target_link_options(kdl PRIVATE
"--no-entry"
"-sMODULARIZE=1"
"-sEXPORT_ES6=1"
"-sEXPORT_NAME=createKdlModule"
"-sENVIRONMENT=web,worker,node"
"-sALLOW_MEMORY_GROWTH=1"
"-fexceptions"
"-sDISABLE_EXCEPTION_CATCHING=0"
"-sEXPORTED_RUNTIME_METHODS=ccall,cwrap,UTF8ToString,stringToUTF8,lengthBytesUTF8,HEAPF64"
"-sEXPORTED_FUNCTIONS=['_malloc','_free','_kdl_init','_kdl_create_robot','_kdl_destroy_robot','_kdl_get_robot_info','_kdl_fk','_kdl_fk_all_links','_kdl_jacobian','_kdl_ik','_kdl_plan_movej','_kdl_plan_movel','_kdl_plan_movec','_kdl_plan_path','_kdl_sample_trap','_kdl_last_error']"
)
add_custom_command(TARGET kdl POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/bindings/kdl.d.ts"
"${CMAKE_CURRENT_BINARY_DIR}/kdl.d.ts"
)
else()
add_library(kdl SHARED ${KDL_WASM_SOURCES})
if(KDL_SOURCE_DIR)
target_include_directories(kdl PRIVATE "${KDL_SOURCE_DIR}/src" "${EIGEN3_INCLUDE_DIR}")
target_compile_definitions(kdl PRIVATE KDL_WASM_HAS_OROCOS_KDL=1)
endif()
endif()