CMakeLists.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # Copyright (C) 2024 Xiaomi Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. cmake_minimum_required(VERSION 3.14)
  4. project(wasm-apps)
  5. set(WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../..)
  6. set(WAMRC_ROOT_DIR ${WAMR_ROOT_DIR}/wamr-compiler/build)
  7. set(CMAKE_SYSTEM_PROCESSOR wasm32)
  8. set(CMAKE_SYSROOT ${WAMR_ROOT_DIR}/wamr-sdk/app/libc-builtin-sysroot)
  9. if (NOT DEFINED WASI_SDK_DIR)
  10. set(WASI_SDK_DIR "/opt/wasi-sdk")
  11. endif ()
  12. set(CMAKE_C_FLAGS "-nostdlib -pthread -Qunused-arguments")
  13. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -z stack-size=8192 -nostdlib -O0")
  14. set(CMAKE_C_COMPILER_TARGET "wasm32")
  15. set(CMAKE_C_COMPILER "${WASI_SDK_DIR}/bin/clang")
  16. set(DEFINED_SYMBOLS
  17. "${WAMR_ROOT_DIR}/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt")
  18. set(CMAKE_EXE_LINKER_FLAGS
  19. "-Wl,--no-entry \
  20. -Wl,--initial-memory=65536 \
  21. -Wl,--export-all \
  22. -Wl,--allow-undefined"
  23. )
  24. if (WAMR_BUILD_TARGET STREQUAL "X86_32")
  25. set (WAMR_COMPILER_FLAGS --opt-level=3 --bounds-checks=1 --enable-shared-heap --target=i386)
  26. set (WAMR_COMPILER_CHAIN_FLAGS --opt-level=3 --bounds-checks=1 --enable-shared-chain --target=i386)
  27. else ()
  28. set (WAMR_COMPILER_FLAGS --opt-level=3 --bounds-checks=1 --enable-shared-heap)
  29. set (WAMR_COMPILER_CHAIN_FLAGS --opt-level=3 --bounds-checks=1 --enable-shared-chain)
  30. endif ()
  31. function(copy_wasm TARGET_NAME)
  32. add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
  33. COMMAND ${CMAKE_COMMAND} -E copy
  34. ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
  35. ${CMAKE_CURRENT_BINARY_DIR}/../
  36. COMMENT "Copy ${TARGET_NAME} to the same directory of google test"
  37. )
  38. endfunction()
  39. function(compile_and_copy_aot_from TARGET_NAME)
  40. string(REPLACE ".wasm" ".aot" AOT_TARGET ${TARGET_NAME})
  41. string(REPLACE ".wasm" "_chain.aot" AOT_CHAIN_TARGET ${TARGET_NAME})
  42. add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
  43. COMMAND ${WAMRC_ROOT_DIR}/wamrc ${WAMR_COMPILER_FLAGS}
  44. -o ${AOT_TARGET}
  45. ${TARGET_NAME}
  46. COMMAND ${CMAKE_COMMAND} -E copy
  47. ${CMAKE_CURRENT_BINARY_DIR}/${AOT_TARGET}
  48. ${CMAKE_CURRENT_BINARY_DIR}/../
  49. COMMAND ${WAMRC_ROOT_DIR}/wamrc ${WAMR_COMPILER_CHAIN_FLAGS}
  50. -o ${AOT_CHAIN_TARGET}
  51. ${TARGET_NAME}
  52. COMMAND ${CMAKE_COMMAND} -E copy
  53. ${CMAKE_CURRENT_BINARY_DIR}/${AOT_CHAIN_TARGET}
  54. ${CMAKE_CURRENT_BINARY_DIR}/../
  55. COMMENT "Compile and copy ${AOT_TARGET} to the same directory of google test"
  56. )
  57. endfunction()
  58. add_executable(test.wasm test.c)
  59. target_link_libraries(test.wasm)
  60. copy_wasm(test.wasm)
  61. compile_and_copy_aot_from(test.wasm)
  62. add_executable(test_addr_conv.wasm test_addr_conv.c)
  63. target_link_libraries(test_addr_conv.wasm)
  64. copy_wasm(test_addr_conv.wasm)
  65. compile_and_copy_aot_from(test_addr_conv.wasm)
  66. # copy and compile aot for bulk memory test
  67. set(SOURCE_WASM ${CMAKE_CURRENT_SOURCE_DIR}/bulk-memory/test_bulk_memory.wasm)
  68. set(BUILD_WASM ${CMAKE_CURRENT_BINARY_DIR}/../test_bulk_memory.wasm)
  69. set(OUTPUT_AOT ${CMAKE_CURRENT_BINARY_DIR}/../test_bulk_memory.aot)
  70. set(OUTPUT_CHAIN_AOT ${CMAKE_CURRENT_BINARY_DIR}/../test_bulk_memory_chain.aot)
  71. add_custom_command(
  72. OUTPUT ${BUILD_WASM}
  73. COMMAND ${CMAKE_COMMAND} -E copy
  74. ${SOURCE_WASM}
  75. ${BUILD_WASM}
  76. DEPENDS ${SOURCE_WASM}
  77. COMMENT "Copying bulk memory WASM to build directory"
  78. )
  79. add_custom_command(
  80. OUTPUT ${OUTPUT_AOT}
  81. COMMAND ${WAMRC_ROOT_DIR}/wamrc ${WAMR_COMPILER_FLAGS}
  82. -o ${OUTPUT_AOT}
  83. ${BUILD_WASM}
  84. COMMAND ${WAMRC_ROOT_DIR}/wamrc ${WAMR_COMPILER_CHAIN_FLAGS}
  85. -o ${OUTPUT_CHAIN_AOT}
  86. ${BUILD_WASM}
  87. DEPENDS ${BUILD_WASM}
  88. COMMENT "Compiling bulk memory AOT from copied WASM"
  89. )
  90. add_custom_target(compile_bulk_memory_aot ALL
  91. DEPENDS ${OUTPUT_AOT}
  92. )