Skip to content
Snippets Groups Projects
CMakeLists.txt 2.93 KiB
cmake_minimum_required (VERSION 2.8...3.16)
project (export_test)

set (WAMR_ROOT_DIR ./wamr) #ToDo better search for the installed wamr library
set (WASI_VERSION 12)
set (WASI_VERSION_FULL ${WASI_VERSION}.0)
set (WASI_SDK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/wasi-sdk)
set (WASI_CLANG ${WASI_SDK_DIR}/bin/clang)
set (WASI_SYSROOT ${WASI_SDK_DIR}/share/wasi-sysroot)
set (WAMR_EMBEDDING_API_INCLUDE_PATH  ${WAMR_ROOT_DIR}/core/iwasm/include)
set (VM_LIB ${WAMR_ROOT_DIR}/product-mini/platforms/linux/build/libvmlib.a)


set(CMAKE_CXX_COMPILER "clang++")

# Reset default linker flags
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")


set(WAMR_BUILD_PLATFORM "linux")
set(WAMR_BUILD_TARGET "X86_64")

set (WAMR_BUILD_INTERP 1)
set (WAMR_BUILD_FAST_INTERP 1)
set (WAMR_BUILD_AOT 0)
set (WAMR_BUILD_JIT 0)
set (WAMR_BUILD_LIBC_BUILTIN 1)
#
if (NOT MSVC)
set (WAMR_BUILD_LIBC_WASI 1)
endif ()

set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -fPIE")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat -Wformat-security")

include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
add_library(vmlib STATIC ${WAMR_RUNTIME_LIB_SOURCE})

add_custom_target(run ALL
    DEPENDS test.wasm)

if (NOT EXISTS ${WASI_SDK_DIR})    
    execute_process(
        # Downloading the wasi sdk files
        COMMAND wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_VERSION}/wasi-sdk-${WASI_VERSION_FULL}-linux.tar.gz
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        OUTPUT_QUIET
        ERROR_QUIET
    )
    execute_process(
         # Creating directory for wasi sdk and extracting the downloaded files
         COMMAND mkdir -p ${WASI_SDK_DIR}
         COMMAND tar -zxvf wasi-sdk-${WASI_VERSION_FULL}-linux.tar.gz -C ${WASI_SDK_DIR} --strip 1
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
         OUTPUT_QUIET
         ERROR_QUIET
     )
     execute_process(
        # Cleaning up after installation
         COMMAND rm wasi-sdk-${WASI_VERSION_FULL}-linux.tar.gz
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
         OUTPUT_QUIET
         ERROR_QUIET
     )
endif()

add_custom_command(
    OUTPUT test.wasm
    COMMAND ${WASI_CLANG} --sysroot=${WASI_SYSROOT} -Wl,--no-entry -O3 -o test.wasm ${CMAKE_CURRENT_SOURCE_DIR}/test.c
    COMMENT "Compiling the test.c to test.wasm" 
    WORKING_DIRECTORY ${CMAKE_CURRENT_BIN_DIR}
)
add_custom_target(test.wasm 
    COMMAND ${WASI_CLANG} --sysroot=${WASI_SYSROOT} -Wl,--no-entry -O3 -o test.wasm ${CMAKE_CURRENT_SOURCE_DIR}/test.c

)

#add_executable(test.wasm test.c)
#target_compile_options(test.wasm -sysroot=${WASI_SYSROOT} -Wl,--no-entry -O3)
###### There is no way to specify another compiler for a single target

set(C_SOURCE_FILES main.c)

add_executable(export_test ${C_SOURCE_FILES})
target_include_directories(export_test PUBLIC ${WAMR_EMBEDDING_API_INCLUDE_PATH} ${CMAKE_CURRENT_LIST_DIR})
target_link_libraries(export_test PRIVATE vmlib pthread m)