CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. cmake_minimum_required (VERSION 3.14)
  4. # Reset default linker flags
  5. set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
  6. set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
  7. if (NOT DEFINED WAMR_BUILD_TARGET)
  8. message (FATAL_ERROR "WAMR_BUILD_TARGET isn't set")
  9. endif ()
  10. if (NOT (WAMR_BUILD_TARGET STREQUAL "X86_64"
  11. OR WAMR_BUILD_TARGET STREQUAL "X86_32"
  12. OR WAMR_BUILD_TARGET MATCHES "AARCH64.*"
  13. OR WAMR_BUILD_TARGET MATCHES "ARM.*"
  14. OR WAMR_BUILD_TARGET MATCHES "RISCV64.*"))
  15. message (FATAL_ERROR "Unsupported build target platform ${WAMR_BUILD_TARGET}!")
  16. endif ()
  17. if (NOT DEFINED ANDROID_ABI)
  18. if (WAMR_BUILD_TARGET STREQUAL "X86_64")
  19. set (ANDROID_ABI "x86_64")
  20. elseif (WAMR_BUILD_TARGET STREQUAL "X86_32")
  21. set (ANDROID_ABI "x86")
  22. elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
  23. set (ANDROID_ABI "arm64-v8a")
  24. elseif (WAMR_BUILD_TARGET MATCHES "ARM.*")
  25. set (ANDROID_ABI "armeabi-v7a")
  26. else ()
  27. set (ANDROID_ABI "riscv64")
  28. endif ()
  29. endif ()
  30. if (NOT DEFINED ANDROID_LD)
  31. set (ANDROID_LD lld)
  32. endif ()
  33. if (NOT DEFINED ANDROID_PLATFORM)
  34. set (ANDROID_PLATFORM 24)
  35. endif ()
  36. # https://android.googlesource.com/platform/ndk/+/master/build/cmake/android.toolchain.cmake
  37. set (CMAKE_TOOLCHAIN_FILE "$ENV{ANDROID_NDK_LATEST_HOME}/build/cmake/android.toolchain.cmake")
  38. set (ANDROID_SDK $ENV{ANDROID_HOME})
  39. set (ANDROID_NDK $ENV{ANDROID_NDK_LATEST_HOME})
  40. project (iwasm)
  41. set (WAMR_BUILD_PLATFORM "android")
  42. set (CMAKE_VERBOSE_MAKEFILE ON)
  43. if (NOT CMAKE_BUILD_TYPE)
  44. set (CMAKE_BUILD_TYPE Release)
  45. endif ()
  46. if (NOT DEFINED WAMR_BUILD_INTERP)
  47. # Enable Interpreter by default
  48. set (WAMR_BUILD_INTERP 1)
  49. endif ()
  50. if (NOT DEFINED WAMR_BUILD_FAST_INTERP)
  51. # Enable fast interpreter
  52. set (WAMR_BUILD_FAST_INTERP 1)
  53. endif ()
  54. if (NOT DEFINED WAMR_BUILD_AOT)
  55. # Enable AOT by default.
  56. set (WAMR_BUILD_AOT 1)
  57. endif ()
  58. if (NOT DEFINED WAMR_BUILD_JIT)
  59. # Disable JIT by default.
  60. set (WAMR_BUILD_JIT 0)
  61. endif ()
  62. if (NOT DEFINED WAMR_BUILD_LIBC_BUILTIN)
  63. # Enable libc builtin support by default
  64. set (WAMR_BUILD_LIBC_BUILTIN 1)
  65. endif ()
  66. if (NOT DEFINED WAMR_BUILD_LIBC_WASI)
  67. # Enable libc wasi support by default
  68. set (WAMR_BUILD_LIBC_WASI 1)
  69. endif ()
  70. if (NOT DEFINED WAMR_BUILD_MULTI_MODULE)
  71. # Disable multiple modules by default
  72. set (WAMR_BUILD_MULTI_MODULE 0)
  73. endif ()
  74. if (NOT DEFINED WAMR_BUILD_LIB_PTHREAD)
  75. # Disable pthread library by default
  76. set (WAMR_BUILD_LIB_PTHREAD 0)
  77. endif ()
  78. if (NOT DEFINED WAMR_BUILD_LIB_WASI_THREADS)
  79. # Disable wasi threads library by default
  80. set (WAMR_BUILD_LIB_WASI_THREADS 0)
  81. endif()
  82. set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
  83. include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
  84. add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE})
  85. set_version_info (vmlib)
  86. set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections -pie -fPIE")
  87. # The following flags are to enhance security, but it may impact performance,
  88. # we disable them by default.
  89. #if (WAMR_BUILD_TARGET MATCHES "X86_.*" OR WAMR_BUILD_TARGET STREQUAL "AMD_64")
  90. # set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftrapv -D_FORTIFY_SOURCE=2")
  91. #endif ()
  92. #set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong --param ssp-buffer-size=4")
  93. #set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,noexecstack,-z,relro,-z,now")
  94. add_library (iwasm SHARED ${WAMR_RUNTIME_LIB_SOURCE})
  95. if (CMAKE_BUILD_TYPE STREQUAL Release)
  96. target_link_libraries (iwasm ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -landroid -llog -s)
  97. else()
  98. target_link_libraries (iwasm ${LLVM_AVAILABLE_LIBS} ${UV_A_LIBS} -lm -ldl -landroid -llog)
  99. endif()
  100. set (distribution_DIR ${CMAKE_BINARY_DIR}/distribution)
  101. set_target_properties (iwasm PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${distribution_DIR}/wasm/lib")
  102. set_version_info (iwasm)
  103. add_custom_command (TARGET iwasm POST_BUILD
  104. COMMAND "${CMAKE_COMMAND}" -E copy_directory "${WAMR_ROOT_DIR}/core/iwasm/include" "${distribution_DIR}/wasm/include/"
  105. COMMENT "Copying iwasm to output directory")