# Standalone CMake project for building WASM simulator modules.
# Invoked on-demand by the superbuild's wasi-module target so that
# the WASI SDK is only fetched when WASM targets are actually built.
#
# Usage from superbuild:
#   cmake -S . -B build -DPCB=X10 -DPCBREV=TX16S
#   cmake --build build --target wasi-module

cmake_minimum_required(VERSION 3.21)
project(EdgeTX-WASM NONE)  # NONE = no compiler check (we set a toolchain below)

# Inherit the module path from the main project
list(APPEND CMAKE_MODULE_PATH "${EDGETX_SOURCE_DIR}/cmake")

# Collect command-line args to forward, excluding EDGETX_* (consumed here)
include(Macros)
CollectCommandLineArgs(_forwarded_args EXCLUDE "^EDGETX_")

# Fetch / find WASI SDK
include(FetchWasiSDK)
find_package(WasiSDK REQUIRED)

include(ExternalProject)

ExternalProject_Add(wasm
  SOURCE_DIR ${EDGETX_SOURCE_DIR}
  BINARY_DIR ${CMAKE_BINARY_DIR}/wasm-build
  CMAKE_ARGS
    ${_forwarded_args}
    -Wno-dev
    -DCMAKE_BUILD_TYPE=${EDGETX_BUILD_TYPE}
    -DWASI_SDK_PREFIX=${WASI_SDK_PATH}
    -DCMAKE_TOOLCHAIN_FILE=${EDGETX_SOURCE_DIR}/cmake/toolchain/wasi-threads.cmake
  CMAKE_CACHE_ARGS
    -DEdgeTX_SUPERBUILD:BOOL=0
    -DNATIVE_BUILD:BOOL=1
    -DDISABLE_COMPANION:BOOL=1
  BUILD_ALWAYS TRUE
  BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target wasi-module
  INSTALL_COMMAND ""
)

# Copy .wasm files up after build
ExternalProject_Add_Step(wasm copy-wasm
  DEPENDEES build
  COMMAND ${CMAKE_COMMAND}
    -DSRC_DIR=${CMAKE_BINARY_DIR}/wasm-build -DDST_DIR=${CMAKE_BINARY_DIR}
    -P ${EDGETX_SOURCE_DIR}/cmake/CopyWasmModules.cmake
)
