cmake_minimum_required(VERSION 3.12)
project(main)
include(CTest)
set(CMAKE_CXX_STANDARD 17)
find_package(VTK COMPONENTS CommonCore)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE ${VTK_LIBRARIES})
target_link_options(main PRIVATE "-sALLOW_MEMORY_GROWTH=1" "-Wno-pthreads-mem-growth" "-fwasm-exceptions" "-sEXCEPTION_STACK_TRACES=1")

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  target_compile_options(main PRIVATE "-sMEMORY64" "-Wno-experimental")
  target_link_options(main PRIVATE "-sMEMORY64" "-Wno-experimental" "-sMAXIMUM_MEMORY=16GB")
endif()
if(ENABLE_THREADS)
  target_compile_options(main PRIVATE "-pthread")
  target_link_options(main PRIVATE "-pthread")
endif()

vtk_module_autoinit(TARGETS main MODULES ${VTK_LIBRARIES})

find_program(NodeJS_INTERPRETER NAMES node nodejs HINTS "$ENV{NODE_DIR}/bin")

set(WASM_BITS "32")
set(TEST_NAME "basic-wasm32-test")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  set(WASM_BITS "64")
  set(TEST_NAME "basic-wasm64-test")
endif()
add_test(NAME ${TEST_NAME} COMMAND "${NodeJS_INTERPRETER}" "$<TARGET_FILE:main>" "${WASM_BITS}" "0")

if(ENABLE_THREADS)
  cmake_host_system_information(RESULT num_threads QUERY NUMBER_OF_LOGICAL_CORES)
  set(THREADS_TEST_NAME "basic-wasm${WASM_BITS}-threads")
  add_test(NAME ${THREADS_TEST_NAME} COMMAND "${NodeJS_INTERPRETER}" "$<TARGET_FILE:main>" "${WASM_BITS}" "${num_threads}")
endif()
