iwasm_common.cmake 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
  4. include_directories (${IWASM_COMMON_DIR})
  5. if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*")
  6. if (DEFINED ENV{VCToolsInstallDir})
  7. # Detect host tool dir
  8. set(_ARMASM64_CANDIDATES
  9. "$ENV{VCToolsInstallDir}/bin/HostX64/ARM64/armasm64.exe"
  10. "$ENV{VCToolsInstallDir}/bin/HostARM64/arm64/armasm64.exe")
  11. set(_ARMASM64_EXE "")
  12. foreach(_p IN LISTS _ARMASM64_CANDIDATES)
  13. if (EXISTS "${_p}")
  14. set(_ARMASM64_EXE "${_p}")
  15. break()
  16. endif()
  17. endforeach()
  18. if (_ARMASM64_EXE STREQUAL "")
  19. message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir")
  20. endif()
  21. # Wrapper without spaces to avoid quoting hell on NMake/cmd.exe
  22. set(_WRAP "${CMAKE_BINARY_DIR}/armasm64_wrapper.bat")
  23. file(WRITE "${_WRAP}"
  24. "@echo off\r\n\"${_ARMASM64_EXE}\" %*\r\n")
  25. # Use wrapper as compiler (no spaces in path)
  26. set(CMAKE_ASM_MASM_COMPILER
  27. "${_WRAP}"
  28. CACHE FILEPATH "" FORCE)
  29. # Quote ONLY object and source (compiler path has no spaces now)
  30. set(CMAKE_ASM_MASM_COMPILE_OBJECT
  31. "<CMAKE_ASM_MASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
  32. CACHE STRING "" FORCE)
  33. else()
  34. message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
  35. endif()
  36. endif()
  37. add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
  38. add_definitions(-DBH_FREE=wasm_runtime_free)
  39. file (GLOB c_source_all ${IWASM_COMMON_DIR}/*.c)
  40. if (WAMR_DISABLE_APP_ENTRY EQUAL 1)
  41. list(REMOVE_ITEM c_source_all "${IWASM_COMMON_DIR}/wasm_application.c")
  42. endif ()
  43. if (CMAKE_OSX_ARCHITECTURES)
  44. string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" OSX_ARCHS)
  45. list(FIND OSX_ARCHS arm64 OSX_AARCH64)
  46. list(FIND OSX_ARCHS x86_64 OSX_X86_64)
  47. if (NOT "${OSX_AARCH64}" STREQUAL "-1" AND NOT "${OSX_X86_64}" STREQUAL "-1")
  48. set(OSX_UNIVERSAL_BUILD 1)
  49. endif()
  50. endif()
  51. if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1)
  52. # Use invokeNative C version instead of asm code version
  53. # if WAMR_BUILD_INVOKE_NATIVE_GENERAL is explicitly set.
  54. # Note:
  55. # the maximum number of native arguments is limited to 20,
  56. # and there are possible issues when passing arguments to
  57. # native function for some cpus, e.g. int64 and double arguments
  58. # in arm and mips need to be 8-bytes aligned, and some arguments
  59. # of x86_64 are passed by registers but not stack
  60. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_general.c)
  61. elseif (OSX_UNIVERSAL_BUILD EQUAL 1)
  62. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_osx_universal.s)
  63. elseif (WAMR_BUILD_TARGET STREQUAL "X86_64" OR WAMR_BUILD_TARGET STREQUAL "AMD_64")
  64. if (NOT WAMR_BUILD_SIMD EQUAL 1)
  65. if (WAMR_BUILD_PLATFORM STREQUAL "windows")
  66. if (NOT MINGW)
  67. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64.asm)
  68. else ()
  69. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mingw_x64.s)
  70. endif ()
  71. else ()
  72. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64.s)
  73. endif ()
  74. else ()
  75. if (WAMR_BUILD_PLATFORM STREQUAL "windows")
  76. if (NOT MINGW)
  77. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64_simd.asm)
  78. else ()
  79. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mingw_x64_simd.s)
  80. endif ()
  81. else()
  82. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64_simd.s)
  83. endif()
  84. endif ()
  85. elseif (WAMR_BUILD_TARGET STREQUAL "X86_32")
  86. if (WAMR_BUILD_PLATFORM STREQUAL "windows")
  87. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_ia32.asm)
  88. else ()
  89. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_ia32.s)
  90. endif ()
  91. elseif (WAMR_BUILD_TARGET MATCHES "ARM.*")
  92. if (WAMR_BUILD_TARGET MATCHES "ARM.*_VFP")
  93. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arm_vfp.s)
  94. else ()
  95. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arm.s)
  96. endif ()
  97. elseif (WAMR_BUILD_TARGET MATCHES "THUMB.*")
  98. if (WAMR_BUILD_TARGET MATCHES "THUMB.*_VFP")
  99. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_thumb_vfp.s)
  100. else ()
  101. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_thumb.s)
  102. endif ()
  103. elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
  104. if (NOT WAMR_BUILD_SIMD EQUAL 1)
  105. if (WAMR_BUILD_PLATFORM STREQUAL "windows")
  106. if (MSVC)
  107. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
  108. set(_WAMR_ARM64_MASM_SOURCES ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
  109. set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES}
  110. PROPERTIES
  111. LANGUAGE ASM_MASM
  112. COMPILE_DEFINITIONS ""
  113. INCLUDE_DIRECTORIES ""
  114. COMPILE_OPTIONS "/nologo"
  115. )
  116. endif ()
  117. else ()
  118. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
  119. endif ()
  120. else()
  121. if (WAMR_BUILD_PLATFORM STREQUAL "windows")
  122. if (MSVC)
  123. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
  124. set(_WAMR_ARM64_MASM_SOURCES_SIMD ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
  125. set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES_SIMD}
  126. PROPERTIES
  127. LANGUAGE ASM_MASM
  128. COMPILE_DEFINITIONS ""
  129. INCLUDE_DIRECTORIES ""
  130. COMPILE_OPTIONS "/nologo"
  131. )
  132. endif ()
  133. else ()
  134. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
  135. endif ()
  136. endif()
  137. elseif (WAMR_BUILD_TARGET STREQUAL "MIPS")
  138. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mips.s)
  139. elseif (WAMR_BUILD_TARGET STREQUAL "XTENSA")
  140. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_xtensa.s)
  141. elseif (WAMR_BUILD_TARGET MATCHES "RISCV*")
  142. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_riscv.S)
  143. elseif (WAMR_BUILD_TARGET STREQUAL "ARC")
  144. set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arc.s)
  145. else ()
  146. message (FATAL_ERROR "Build target isn't set")
  147. endif ()
  148. set (IWASM_COMMON_SOURCE ${source_all})