CMakeLists.txt 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. cmake_minimum_required (VERSION 2.8...3.16)
  4. project(wasm-apps)
  5. message(CHECK_START "Detecting WABT")
  6. if(NOT (DEFINED WABT_DIR OR DEFINED CACHE{WABT_DIR}))
  7. find_path(WABT_DIR
  8. wabt
  9. PATHS /opt
  10. NO_DEFAULT_PATH
  11. NO_CMAKE_FIND_ROOT_PATH
  12. )
  13. if(DEFINED WABT_DIR)
  14. set(WABT_DIR ${WABT_DIR}/wabt)
  15. endif()
  16. endif()
  17. if(WABT_DIR)
  18. message(CHECK_PASS "found")
  19. else()
  20. message(CHECK_FAIL "not found")
  21. endif()
  22. message(CHECK_START "Detecting WASM_OBJDUMP at ${WABT_DIR}")
  23. find_program(WASM_OBJDUMP
  24. wasm-objdump
  25. PATHS "${WABT_DIR}/bin"
  26. NO_DEFAULT_PATH
  27. NO_CMAKE_FIND_ROOT_PATH
  28. )
  29. if(WASM_OBJDUMP)
  30. message(CHECK_PASS "found")
  31. else()
  32. message(CHECK_FAIL "not found")
  33. endif()
  34. message(CHECK_START "Detecting WASM2WAT at ${WABT_DIR}")
  35. find_program(WASM2WAT
  36. wasm2wat
  37. PATHS "${WABT_DIR}/bin"
  38. NO_DEFAULT_PATH
  39. NO_CMAKE_FIND_ROOT_PATH
  40. )
  41. if(WASM2WAT)
  42. message(CHECK_PASS "found")
  43. else()
  44. message(CHECK_FAIL "not found")
  45. endif()
  46. function(COMPILE_WITH_CLANG SOURCE_FILE COMMAND)
  47. get_filename_component(FILE_NAME ${SOURCE_FILE} NAME_WLE)
  48. set(WASM_MODULE ${FILE_NAME}.wasm)
  49. set(MAIN_TARGET_NAME MODULE_${FILE_NAME})
  50. add_executable(${MAIN_TARGET_NAME} ${SOURCE_FILE})
  51. set_target_properties(${MAIN_TARGET_NAME} PROPERTIES OUTPUT_NAME ${WASM_MODULE})
  52. if(${COMMAND})
  53. message(STATUS "Generating ${WASM_MODULE} as COMMAND...")
  54. else()
  55. message(STATUS "Generating ${WASM_MODULE} as REACTOR...")
  56. target_link_options(${MAIN_TARGET_NAME} PRIVATE -mexec-model=reactor)
  57. endif()
  58. if(EXISTS ${WASM2WAT})
  59. message(STATUS "Dumping ${WASM_MODULE}...")
  60. set(WASM_WAT ${FILE_NAME}.wat)
  61. set(DUMP_TARGET_NAME DUMP_${FILE_NAME})
  62. add_custom_command(OUTPUT ${WASM_WAT}
  63. COMMAND ${WASM2WAT} --enable-all -o ${WASM_WAT} ${WASM_MODULE}
  64. COMMENT "Dumping ${WASM_MODULE}..."
  65. DEPENDS ${MAIN_TARGET_NAME}
  66. )
  67. add_custom_target(${DUMP_TARGET_NAME} ALL
  68. DEPENDS ${WASM_WAT}
  69. )
  70. endif()
  71. endfunction()
  72. compile_with_clang(mA.c OFF)
  73. compile_with_clang(mB.c OFF)
  74. compile_with_clang(mC.c ON)
  75. compile_with_clang(mD.cpp ON)
  76. compile_with_clang(mE.cpp OFF)