wamr.mk 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. CORE_ROOT := wamr/core
  4. IWASM_ROOT := wamr/core/iwasm
  5. SHARED_ROOT := wamr/core/shared
  6. ifeq ($(CONFIG_ARCH_ARMV6M),y)
  7. WAMR_BUILD_TARGET := THUMBV6M
  8. else ifeq ($(CONFIG_ARCH_ARMV7A),y)
  9. WAMR_BUILD_TARGET := THUMBV7
  10. else ifeq ($(CONFIG_ARCH_ARMV7M),y)
  11. WAMR_BUILD_TARGET := THUMBV7EM
  12. else ifeq ($(CONFIG_ARCH_ARMV8M),y)
  13. WAMR_BUILD_TARGET := THUMBV8M
  14. else ifeq ($(CONFIG_ARCH_ARM64),y)
  15. WAMR_BUILD_TARGET := AARCH64
  16. else ifeq ($(CONFIG_ARCH_X86),y)
  17. WAMR_BUILD_TARGET := X86_32
  18. else ifeq ($(CONFIG_ARCH_X86_64),y)
  19. WAMR_BUILD_TARGET := X86_64
  20. else ifeq ($(CONFIG_ARCH_XTENSA),y)
  21. WAMR_BUILD_TARGET := XTENSA
  22. # RV64GC and RV32IM used in older
  23. # version NuttX
  24. else ifeq ($(CONFIG_ARCH_RV64GC),y)
  25. WAMR_BUILD_TARGET := RISCV64
  26. else ifeq ($(CONFIG_ARCH_RV32IM),y)
  27. WAMR_BUILD_TARGET := RISCV32
  28. else ifeq ($(CONFIG_ARCH_RV64),y)
  29. WAMR_BUILD_TARGET := RISCV64
  30. else ifeq ($(CONFIG_ARCH_RV32),y)
  31. WAMR_BUILD_TARGET := RISCV32
  32. else ifeq ($(CONFIG_ARCH_SIM),y)
  33. ifeq ($(CONFIG_SIM_M32),y)
  34. WAMR_BUILD_TARGET := X86_32
  35. else ifeq ($(CONFIG_HOST_X86),y)
  36. WAMR_BUILD_TARGET := X86_32
  37. else ifeq ($(CONFIG_HOST_ARM),y)
  38. WAMR_BUILD_TARGET := ARM
  39. else ifeq ($(CONFIG_HOST_ARM64),y)
  40. WAMR_BUILD_TARGET := AARCH64
  41. else
  42. WAMR_BUILD_TARGET := X86_64
  43. endif
  44. ifeq ($(CONFIG_HOST_MACOS),y)
  45. # Note: invokeNative_em64.s needs BH_PLATFORM_DARWIN
  46. AFLAGS += -DBH_PLATFORM_DARWIN
  47. endif
  48. endif
  49. WAMR_BUILD_PLATFORM := nuttx
  50. CFLAGS += -DBH_MALLOC=wasm_runtime_malloc
  51. CFLAGS += -DBH_FREE=wasm_runtime_free
  52. ifeq ($(WAMR_BUILD_TARGET), X86_32)
  53. CFLAGS += -DBUILD_TARGET_X86_32
  54. INVOKE_NATIVE := invokeNative_ia32.s
  55. AOT_RELOC := aot_reloc_x86_32.c
  56. else ifeq ($(WAMR_BUILD_TARGET), X86_64)
  57. CFLAGS += -DBUILD_TARGET_X86_64
  58. INVOKE_NATIVE := invokeNative_em64.s
  59. AOT_RELOC := aot_reloc_x86_64.c
  60. else ifeq ($(WAMR_BUILD_TARGET), AARCH64)
  61. CFLAGS += -DBUILD_TARGET_AARCH64
  62. CFLAGS += -DBUILD_TARGET=\"$(WAMR_BUILD_TARGET)\"
  63. INVOKE_NATIVE := invokeNative_aarch64.s
  64. AOT_RELOC := aot_reloc_aarch64.c
  65. else ifeq ($(findstring ARM,$(WAMR_BUILD_TARGET)), ARM)
  66. CFLAGS += -DBUILD_TARGET_ARM
  67. CFLAGS += -DBUILD_TARGET=\"$(WAMR_BUILD_TARGET)\"
  68. INVOKE_NATIVE := invokeNative_arm.s
  69. AOT_RELOC := aot_reloc_arm.c
  70. else ifeq ($(findstring THUMB,$(WAMR_BUILD_TARGET)), THUMB)
  71. CFLAGS += -DBUILD_TARGET=\"$(WAMR_BUILD_TARGET)\"
  72. ifeq ($(CONFIG_ARCH_FPU),y)
  73. CFLAGS += -DBUILD_TARGET_THUMB_VFP
  74. INVOKE_NATIVE := invokeNative_thumb_vfp.s
  75. else
  76. CFLAGS += -DBUILD_TARGET_THUMB
  77. INVOKE_NATIVE := invokeNative_thumb.s
  78. endif
  79. AOT_RELOC := aot_reloc_thumb.c
  80. else ifeq (${WAMR_BUILD_TARGET}, MIPS)
  81. CFLAGS += -DBUILD_TARGET_MIPS
  82. INVOKE_NATIVE := invokeNative_mips.s
  83. AOT_RELOC := aot_reloc_mips.c
  84. else ifeq (${WAMR_BUILD_TARGET}, XTENSA)
  85. CFLAGS += -DBUILD_TARGET_XTENSA
  86. INVOKE_NATIVE := invokeNative_xtensa.s
  87. AOT_RELOC := aot_reloc_xtensa.c
  88. else ifeq (${WAMR_BUILD_TARGET}, RISCV64)
  89. ifeq (${CONFIG_ARCH_DPFPU},y)
  90. CFLAGS += -DBUILD_TARGET_RISCV64_LP64D
  91. else ifneq (${CONFIG_ARCH_FPU},y)
  92. CFLAGS += -DBUILD_TARGET_RISCV64_LP64
  93. else
  94. $(error riscv64 lp64f is unsupported)
  95. endif
  96. INVOKE_NATIVE += invokeNative_riscv.S
  97. AOT_RELOC := aot_reloc_riscv.c
  98. else ifeq (${WAMR_BUILD_TARGET}, RISCV32)
  99. ifeq (${CONFIG_ARCH_DPFPU},y)
  100. CFLAGS += -DBUILD_TARGET_RISCV32_ILP32D
  101. else ifneq (${CONFIG_ARCH_FPU},y)
  102. CFLAGS += -DBUILD_TARGET_RISCV32_ILP32
  103. else
  104. $(error riscv32 ilp32f is unsupported)
  105. endif
  106. INVOKE_NATIVE += invokeNative_riscv.S
  107. AOT_RELOC := aot_reloc_riscv.c
  108. else
  109. $(error Build target is unsupported)
  110. endif
  111. ifeq ($(CONFIG_INTERPRETERS_WAMR_LOG),y)
  112. CFLAGS += -DWASM_ENABLE_LOG=1
  113. else
  114. CFLAGS += -DWASM_ENABLE_LOG=0
  115. endif
  116. ifeq ($(CONFIG_INTERPRETERS_WAMR_AOT),y)
  117. CFLAGS += -I$(IWASM_ROOT)/aot
  118. CFLAGS += -DWASM_ENABLE_AOT=1
  119. CSRCS += aot_loader.c \
  120. $(AOT_RELOC) \
  121. aot_intrinsic.c \
  122. aot_runtime.c
  123. ifeq ($(CONFIG_INTERPRETERS_WAMR_DEBUG_AOT),y)
  124. CFLAGS += -DWASM_ENABLE_DEBUG_AOT=1
  125. CSRCS += elf_parser.c \
  126. jit_debug.c
  127. endif
  128. else
  129. CFLAGS += -DWASM_ENABLE_AOT=0
  130. endif
  131. ifeq ($(CONFIG_INTERPRETERS_WAMR_AOT_QUICK_ENTRY),y)
  132. CFLAGS += -DWASM_ENABLE_QUICK_AOT_ENTRY=1
  133. else
  134. CFLAGS += -DWASM_ENABLE_QUICK_AOT_ENTRY=0
  135. endif
  136. ifeq ($(CONFIG_INTERPRETERS_WAMR_AOT_WORD_ALIGN_READ),y)
  137. CFLAGS += -DWASM_ENABLE_WORD_ALIGN_READ=1
  138. else
  139. CFLAGS += -DWASM_ENABLE_WORD_ALIGN_READ=0
  140. endif
  141. ifeq ($(CONFIG_INTERPRETERS_WAMR_MEM_DUAL_BUS_MIRROR),y)
  142. CFLAGS += -DWASM_MEM_DUAL_BUS_MIRROR=1
  143. else
  144. CFLAGS += -DWASM_MEM_DUAL_BUS_MIRROR=0
  145. endif
  146. ifeq ($(CONFIG_INTERPRETERS_WAMR_FAST), y)
  147. CFLAGS += -DWASM_ENABLE_FAST_INTERP=1
  148. CFLAGS += -DWASM_ENABLE_INTERP=1
  149. CSRCS += wasm_interp_fast.c
  150. CSRCS += wasm_runtime.c
  151. else
  152. CFLAGS += -DWASM_ENABLE_FAST_INTERP=0
  153. endif
  154. ifeq ($(CONFIG_INTERPRETERS_WAMR_CLASSIC), y)
  155. CFLAGS += -DWASM_ENABLE_INTERP=1
  156. CSRCS += wasm_interp_classic.c
  157. CSRCS += wasm_runtime.c
  158. endif
  159. ifeq ($(findstring y,$(CONFIG_INTERPRETERS_WAMR_FAST)$(CONFIG_INTERPRETERS_WAMR_CLASSIC)), y)
  160. ifeq ($(CONFIG_INTERPRETERS_WAMR_MINILOADER),y)
  161. CFLAGS += -DWASM_ENABLE_MINI_LOADER=1
  162. CSRCS += wasm_mini_loader.c
  163. else
  164. CFLAGS += -DWASM_ENABLE_MINI_LOADER=0
  165. CSRCS += wasm_loader.c
  166. endif
  167. endif
  168. ifeq ($(CONFIG_INTERPRETERS_WAMR_DEBUG_INTERP),y)
  169. # Note: INTERPRETERS_WAMR_CLASSIC/INTERPRETERS_WAMR_THREAD_MGR
  170. # dependencies are already handled in NuttX apps Kconfig
  171. CFLAGS += -DWASM_ENABLE_DEBUG_INTERP=1
  172. CFLAGS += -I$(IWASM_ROOT)/libraries/debug-engine
  173. CSRCS += debug_engine.c
  174. CSRCS += gdbserver.c
  175. CSRCS += handler.c
  176. CSRCS += packets.c
  177. CSRCS += utils.c
  178. VPATH += $(IWASM_ROOT)/libraries/debug-engine
  179. endif
  180. ifneq ($(CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE),)
  181. CFLAGS += -DWASM_STACK_GUARD_SIZE=CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE
  182. endif
  183. ifeq ($(CONFIG_INTERPRETERS_WAMR_SHARED_MEMORY),y)
  184. CFLAGS += -DWASM_ENABLE_SHARED_MEMORY=1
  185. CSRCS += wasm_shared_memory.c
  186. else
  187. CFLAGS += -DWASM_ENABLE_SHARED_MEMORY=0
  188. endif
  189. ifeq ($(CONFIG_INTERPRETERS_WAMR_BULK_MEMORY),y)
  190. CFLAGS += -DWASM_ENABLE_BULK_MEMORY=1
  191. else
  192. CFLAGS += -DWASM_ENABLE_BULK_MEMORY=0
  193. endif
  194. ifeq ($(CONFIG_INTERPRETERS_WAMR_PERF_PROFILING),y)
  195. CFLAGS += -DWASM_ENABLE_PERF_PROFILING=1
  196. else
  197. CFLAGS += -DWASM_ENABLE_PERF_PROFILING=0
  198. endif
  199. ifeq ($(CONFIG_INTERPRETERS_WAMR_MEMORY_PROFILING),y)
  200. CFLAGS += -DWASM_ENABLE_MEMORY_PROFILING=1
  201. else
  202. CFLAGS += -DWASM_ENABLE_MEMORY_PROFILING=0
  203. endif
  204. ifeq ($(CONFIG_INTERPRETERS_WAMR_MEMORY_TRACING),y)
  205. CFLAGS += -DWASM_ENABLE_MEMORY_TRACING=1
  206. else
  207. CFLAGS += -DWASM_ENABLE_MEMORY_TRACING=0
  208. endif
  209. ifeq ($(CONFIG_INTERPRETERS_WAMR_DUMP_CALL_STACK),y)
  210. CFLAGS += -DWASM_ENABLE_DUMP_CALL_STACK=1
  211. else
  212. CFLAGS += -DWASM_ENABLE_DUMP_CALL_STACK=0
  213. endif
  214. ifeq ($(CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN),y)
  215. CFLAGS += -DWASM_ENABLE_LIBC_BUILTIN=1
  216. CSRCS += libc_builtin_wrapper.c
  217. VPATH += $(IWASM_ROOT)/libraries/libc-builtin
  218. else
  219. CFLAGS += -DWASM_ENABLE_LIBC_BUILTIN=0
  220. endif
  221. ifeq ($(CONFIG_INTERPRETERS_WAMR_CONFIGURABLE_BOUNDS_CHECKS),y)
  222. CFLAGS += -DWASM_CONFIGURABLE_BOUNDS_CHECKS=1
  223. else
  224. CFLAGS += -DWASM_CONFIGURABLE_BOUNDS_CHECKS=0
  225. endif
  226. ifeq ($(CONFIG_INTERPRETERS_WAMR_LIBC_WASI),y)
  227. CFLAGS += -DWASM_ENABLE_LIBC_WASI=1
  228. CFLAGS += -I$(IWASM_ROOT)/libraries/libc-wasi/sandboxed-system-primitives/src
  229. CFLAGS += -I$(IWASM_ROOT)/libraries/libc-wasi/sandboxed-system-primitives/include
  230. CFLAGS += -I${SHARED_ROOT}/platform/common/libc-util
  231. CSRCS += blocking_op.c
  232. CSRCS += posix_socket.c
  233. CSRCS += posix_file.c
  234. CSRCS += posix_clock.c
  235. CSRCS += libc_errno.c
  236. CSRCS += libc_wasi_wrapper.c
  237. VPATH += $(IWASM_ROOT)/libraries/libc-wasi
  238. CSRCS += posix.c
  239. CSRCS += random.c
  240. CSRCS += str.c
  241. VPATH += $(IWASM_ROOT)/libraries/libc-wasi/sandboxed-system-primitives/src
  242. # todo: use Kconfig select instead
  243. CONFIG_INTERPRETERS_WAMR_MODULE_INSTANCE_CONTEXT = y
  244. else
  245. CFLAGS += -DWASM_ENABLE_LIBC_WASI=0
  246. endif
  247. ifeq ($(CONFIG_INTERPRETERS_WAMR_MODULE_INSTANCE_CONTEXT),y)
  248. CFLAGS += -DWASM_ENABLE_MODULE_INST_CONTEXT=1
  249. else
  250. CFLAGS += -DWASM_ENABLE_MODULE_INST_CONTEXT=0
  251. endif
  252. ifeq ($(CONFIG_INTERPRETERS_WAMR_MULTI_MODULE),y)
  253. CFLAGS += -DWASM_ENABLE_MULTI_MODULE=1
  254. else
  255. CFLAGS += -DWASM_ENABLE_MULTI_MODULE=0
  256. endif
  257. ifeq ($(CONFIG_INTERPRETERS_WAMR_THREAD_MGR),y)
  258. CFLAGS += -DWASM_ENABLE_THREAD_MGR=1
  259. CSRCS += thread_manager.c
  260. VPATH += $(IWASM_ROOT)/libraries/thread-mgr
  261. else
  262. CFLAGS += -DWASM_ENABLE_THREAD_MGR=0
  263. endif
  264. ifeq ($(CONFIG_INTERPRETERS_WAMR_LIB_WASI_THREADS),y)
  265. CFLAGS += -DWASM_ENABLE_LIB_WASI_THREADS=1
  266. CSRCS += lib_wasi_threads_wrapper.c
  267. CSRCS += tid_allocator.c
  268. VPATH += $(IWASM_ROOT)/libraries/lib-wasi-threads
  269. else
  270. CFLAGS += -DWASM_ENABLE_LIB_WASI_THREADS=0
  271. endif
  272. ifeq ($(CONFIG_INTERPRETERS_WAMR_LIB_PTHREAD),y)
  273. CFLAGS += -DWASM_ENABLE_LIB_PTHREAD=1
  274. CSRCS += lib_pthread_wrapper.c
  275. else
  276. CFLAGS += -DWASM_ENABLE_LIB_PTHREAD=0
  277. endif
  278. ifeq ($(CONFIG_INTERPRETERS_WAMR_LIB_PTHREAD_SEMAPHORE),y)
  279. CFLAGS += -DWASM_ENABLE_LIB_PTHREAD_SEMAPHORE=1
  280. else
  281. CFLAGS += -DWASM_ENABLE_LIB_PTHREAD_SEMAPHORE=0
  282. endif
  283. ifeq ($(CONFIG_INTERPRETERS_WAMR_DISABLE_HW_BOUND_CHECK),y)
  284. CFLAGS += -DWASM_DISABLE_HW_BOUND_CHECK=1
  285. CFLAGS += -DWASM_DISABLE_STACK_HW_BOUND_CHECK=1
  286. else
  287. CFLAGS += -DWASM_DISABLE_HW_BOUND_CHECK=0
  288. CFLAGS += -DWASM_DISABLE_STACK_HW_BOUND_CHECK=0
  289. endif
  290. # REVISIT: is this worth to have a Kconfig?
  291. CFLAGS += -DWASM_DISABLE_WAKEUP_BLOCKING_OP=0
  292. ifeq ($(CONFIG_INTERPRETERS_WAMR_LOAD_CUSTOM_SECTIONS),y)
  293. CFLAGS += -DWASM_ENABLE_LOAD_CUSTOM_SECTION=1
  294. else
  295. CFLAGS += -DWASM_ENABLE_LOAD_CUSTOM_SECTION=0
  296. endif
  297. ifeq ($(CONFIG_INTERPRETERS_WAMR_CUSTOM_NAME_SECTIONS),y)
  298. CFLAGS += -DWASM_ENABLE_CUSTOM_NAME_SECTION=1
  299. else
  300. CFLAGS += -DWASM_ENABLE_CUSTOM_NAME_SECTION=0
  301. endif
  302. ifeq ($(CONFIG_INTERPRETERS_WAMR_GLOBAL_HEAP_POOL),y)
  303. CFLAGS += -DWASM_ENABLE_GLOBAL_HEAP_POOL=1
  304. CFLAGS += -DWASM_GLOBAL_HEAP_SIZE="$(CONFIG_INTERPRETERS_WAMR_GLOBAL_HEAP_POOL_SIZE) * 1024"
  305. else
  306. CFLAGS += -DWASM_ENABLE_GLOBAL_HEAP_POOL=0
  307. endif
  308. ifeq ($(CONFIG_INTERPRETERS_WAMR_ENABLE_SPEC_TEST),y)
  309. CFLAGS += -DWASM_ENABLE_SPEC_TEST=1
  310. else
  311. CFLAGS += -DWASM_ENABLE_SPEC_TEST=0
  312. endif
  313. ifeq ($(CONFIG_INTERPRETERS_WAMR_REF_TYPES),y)
  314. CFLAGS += -DWASM_ENABLE_REF_TYPES=1
  315. else
  316. CFLAGS += -DWASM_ENABLE_REF_TYPES=0
  317. endif
  318. ifeq ($(CONFIG_INTERPRETERS_WAMR_ENABLE_EXCE_HANDLING),y)
  319. CFLAGS += -DWASM_ENABLE_EXCE_HANDLING=1
  320. CFLAGS += -DWASM_ENABLE_TAGS=1
  321. else
  322. CFLAGS += -DWASM_ENABLE_EXCE_HANDLING=0
  323. CFLAGS += -DWASM_ENABLE_TAGS=0
  324. endif
  325. CFLAGS += -Wno-strict-prototypes -Wno-shadow -Wno-unused-variable
  326. CFLAGS += -Wno-int-conversion -Wno-implicit-function-declaration
  327. CFLAGS += -I${CORE_ROOT} \
  328. -I${IWASM_ROOT}/include \
  329. -I${IWASM_ROOT}/interpreter \
  330. -I${IWASM_ROOT}/common \
  331. -I${IWASM_ROOT}/libraries/thread-mgr \
  332. -I${SHARED_ROOT}/include \
  333. -I${SHARED_ROOT}/platform/include \
  334. -I${SHARED_ROOT}/utils \
  335. -I${SHARED_ROOT}/utils/uncommon \
  336. -I${SHARED_ROOT}/mem-alloc \
  337. -I${SHARED_ROOT}/platform/nuttx
  338. ifeq ($(WAMR_BUILD_INTERP), 1)
  339. CFLAGS += -I$(IWASM_ROOT)/interpreter
  340. endif
  341. CSRCS += nuttx_platform.c \
  342. posix_blocking_op.c \
  343. posix_thread.c \
  344. posix_time.c \
  345. posix_sleep.c \
  346. mem_alloc.c \
  347. ems_kfc.c \
  348. ems_alloc.c \
  349. ems_hmu.c \
  350. bh_assert.c \
  351. bh_bitmap.c \
  352. bh_common.c \
  353. bh_hashmap.c \
  354. bh_list.c \
  355. bh_log.c \
  356. bh_queue.c \
  357. bh_vector.c \
  358. bh_read_file.c \
  359. runtime_timer.c \
  360. wasm_application.c \
  361. wasm_blocking_op.c \
  362. wasm_runtime_common.c \
  363. wasm_native.c \
  364. wasm_exec_env.c \
  365. wasm_memory.c \
  366. wasm_c_api.c
  367. ASRCS += $(INVOKE_NATIVE)
  368. VPATH += $(SHARED_ROOT)/platform/nuttx
  369. VPATH += $(SHARED_ROOT)/platform/common/posix
  370. VPATH += $(SHARED_ROOT)/platform/common/libc-util
  371. VPATH += $(SHARED_ROOT)/mem-alloc
  372. VPATH += $(SHARED_ROOT)/mem-alloc/ems
  373. VPATH += $(SHARED_ROOT)/utils
  374. VPATH += $(SHARED_ROOT)/utils/uncommon
  375. VPATH += $(IWASM_ROOT)/common
  376. VPATH += $(IWASM_ROOT)/interpreter
  377. VPATH += $(IWASM_ROOT)/libraries
  378. VPATH += $(IWASM_ROOT)/libraries/lib-pthread
  379. VPATH += $(IWASM_ROOT)/common/arch
  380. VPATH += $(IWASM_ROOT)/aot
  381. VPATH += $(IWASM_ROOT)/aot/arch
  382. VPATH += $(IWASM_ROOT)/aot/debug