|
| 1 | +# Copyright (C) 2019 Intel Corporation. All rights reserved. |
| 2 | +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 3 | + |
| 4 | +cmake_minimum_required(VERSION 3.14) |
| 5 | +project(how-to-deal-with-import) |
| 6 | + |
| 7 | +include(CMakePrintHelpers) |
| 8 | +include(CTest) |
| 9 | +include(ExternalProject) |
| 10 | +include(FetchContent) |
| 11 | + |
| 12 | +# |
| 13 | +# dependencies |
| 14 | +# |
| 15 | +set(WAMR_ROOT ${CMAKE_CURRENT_LIST_DIR}/../../) |
| 16 | +# wasm required headers |
| 17 | +execute_process( |
| 18 | + COMMAND ${CMAKE_COMMAND} -E copy_if_different |
| 19 | + ${WARM_ROOT}/${WAMR_ROOT}/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h |
| 20 | + ${CMAKE_CURRENT_LIST_DIR}/wasm/inc |
| 21 | +) |
| 22 | + |
| 23 | +# vmlib |
| 24 | +################ runtime settings ################ |
| 25 | +string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM) |
| 26 | +if (APPLE) |
| 27 | + add_definitions(-DBH_PLATFORM_DARWIN) |
| 28 | +endif () |
| 29 | + |
| 30 | +# Resetdefault linker flags |
| 31 | +set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") |
| 32 | +set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") |
| 33 | + |
| 34 | +# WAMR features switch |
| 35 | + |
| 36 | +# Set WAMR_BUILD_TARGET, currently values supported: |
| 37 | +# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", |
| 38 | +# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]" |
| 39 | +if (NOT DEFINED WAMR_BUILD_TARGET) |
| 40 | + if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)") |
| 41 | + set (WAMR_BUILD_TARGET "AARCH64") |
| 42 | + elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64") |
| 43 | + set (WAMR_BUILD_TARGET "RISCV64") |
| 44 | + elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) |
| 45 | + # Build as X86_64 by default in 64-bit platform |
| 46 | + set (WAMR_BUILD_TARGET "X86_64") |
| 47 | + elseif (CMAKE_SIZEOF_VOID_P EQUAL 4) |
| 48 | + # Build as X86_32 by default in 32-bit platform |
| 49 | + set (WAMR_BUILD_TARGET "X86_32") |
| 50 | + else () |
| 51 | + message(SEND_ERROR "Unsupported build target platform!") |
| 52 | + endif () |
| 53 | +endif () |
| 54 | + |
| 55 | +if (NOT CMAKE_BUILD_TYPE) |
| 56 | + set (CMAKE_BUILD_TYPE Release) |
| 57 | +endif () |
| 58 | + |
| 59 | +set(WAMR_BUILD_AOT 1) |
| 60 | +set(WAMR_BUILD_INTERP 0) |
| 61 | +set(WAMR_BUILD_JIT 0) |
| 62 | + |
| 63 | +set(WAMR_BUILD_FAST_INTERP 1) |
| 64 | +set(WAMR_BUILD_LIB_PTHREAD 1) |
| 65 | +set(WAMR_BUILD_LIBC_BUILTIN 1) |
| 66 | +set(WAMR_BUILD_LIBC_WASI 1) |
| 67 | +set(WAMR_BUILD_SIMD 0) |
| 68 | + |
| 69 | +# compiling and linking flags |
| 70 | +if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang")) |
| 71 | + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") |
| 72 | +endif () |
| 73 | +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat -Wformat-security") |
| 74 | + |
| 75 | +# build out vmlib |
| 76 | +set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) |
| 77 | +include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) |
| 78 | + |
| 79 | +add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE}) |
| 80 | +target_link_libraries(vmlib INTERFACE dl m pthread) |
| 81 | +if(WAMR_BUILD_AOT EQUAL 1) |
| 82 | + target_compile_definitions(vmlib INTERFACE -DWASM_ENABLE_AOT=1) |
| 83 | +else() |
| 84 | + target_compile_definitions(vmlib INTERFACE -DWASM_ENABLE_AOT=0) |
| 85 | +endif() |
| 86 | + |
| 87 | +if(WAMR_BUILD_INTERP EQUAL 1) |
| 88 | + target_compile_definitions(vmlib INTERFACE -DWASM_ENABLE_INTERP=1) |
| 89 | +else() |
| 90 | + target_compile_definitions(vmlib INTERFACE -DWASM_ENABLE_INTERP=0) |
| 91 | +endif() |
| 92 | + |
| 93 | +if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 94 | + # ASAN + UBSAN |
| 95 | + target_compile_options(vmlib INTERFACE -fsanitize=address,undefined) |
| 96 | + target_link_options(vmlib INTERFACE -fsanitize=address,undefined) |
| 97 | +endif() |
| 98 | + |
| 99 | +# # MSAN |
| 100 | +# target_compile_options(vmlib INTERFACE -fsanitize=memory -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer) |
| 101 | +# target_link_options(vmlib INTERFACE -fsanitize=memory) |
| 102 | + |
| 103 | +# wamrc |
| 104 | +if(WAMR_BUILD_AOT EQUAL 1 AND WAMR_BUILD_INTERP EQUAL 0) |
| 105 | + ExternalProject_Add(wamrc |
| 106 | + PREFIX wamrc-build |
| 107 | + SOURCE_DIR ${WAMR_ROOT}/wamr-compiler |
| 108 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -S ${WAMR_ROOT}/wamr-compiler -B build |
| 109 | + BUILD_COMMAND ${CMAKE_COMMAND} --build build --target wamrc |
| 110 | + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different build/wamrc ${CMAKE_CURRENT_BINARY_DIR}/wamrc |
| 111 | + ) |
| 112 | +endif() |
| 113 | + |
| 114 | +# |
| 115 | +# host |
| 116 | +add_subdirectory(host) |
| 117 | +add_custom_target( |
| 118 | + install_host ALL |
| 119 | + COMMAND ${CMAKE_COMMAND} -E copy_if_different ./host/example1 . |
| 120 | + DEPENDS example1 |
| 121 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
| 122 | +) |
| 123 | + |
| 124 | +# TODO: replace it with a find_package() |
| 125 | +set(WASI_SDK_DIR /opt/wasi-sdk-19.0/) |
| 126 | +set(WASI_TOOLCHAIN_FILE ${WASI_SDK_DIR}/share/cmake/wasi-sdk.cmake) |
| 127 | +set(WASI_SYS_ROOT ${WASI_SDK_DIR}/share/wasi-sysroot) |
| 128 | + |
| 129 | +# |
| 130 | +# wasm |
| 131 | +if(WAMR_BUILD_AOT EQUAL 1 AND WAMR_BUILD_INTERP EQUAL 0) |
| 132 | + ExternalProject_Add(wasm |
| 133 | + PREFIX wasm-build |
| 134 | + DEPENDS wamrc |
| 135 | + BUILD_ALWAYS TRUE |
| 136 | + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/wasm |
| 137 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -S ${CMAKE_CURRENT_LIST_DIR}/wasm -B build |
| 138 | + -DWASI_SDK_PREFIX=${WASI_SDK_DIR} |
| 139 | + -DCMAKE_TOOLCHAIN_FILE=${WASI_TOOLCHAIN_FILE} |
| 140 | + -DCMAKE_SYSROOT=${WASI_SYS_ROOT} |
| 141 | + -DWASM_TO_AOT=ON |
| 142 | + -DWAMRC_PATH=${CMAKE_CURRENT_BINARY_DIR}/wamrc |
| 143 | + -DSOCKET_WASI_CMAKE=${WAMR_ROOT}/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake |
| 144 | + BUILD_COMMAND ${CMAKE_COMMAND} --build build |
| 145 | + INSTALL_COMMAND ${CMAKE_COMMAND} --install build --prefix ${CMAKE_CURRENT_BINARY_DIR} |
| 146 | + ) |
| 147 | +else() |
| 148 | + ExternalProject_Add(wasm |
| 149 | + PREFIX wasm-build |
| 150 | + BUILD_ALWAYS TRUE |
| 151 | + SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/wasm |
| 152 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -S ${CMAKE_CURRENT_LIST_DIR}/wasm -B build |
| 153 | + -DWASI_SDK_PREFIX=${WASI_SDK_DIR} |
| 154 | + -DCMAKE_TOOLCHAIN_FILE=${WASI_TOOLCHAIN_FILE} |
| 155 | + -DCMAKE_SYSROOT=${WASI_SYS_ROOT} |
| 156 | + -DSOCKET_WASI_CMAKE=${WAMR_ROOT}/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake |
| 157 | + BUILD_COMMAND ${CMAKE_COMMAND} --build build |
| 158 | + INSTALL_COMMAND ${CMAKE_COMMAND} --install build --prefix ${CMAKE_CURRENT_BINARY_DIR} |
| 159 | + ) |
| 160 | +endif() |
| 161 | + |
| 162 | +# |
| 163 | +# Test |
| 164 | +# |
| 165 | +add_test( |
| 166 | + NAME run_example1 |
| 167 | + COMMAND ./example1 |
| 168 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
| 169 | +) |
0 commit comments