cmake_minimum_required(VERSION 3.22)
project(lenbling_iris_wasm LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(TFLITE_ENABLE_XNNPACK OFF CACHE BOOL "" FORCE)
set(TFLITE_ENABLE_RUY OFF CACHE BOOL "" FORCE)
set(TFLITE_ENABLE_GPU OFF CACHE BOOL "" FORCE)
set(TFLITE_ENABLE_NNAPI OFF CACHE BOOL "" FORCE)
set(TFLITE_ENABLE_EXTERNAL_DELEGATE OFF CACHE BOOL "" FORCE)
set(TFLITE_ENABLE_RESOURCE ON CACHE BOOL "" FORCE)
add_compile_definitions(FLATBUFFERS_LOCALE_INDEPENDENT=0)
add_subdirectory(/src/tensorflow-2.18.0/tensorflow/lite tflite)
# The pinned cpuinfo CMake omits its own Emscripten implementation from sources
# under its unsupported-platform branch. Link that unmodified upstream file.
if(EMSCRIPTEN AND TARGET cpuinfo)
 target_sources(cpuinfo PRIVATE /build/cpuinfo/src/emscripten/init.c)
endif()
function(single_thread_link directory)
 get_property(targets DIRECTORY "${directory}" PROPERTY BUILDSYSTEM_TARGETS)
 foreach(target ${targets})
  foreach(prop LINK_LIBRARIES INTERFACE_LINK_LIBRARIES LINK_OPTIONS INTERFACE_LINK_OPTIONS)
   get_target_property(values ${target} ${prop})
   if(values)
    list(FILTER values EXCLUDE REGEX "pthread")
    set_property(TARGET ${target} PROPERTY ${prop} "${values}")
   endif()
  endforeach()
 endforeach()
 get_property(children DIRECTORY "${directory}" PROPERTY SUBDIRECTORIES)
 foreach(child ${children})
  single_thread_link("${child}")
 endforeach()
endfunction()
single_thread_link("${CMAKE_CURRENT_SOURCE_DIR}")
add_executable(iris_runtime iris_runtime.cc /src/tensorflow-2.18.0/tensorflow/lite/core/c/c_api.cc /src/tensorflow-2.18.0/tensorflow/lite/core/c/c_api_experimental.cc)
target_include_directories(iris_runtime PRIVATE /src/tensorflow-2.18.0)
target_link_libraries(iris_runtime PRIVATE tensorflow-lite)
target_compile_options(iris_runtime PRIVATE -O3)
target_link_options(iris_runtime PRIVATE -O3 --no-entry
 "-sEXPORTED_FUNCTIONS=['_malloc','_free','_iris_open','_iris_run','_iris_output','_iris_output_size','_iris_close']"
 "-sEXPORTED_RUNTIME_METHODS=['HEAPU8','HEAPF32']"
 "-sMODULARIZE=1" "-sEXPORT_ES6=1" "-sEXPORT_NAME=LenblingIrisModule"
 "-sALLOW_MEMORY_GROWTH=1" "-sINITIAL_MEMORY=67108864"
 "-sSTACK_SIZE=5242880" "-sSTACK_OVERFLOW_CHECK=2"
 "-sENVIRONMENT=web,worker,node" "-sFILESYSTEM=0" "-sASSERTIONS=0")
set_target_properties(iris_runtime PROPERTIES SUFFIX ".mjs")
