# Copyright (C) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

cmake_minimum_required (VERSION 3.14)

project (debut_tools_wasm)

set (CMAKE_BUILD_TYPE Debug)  # Otherwise no debug symbols (addr2line)

list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../cmake)
find_package (WAMRC REQUIRED)

option(SOURCE_MAP_DEMO "Enable source map demo" OFF)
if (SOURCE_MAP_DEMO)
  find_package(EMSCRIPTEN 3.1.50 REQUIRED)
endif ()

################ wasm and aot compilation ################
function (compile_sample SOURCE_FILE)
  get_filename_component (FILE_NAME ${SOURCE_FILE} NAME_WLE)

  ## wasm
  set (WASM_FILE ${FILE_NAME}.wasm)
  add_executable (${FILE_NAME} ${SOURCE_FILE})
  set_target_properties (${FILE_NAME} PROPERTIES SUFFIX .wasm)

  ## aot
  set (AOT_FILE ${FILE_NAME}.aot)
  add_custom_target (
    ${FILE_NAME}_aot
    ALL
    DEPENDS ${WAMRC_BIN} ${WASM_FILE}
    # Use --enable-dump-call-stack to generate stack trace (addr2line)
    COMMAND ${WAMRC_BIN} --size-level=0 --enable-dump-call-stack -o ${AOT_FILE} ${WASM_FILE}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  )

  ## wasm + sourcemap
  if (DEFINED EMSCRIPTEN)
    add_custom_target(
      ${FILE_NAME}_w_sourcemap
      ALL
      DEPENDS ${SOURCE_FILE}
      COMMAND ${EMCC} -O0 -gsource-map -o ${FILE_NAME}.sourcemap.wasm ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE}
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    )
  endif ()

  ## install both
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${WASM_FILE} DESTINATION wasm-apps)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${AOT_FILE}  DESTINATION wasm-apps)
  if (DEFINED EMSCRIPTEN)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.sourcemap.wasm DESTINATION wasm-apps)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.sourcemap.wasm.map DESTINATION wasm-apps)
  endif ()
endfunction ()

compile_sample(trap.c)
