mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2024-11-26 15:32:05 +00:00
777121217e
https://developer.android.com/ndk/guides/stable_apis#core_cc > Note that on Android, unlike Linux, there are no separate libpthread or librt libraries. That functionality is included directly in libc, which does not need to be explicitly linked against. Set `THREADS_PREFER_PTHREAD_FLAG` ON and find package `Threads`, then link `${CMAKE_THREAD_LIBS_INIT}` instead of `-lpthread`. ps. https://cmake.org/cmake/help/latest/module/FindThreads.html
184 lines
5.6 KiB
CMake
184 lines
5.6 KiB
CMake
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
cmake_minimum_required (VERSION 3.0)
|
|
|
|
if(ESP_PLATFORM)
|
|
include (${COMPONENT_DIR}/build-scripts/esp-idf/wamr/CMakeLists.txt)
|
|
return()
|
|
endif()
|
|
|
|
project (iwasm)
|
|
|
|
set (CMAKE_VERBOSE_MAKEFILE OFF)
|
|
|
|
if (NOT DEFINED WAMR_BUILD_PLATFORM)
|
|
string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_STATIC)
|
|
set (WAMR_BUILD_STATIC 1)
|
|
endif ()
|
|
if (NOT DEFINED WAMR_BUILD_SHARED)
|
|
set (WAMR_BUILD_SHARED 1)
|
|
endif ()
|
|
|
|
# Reset default linker flags
|
|
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
|
set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
|
|
|
|
set (CMAKE_C_STANDARD 99)
|
|
|
|
# Set WAMR_BUILD_TARGET, currently values supported:
|
|
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]",
|
|
# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]"
|
|
if (NOT DEFINED WAMR_BUILD_TARGET)
|
|
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
|
|
set (WAMR_BUILD_TARGET "AARCH64")
|
|
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
|
|
set (WAMR_BUILD_TARGET "RISCV64")
|
|
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
# Build as X86_64 by default in 64-bit platform
|
|
set (WAMR_BUILD_TARGET "X86_64")
|
|
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
# Build as X86_32 by default in 32-bit platform
|
|
set (WAMR_BUILD_TARGET "X86_32")
|
|
else ()
|
|
message(SEND_ERROR "Unsupported build target platform!")
|
|
endif ()
|
|
endif ()
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_INTERP)
|
|
# Enable Interpreter by default
|
|
set (WAMR_BUILD_INTERP 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_AOT)
|
|
# Enable AOT by default.
|
|
set (WAMR_BUILD_AOT 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_JIT)
|
|
# Disable JIT by default.
|
|
set (WAMR_BUILD_JIT 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_FAST_JIT)
|
|
# Disable Fast JIT by default
|
|
set (WAMR_BUILD_FAST_JIT 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_LIBC_BUILTIN)
|
|
# Enable libc builtin support by default
|
|
set (WAMR_BUILD_LIBC_BUILTIN 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_LIBC_WASI)
|
|
# Enable libc wasi support by default
|
|
set (WAMR_BUILD_LIBC_WASI 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_FAST_INTERP)
|
|
# Enable fast interpreter
|
|
set (WAMR_BUILD_FAST_INTERP 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_MULTI_MODULE)
|
|
# Disable multiple modules by default
|
|
set (WAMR_BUILD_MULTI_MODULE 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_LIB_PTHREAD)
|
|
# Disable pthread library by default
|
|
set (WAMR_BUILD_LIB_PTHREAD 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_LIB_WASI_THREADS)
|
|
# Disable wasi threads library by default
|
|
set (WAMR_BUILD_LIB_WASI_THREADS 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_MINI_LOADER)
|
|
# Disable wasm mini loader by default
|
|
set (WAMR_BUILD_MINI_LOADER 0)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_SIMD)
|
|
# Enable SIMD by default
|
|
set (WAMR_BUILD_SIMD 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED WAMR_BUILD_REF_TYPES)
|
|
# Disable reference types by default
|
|
set (WAMR_BUILD_REF_TYPES 0)
|
|
endif ()
|
|
|
|
set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
|
|
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat -Wformat-security -Wshadow -Wno-unused-parameter")
|
|
# set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion -Wsign-conversion")
|
|
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wformat -Wformat-security -Wno-unused")
|
|
|
|
if (WAMR_BUILD_TARGET MATCHES "X86_.*" OR WAMR_BUILD_TARGET STREQUAL "AMD_64")
|
|
if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang"))
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mindirect-branch-register")
|
|
endif ()
|
|
endif ()
|
|
|
|
# The following flags are to enhance security, but it may impact performance,
|
|
# we disable them by default.
|
|
#if (WAMR_BUILD_TARGET MATCHES "X86_.*" OR WAMR_BUILD_TARGET STREQUAL "AMD_64")
|
|
# set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftrapv -D_FORTIFY_SOURCE=2")
|
|
#endif ()
|
|
#set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong --param ssp-buffer-size=4")
|
|
#set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack,-z,relro,-z,now")
|
|
|
|
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
|
|
|
|
set (THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
|
|
# STATIC LIBRARY
|
|
if (WAMR_BUILD_STATIC)
|
|
add_library(iwasm_static STATIC ${WAMR_RUNTIME_LIB_SOURCE})
|
|
set_target_properties (iwasm_static PROPERTIES OUTPUT_NAME vmlib)
|
|
target_include_directories(iwasm_static INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include)
|
|
target_link_libraries (iwasm_static INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT})
|
|
if (WAMR_BUILD_WASM_CACHE EQUAL 1)
|
|
target_link_libraries(iwasm_static INTERFACE boringssl_crypto)
|
|
endif ()
|
|
|
|
install (TARGETS iwasm_static ARCHIVE DESTINATION lib)
|
|
endif ()
|
|
|
|
# SHARED LIBRARY
|
|
if (WAMR_BUILD_SHARED)
|
|
add_library (iwasm_shared SHARED ${WAMR_RUNTIME_LIB_SOURCE})
|
|
set_target_properties (iwasm_shared PROPERTIES OUTPUT_NAME iwasm)
|
|
target_include_directories(iwasm_shared INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include)
|
|
target_link_libraries (iwasm_shared INTERFACE ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl ${CMAKE_THREAD_LIBS_INIT})
|
|
if (WAMR_BUILD_WASM_CACHE EQUAL 1)
|
|
target_link_libraries(iwasm_shared INTERFACE boringssl_crypto)
|
|
endif ()
|
|
|
|
if (MINGW)
|
|
target_link_libraries (iwasm_shared INTERFACE -lWs2_32 -lwsock32)
|
|
endif ()
|
|
|
|
install (TARGETS iwasm_shared LIBRARY DESTINATION lib)
|
|
endif ()
|
|
|
|
# HEADERS
|
|
install (FILES
|
|
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_c_api.h
|
|
${WAMR_ROOT_DIR}/core/iwasm/include/wasm_export.h
|
|
${WAMR_ROOT_DIR}/core/iwasm/include/lib_export.h
|
|
DESTINATION include)
|