compilation_on_android_ubuntu.yml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. # Copyright (C) 2019 Intel Corporation. All rights reserved.
  2. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  3. name: compilation on android, ubuntu-22.04
  4. on:
  5. # will be triggered on PR events
  6. pull_request:
  7. types:
  8. - opened
  9. - synchronize
  10. paths:
  11. - ".github/workflows/build_llvm_libraries.yml"
  12. - ".github/workflows/compilation_on_android_ubuntu.yml"
  13. - "build-scripts/**"
  14. - "core/**"
  15. - "!core/deps/**"
  16. - "product-mini/**"
  17. - "samples/**"
  18. - "!samples/workload/**"
  19. - "tests/wamr-test-suites/**"
  20. - "wamr-compiler/**"
  21. - "test-tools/wamr-ide/**"
  22. # will be triggered on push events
  23. push:
  24. branches:
  25. - main
  26. - "dev/**"
  27. paths:
  28. - ".github/workflows/build_llvm_libraries.yml"
  29. - ".github/workflows/compilation_on_android_ubuntu.yml"
  30. - "build-scripts/**"
  31. - "core/**"
  32. - "!core/deps/**"
  33. - "product-mini/**"
  34. - "samples/**"
  35. - "!samples/workload/**"
  36. - "tests/wamr-test-suites/**"
  37. - "wamr-compiler/**"
  38. - "test-tools/wamr-ide/**"
  39. # allow to be triggered manually
  40. workflow_dispatch:
  41. # Cancel any in-flight jobs for the same PR/branch so there's only one active
  42. # at a time
  43. concurrency:
  44. group: ${{ github.workflow }}-${{ github.ref }}
  45. cancel-in-progress: true
  46. env:
  47. # For BUILD
  48. AOT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
  49. CLASSIC_INTERP_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=0 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
  50. FAST_INTERP_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=0 -DWAMR_BUILD_FAST_INTERP=1 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
  51. FAST_JIT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_LAZY_JIT=0"
  52. LLVM_LAZY_JIT_BUILD_OPTIONS: " -DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=1"
  53. LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0"
  54. MULTI_TIER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=1"
  55. # For Spec Test
  56. DEFAULT_TEST_OPTIONS: "-s spec -b -P"
  57. MULTI_MODULES_TEST_OPTIONS: "-s spec -b -M -P"
  58. SIMD_TEST_OPTIONS: "-s spec -b -S -P"
  59. THREADS_TEST_OPTIONS: "-s spec -b -p -P"
  60. X86_32_TARGET_TEST_OPTIONS: "-m x86_32 -P"
  61. WASI_TEST_OPTIONS: "-s wasi_certification -w"
  62. WAMR_COMPILER_TEST_OPTIONS: "-s wamr_compiler -S -b -P"
  63. GC_TEST_OPTIONS: "-s spec -G -b -P"
  64. jobs:
  65. build_llvm_libraries_on_ubuntu_2204:
  66. uses: ./.github/workflows/build_llvm_libraries.yml
  67. with:
  68. os: "ubuntu-22.04"
  69. arch: "X86"
  70. build_wamrc:
  71. needs:
  72. [build_llvm_libraries_on_ubuntu_2204]
  73. runs-on: ${{ matrix.os }}
  74. strategy:
  75. matrix:
  76. include:
  77. - os: ubuntu-22.04
  78. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  79. steps:
  80. - name: checkout
  81. uses: actions/checkout@v4
  82. # since jobs.id can't contain the dot character
  83. # it is hard to use `format` to assemble the cache key
  84. - name: Get LLVM libraries
  85. id: retrieve_llvm_libs
  86. uses: actions/cache@v4
  87. with:
  88. path: |
  89. ./core/deps/llvm/build/bin
  90. ./core/deps/llvm/build/include
  91. ./core/deps/llvm/build/lib
  92. ./core/deps/llvm/build/libexec
  93. ./core/deps/llvm/build/share
  94. key: ${{ matrix.llvm_cache_key }}
  95. - name: Quit if cache miss
  96. if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true'
  97. run: echo "::error::can not get prebuilt llvm libraries" && exit 1
  98. - name: Build wamrc
  99. run: |
  100. mkdir build && cd build
  101. cmake ..
  102. cmake --build . --config Release --parallel 4
  103. working-directory: wamr-compiler
  104. build_iwasm:
  105. needs:
  106. [build_llvm_libraries_on_ubuntu_2204]
  107. runs-on: ${{ matrix.os }}
  108. strategy:
  109. matrix:
  110. make_options_run_mode: [
  111. # Running mode
  112. $AOT_BUILD_OPTIONS,
  113. $CLASSIC_INTERP_BUILD_OPTIONS,
  114. $FAST_INTERP_BUILD_OPTIONS,
  115. $FAST_JIT_BUILD_OPTIONS,
  116. $LLVM_LAZY_JIT_BUILD_OPTIONS,
  117. $LLVM_EAGER_JIT_BUILD_OPTIONS,
  118. $MULTI_TIER_JIT_BUILD_OPTIONS,
  119. ]
  120. make_options_feature: [
  121. # Features
  122. "-DWAMR_BUILD_CUSTOM_NAME_SECTION=1",
  123. "-DWAMR_BUILD_DEBUG_AOT=1",
  124. "-DWAMR_BUILD_DEBUG_INTERP=1",
  125. "-DWAMR_BUILD_DUMP_CALL_STACK=1",
  126. "-DWAMR_BUILD_LIB_PTHREAD=1",
  127. "-DWAMR_BUILD_LIB_WASI_THREADS=1",
  128. "-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1",
  129. "-DWAMR_BUILD_MINI_LOADER=1",
  130. "-DWAMR_BUILD_MEMORY_PROFILING=1",
  131. "-DWAMR_BUILD_MULTI_MODULE=1",
  132. "-DWAMR_BUILD_PERF_PROFILING=1",
  133. "-DWAMR_BUILD_REF_TYPES=1",
  134. "-DWAMR_BUILD_SIMD=1",
  135. "-DWAMR_BUILD_TAIL_CALL=1",
  136. "-DWAMR_DISABLE_HW_BOUND_CHECK=1",
  137. ]
  138. os: [ubuntu-22.04]
  139. platform: [android, linux]
  140. exclude:
  141. # uncompatiable feature and platform
  142. # uncompatiable mode and feature
  143. # MULTI_MODULE only on INTERP mode and AOT mode
  144. - make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
  145. make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
  146. - make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
  147. make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
  148. - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
  149. make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
  150. - make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
  151. make_options_feature: "-DWAMR_BUILD_MULTI_MODULE=1"
  152. # SIMD only on JIT/AOT mode
  153. - make_options_run_mode: $CLASSIC_INTERP_BUILD_OPTIONS
  154. make_options_feature: "-DWAMR_BUILD_SIMD=1"
  155. - make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
  156. make_options_feature: "-DWAMR_BUILD_SIMD=1"
  157. # DEBUG_INTERP only on CLASSIC INTERP mode
  158. - make_options_run_mode: $AOT_BUILD_OPTIONS
  159. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  160. - make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
  161. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  162. - make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
  163. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  164. - make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
  165. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  166. - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
  167. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  168. - make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
  169. make_options_feature: "-DWAMR_BUILD_DEBUG_INTERP=1"
  170. # DEBUG_AOT only on JIT/AOT mode
  171. - make_options_run_mode: $CLASSIC_INTERP_BUILD_OPTIONS
  172. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  173. - make_options_run_mode: $FAST_INTERP_BUILD_OPTIONS
  174. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  175. # TODO: DEBUG_AOT on JIT
  176. - make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
  177. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  178. - make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
  179. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  180. - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
  181. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  182. - make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
  183. make_options_feature: "-DWAMR_BUILD_DEBUG_AOT=1"
  184. # MINI_LOADER only on INTERP mode
  185. - make_options_run_mode: $AOT_BUILD_OPTIONS
  186. make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
  187. - make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
  188. make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
  189. - make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
  190. make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
  191. - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
  192. make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
  193. - make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
  194. make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1"
  195. # Fast-JIT and Multi-Tier-JIT mode don't support android
  196. - make_options_run_mode: $FAST_JIT_BUILD_OPTIONS
  197. platform: android
  198. - make_options_run_mode: $MULTI_TIER_JIT_BUILD_OPTIONS
  199. platform: android
  200. # LLVM JIT pre-built binary wasn't compiled by Android NDK
  201. # and isn't available for android
  202. - make_options_run_mode: $LLVM_LAZY_JIT_BUILD_OPTIONS
  203. platform: android
  204. - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS
  205. platform: android
  206. include:
  207. - os: ubuntu-22.04
  208. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  209. steps:
  210. - name: checkout
  211. uses: actions/checkout@v4
  212. # only download llvm cache when needed
  213. - name: Get LLVM libraries
  214. id: retrieve_llvm_libs
  215. if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS')
  216. uses: actions/cache@v4
  217. with:
  218. path: |
  219. ./core/deps/llvm/build/bin
  220. ./core/deps/llvm/build/include
  221. ./core/deps/llvm/build/lib
  222. ./core/deps/llvm/build/libexec
  223. ./core/deps/llvm/build/share
  224. key: ${{ matrix.llvm_cache_key }}
  225. - name: Quit if cache miss
  226. if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
  227. run: echo "::error::can not get prebuilt llvm libraries" && exit 1
  228. - name: Build iwasm for linux
  229. if: matrix.platform == 'linux'
  230. run: |
  231. mkdir build && cd build
  232. cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
  233. cmake --build . --config Release --parallel 4
  234. working-directory: product-mini/platforms/${{ matrix.platform }}
  235. - name: Build iwasm for android
  236. if: matrix.platform == 'android'
  237. run: |
  238. mkdir build && cd build
  239. cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }} \
  240. -DWAMR_BUILD_TARGET=X86_64
  241. cmake --build . --config Release --parallel 4
  242. working-directory: product-mini/platforms/${{ matrix.platform }}
  243. - name: Build and run unit tests
  244. run: |
  245. mkdir build-unittests && cd build-unittests
  246. cmake .. ${{ matrix.make_options_run_mode }} ${{ matrix.make_options_feature }}
  247. cmake --build . --config Release --parallel 4
  248. ctest
  249. working-directory: tests/unit
  250. build_samples_wasm_c_api:
  251. needs:
  252. [
  253. build_iwasm,
  254. build_llvm_libraries_on_ubuntu_2204,
  255. build_wamrc,
  256. ]
  257. runs-on: ${{ matrix.os }}
  258. strategy:
  259. fail-fast: false
  260. matrix:
  261. make_options: [
  262. # Running mode
  263. $AOT_BUILD_OPTIONS,
  264. $CLASSIC_INTERP_BUILD_OPTIONS,
  265. $FAST_INTERP_BUILD_OPTIONS,
  266. $FAST_JIT_BUILD_OPTIONS,
  267. $LLVM_LAZY_JIT_BUILD_OPTIONS,
  268. $LLVM_EAGER_JIT_BUILD_OPTIONS,
  269. $MULTI_TIER_JIT_BUILD_OPTIONS,
  270. ]
  271. os: [ubuntu-22.04]
  272. wasi_sdk_release:
  273. [
  274. "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
  275. ]
  276. wabt_release:
  277. [
  278. "https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz",
  279. ]
  280. include:
  281. - os: ubuntu-22.04
  282. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  283. steps:
  284. - name: checkout
  285. uses: actions/checkout@v4
  286. - name: Get LLVM libraries
  287. id: retrieve_llvm_libs
  288. if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS'))
  289. uses: actions/cache@v4
  290. with:
  291. path: |
  292. ./core/deps/llvm/build/bin
  293. ./core/deps/llvm/build/include
  294. ./core/deps/llvm/build/lib
  295. ./core/deps/llvm/build/libexec
  296. ./core/deps/llvm/build/share
  297. key: ${{ matrix.llvm_cache_key }}
  298. - name: Quit if cache miss
  299. if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) && (steps.retrieve_llvm_libs.outputs.cache-hit != 'true')
  300. run: echo "::error::can not get prebuilt llvm libraries" && exit 1
  301. - name: download and install wabt
  302. run: |
  303. cd /opt
  304. sudo wget ${{ matrix.wabt_release }}
  305. sudo tar -xzf wabt-1.0.31-*.tar.gz
  306. sudo mv wabt-1.0.31 wabt
  307. - name: Build wamrc
  308. if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS'))
  309. run: |
  310. mkdir build && cd build
  311. cmake ..
  312. cmake --build . --config Release --parallel 4
  313. working-directory: wamr-compiler
  314. - name: Build Sample [wasm-c-api]
  315. run: |
  316. VERBOSE=1
  317. cmake -S . -B build ${{ matrix.make_options }}
  318. cmake --build build --config Debug --parallel 4
  319. ctest --test-dir build --output-on-failure
  320. working-directory: samples/wasm-c-api
  321. build_samples_others:
  322. needs:
  323. [
  324. build_iwasm,
  325. build_llvm_libraries_on_ubuntu_2204,
  326. build_wamrc,
  327. ]
  328. runs-on: ${{ matrix.os }}
  329. strategy:
  330. matrix:
  331. os: [ubuntu-22.04]
  332. wasi_sdk_release:
  333. [
  334. "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
  335. ]
  336. wabt_release:
  337. [
  338. "https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz",
  339. ]
  340. include:
  341. - os: ubuntu-22.04
  342. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  343. steps:
  344. - name: checkout
  345. uses: actions/checkout@v4
  346. - name: download and install wasi-sdk
  347. run: |
  348. cd /opt
  349. sudo wget ${{ matrix.wasi_sdk_release }}
  350. sudo tar -xzf wasi-sdk-*.tar.gz
  351. sudo mv wasi-sdk-20.0 wasi-sdk
  352. - name: download and install wabt
  353. run: |
  354. cd /opt
  355. sudo wget ${{ matrix.wabt_release }}
  356. sudo tar -xzf wabt-1.0.31-*.tar.gz
  357. sudo mv wabt-1.0.31 wabt
  358. - name: Get LLVM libraries
  359. id: retrieve_llvm_libs
  360. uses: actions/cache@v4
  361. with:
  362. path: |
  363. ./core/deps/llvm/build/bin
  364. ./core/deps/llvm/build/include
  365. ./core/deps/llvm/build/lib
  366. ./core/deps/llvm/build/libexec
  367. ./core/deps/llvm/build/share
  368. key: ${{ matrix.llvm_cache_key }}
  369. - name: Build wamrc
  370. run: |
  371. mkdir build && cd build
  372. cmake ..
  373. cmake --build . --config Release --parallel 4
  374. working-directory: wamr-compiler
  375. - name: Build Sample [basic]
  376. run: |
  377. cd samples/basic
  378. ./build.sh
  379. ./run.sh
  380. - name: Build Sample [file]
  381. run: |
  382. cd samples/file
  383. mkdir build && cd build
  384. cmake ..
  385. cmake --build . --config Debug --parallel 4
  386. ./src/iwasm -f wasm-app/file.wasm -d .
  387. - name: Build Sample [multi-thread]
  388. run: |
  389. cd samples/multi-thread
  390. mkdir build && cd build
  391. cmake ..
  392. cmake --build . --config Debug --parallel 4
  393. ./iwasm wasm-apps/test.wasm
  394. - name: Build Sample [multi-module]
  395. run: |
  396. cd samples/multi-module
  397. mkdir build && cd build
  398. cmake .. -DWAMR_BUILD_AOT=1
  399. cmake --build . --config Debug --parallel 4
  400. ./multi_module mC.wasm
  401. ./multi_module mC.aot
  402. - name: Build Sample [spawn-thread]
  403. run: |
  404. cd samples/spawn-thread
  405. mkdir build && cd build
  406. cmake ..
  407. cmake --build . --config Debug --parallel 4
  408. ./spawn_thread
  409. - name: Build Sample [ref-types]
  410. run: |
  411. cd samples/ref-types
  412. mkdir build && cd build
  413. cmake ..
  414. cmake --build . --config Debug --parallel 4
  415. ./hello
  416. - name: Build Sample [wasi-threads]
  417. run: |
  418. cd samples/wasi-threads
  419. mkdir build && cd build
  420. cmake ..
  421. cmake --build . --config Debug --parallel 4
  422. ./iwasm wasm-apps/no_pthread.wasm
  423. - name: Build Sample [shared-module]
  424. run: |
  425. cd samples/shared-module
  426. ./build.sh
  427. ./run.sh
  428. - name: Build Sample [terminate]
  429. run: |
  430. cd samples/terminate
  431. ./build.sh
  432. ./run.sh
  433. - name: Build Sample [debug-tools]
  434. run: |
  435. cd samples/debug-tools
  436. mkdir build && cd build
  437. cmake ..
  438. cmake --build . --config Debug --parallel 4
  439. ./iwasm wasm-apps/trap.wasm | grep "#" > call_stack.txt
  440. ./iwasm wasm-apps/trap.aot | grep "#" > call_stack_aot.txt
  441. bash -x ../symbolicate.sh
  442. test:
  443. needs:
  444. [
  445. build_iwasm,
  446. build_llvm_libraries_on_ubuntu_2204,
  447. build_wamrc,
  448. ]
  449. runs-on: ${{ matrix.os }}
  450. strategy:
  451. fail-fast: false
  452. matrix:
  453. os: [ubuntu-22.04]
  454. running_mode:
  455. [
  456. "classic-interp",
  457. "fast-interp",
  458. "jit",
  459. "aot",
  460. "fast-jit",
  461. "multi-tier-jit",
  462. ]
  463. test_option:
  464. [
  465. $DEFAULT_TEST_OPTIONS,
  466. $MULTI_MODULES_TEST_OPTIONS,
  467. $SIMD_TEST_OPTIONS,
  468. $THREADS_TEST_OPTIONS,
  469. $WASI_TEST_OPTIONS,
  470. $GC_TEST_OPTIONS,
  471. ]
  472. wasi_sdk_release:
  473. [
  474. "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz",
  475. ]
  476. include:
  477. - os: ubuntu-22.04
  478. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  479. ubuntu_version: "22.04"
  480. - os: ubuntu-22.04
  481. llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}
  482. running_mode: aot
  483. test_option: $WAMR_COMPILER_TEST_OPTIONS
  484. exclude:
  485. # uncompatiable modes and features
  486. # classic-interp and fast-interp don't support simd
  487. - running_mode: "classic-interp"
  488. test_option: $SIMD_TEST_OPTIONS
  489. - running_mode: "fast-interp"
  490. test_option: $SIMD_TEST_OPTIONS
  491. # llvm jit doesn't support multi module
  492. - running_mode: "jit"
  493. test_option: $MULTI_MODULES_TEST_OPTIONS
  494. # fast-jit doesn't support multi module, simd
  495. - running_mode: "fast-jit"
  496. test_option: $MULTI_MODULES_TEST_OPTIONS
  497. - running_mode: "fast-jit"
  498. test_option: $SIMD_TEST_OPTIONS
  499. # multi-tier-jit doesn't support multi module, simd
  500. - running_mode: "multi-tier-jit"
  501. test_option: $MULTI_MODULES_TEST_OPTIONS
  502. - running_mode: "multi-tier-jit"
  503. test_option: $SIMD_TEST_OPTIONS
  504. # fast-jit and multi-tier-jit don't support GC
  505. - running_mode: "fast-jit"
  506. test_option: $GC_TEST_OPTIONS
  507. - running_mode: "multi-tier-jit"
  508. test_option: $GC_TEST_OPTIONS
  509. steps:
  510. - name: checkout
  511. uses: actions/checkout@v4
  512. - name: Set-up OCaml
  513. uses: ocaml/setup-ocaml@v2
  514. if: matrix.test_option == '$GC_TEST_OPTIONS'
  515. with:
  516. ocaml-compiler: 4.13
  517. - name: Set-up Ocamlbuild
  518. if: matrix.test_option == '$GC_TEST_OPTIONS'
  519. run: opam install ocamlbuild dune
  520. - name: download and install wasi-sdk
  521. if: matrix.test_option == '$WASI_TEST_OPTIONS'
  522. run: |
  523. cd /opt
  524. sudo wget ${{ matrix.wasi_sdk_release }}
  525. sudo tar -xzf wasi-sdk-*.tar.gz
  526. sudo mv wasi-sdk-20.0 wasi-sdk
  527. # It is a temporary solution until new wasi-sdk that includes bug fixes is released
  528. - name: build wasi-libc from source
  529. if: matrix.test_option == '$WASI_TEST_OPTIONS'
  530. run: |
  531. git clone https://github.com/WebAssembly/wasi-libc
  532. cd wasi-libc
  533. make -j AR=/opt/wasi-sdk/bin/llvm-ar NM=/opt/wasi-sdk/bin/llvm-nm CC=/opt/wasi-sdk/bin/clang THREAD_MODEL=posix
  534. echo "SYSROOT_PATH=$PWD/sysroot" >> $GITHUB_ENV
  535. - name: set env variable(if llvm are used)
  536. if: matrix.running_mode == 'aot' || matrix.running_mode == 'jit' || matrix.running_mode == 'multi-tier-jit'
  537. run: echo "USE_LLVM=true" >> $GITHUB_ENV
  538. - name: set env variable(if x86_32 test needed)
  539. if: >
  540. ((matrix.test_option == '$DEFAULT_TEST_OPTIONS' || matrix.test_option == '$THREADS_TEST_OPTIONS'
  541. || matrix.test_option == '$WASI_TEST_OPTIONS' || matrix.test_option == '$GC_TEST_OPTIONS')
  542. && matrix.running_mode != 'fast-jit' && matrix.running_mode != 'jit' && matrix.running_mode != 'multi-tier-jit')
  543. run: echo "TEST_ON_X86_32=true" >> $GITHUB_ENV
  544. #only download llvm libraries in jit and aot mode
  545. - name: Get LLVM libraries
  546. if: env.USE_LLVM == 'true'
  547. id: retrieve_llvm_libs
  548. uses: actions/cache@v4
  549. with:
  550. path: |
  551. ./core/deps/llvm/build/bin
  552. ./core/deps/llvm/build/include
  553. ./core/deps/llvm/build/lib
  554. ./core/deps/llvm/build/libexec
  555. ./core/deps/llvm/build/share
  556. key: ${{ matrix.llvm_cache_key }}
  557. - name: Quit if cache miss
  558. if: env.USE_LLVM == 'true' && steps.retrieve_llvm_libs.outputs.cache-hit != 'true'
  559. run: echo "::error::can not get prebuilt llvm libraries" && exit 1
  560. - name: install jq JSON processor
  561. if: matrix.running_mode == 'aot' && matrix.test_option == '$WASI_TEST_OPTIONS'
  562. run: sudo apt-get update && sudo apt install -y jq
  563. - name: Build WASI thread tests
  564. if: matrix.test_option == '$WASI_TEST_OPTIONS'
  565. run: bash build.sh --sysroot "$SYSROOT_PATH"
  566. working-directory: ./core/iwasm/libraries/lib-wasi-threads/test/
  567. - name: build socket api tests
  568. if: matrix.test_option == '$WASI_TEST_OPTIONS'
  569. run: bash build.sh
  570. working-directory: ./core/iwasm/libraries/lib-socket/test/
  571. - name: run tests
  572. timeout-minutes: 30
  573. if: matrix.test_option != '$GC_TEST_OPTIONS'
  574. run: ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
  575. working-directory: ./tests/wamr-test-suites
  576. - name: run gc tests
  577. timeout-minutes: 20
  578. if: matrix.test_option == '$GC_TEST_OPTIONS'
  579. run: |
  580. eval $(opam env)
  581. ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
  582. working-directory: ./tests/wamr-test-suites
  583. #only install x32 support libraries when to run x86_32 cases
  584. - name: install x32 support libraries
  585. if: env.TEST_ON_X86_32 == 'true'
  586. run:
  587. # Add another apt repository as some packages cannot
  588. # be downloaded with the github default repository
  589. sudo curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc &&
  590. sudo apt-add-repository https://packages.microsoft.com/ubuntu/${{ matrix.ubuntu_version }}/prod &&
  591. sudo apt-get update &&
  592. sudo apt install -y g++-multilib lib32gcc-9-dev
  593. - name: run tests x86_32
  594. timeout-minutes: 30
  595. if: env.TEST_ON_X86_32 == 'true' && matrix.test_option != '$GC_TEST_OPTIONS'
  596. run: ./test_wamr.sh ${{ env.X86_32_TARGET_TEST_OPTIONS }} ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
  597. working-directory: ./tests/wamr-test-suites
  598. - name: run gc tests x86_32
  599. timeout-minutes: 20
  600. if: env.TEST_ON_X86_32 == 'true' && matrix.test_option == '$GC_TEST_OPTIONS'
  601. run: |
  602. eval $(opam env)
  603. ./test_wamr.sh ${{ env.X86_32_TARGET_TEST_OPTIONS }} ${{ matrix.test_option }} -t ${{ matrix.running_mode }}
  604. working-directory: ./tests/wamr-test-suites
  605. test-wamr-ide:
  606. needs:
  607. [
  608. build_iwasm
  609. ]
  610. runs-on: ubuntu-22.04
  611. env:
  612. PYTHON_VERSION: '3.10'
  613. PYTHON_UBUNTU_STANDALONE_BUILD: https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz
  614. steps:
  615. - name: checkout
  616. uses: actions/checkout@v4
  617. - name: install dependencies
  618. run: |
  619. rustup target add wasm32-wasi
  620. sudo apt update && sudo apt-get install -y lld ninja-build
  621. npm install
  622. working-directory: test-tools/wamr-ide/VSCode-Extension
  623. - name: code style check
  624. run: |
  625. npm install --save-dev prettier
  626. npm run prettier-format-check
  627. working-directory: test-tools/wamr-ide/VSCode-Extension
  628. - name: build iwasm with source debugging feature
  629. run: |
  630. mkdir build
  631. cd build
  632. cmake .. -DWAMR_BUILD_DEBUG_INTERP=1
  633. make
  634. working-directory: product-mini/platforms/linux
  635. - name: Cache LLDB
  636. id: cache-lldb
  637. uses: actions/cache@v4
  638. env:
  639. cache-name: cache-lldb-vscode
  640. with:
  641. path: test-tools/wamr-ide/VSCode-Extension/resource/debug/linux
  642. key: ${{ env.cache-name }}-${{ hashFiles('build-scripts/lldb_wasm.patch') }}-${{ env.PYTHON_UBUNTU_STANDALONE_BUILD }}
  643. - if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
  644. name: get stand-alone python ubuntu
  645. run: |
  646. wget ${{ env.PYTHON_UBUNTU_STANDALONE_BUILD }} -O python.tar.gz
  647. tar -xvf python.tar.gz
  648. working-directory: core/deps
  649. - if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
  650. name: download llvm
  651. run: |
  652. wget https://github.com/llvm/llvm-project/archive/1f27fe6128769f00197925c3b8f6abb9d0e5cd2e.zip
  653. unzip -q 1f27fe6128769f00197925c3b8f6abb9d0e5cd2e.zip
  654. mv llvm-project-1f27fe6128769f00197925c3b8f6abb9d0e5cd2e llvm-project
  655. working-directory: core/deps
  656. - if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
  657. name: apply wamr patch
  658. run: |
  659. git init
  660. git config user.email "action@github.com"
  661. git config user.name "github action"
  662. git apply ../../../build-scripts/lldb_wasm.patch
  663. working-directory: core/deps/llvm-project
  664. - if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
  665. name: build lldb ubuntu
  666. run: |
  667. echo "start to build lldb..."
  668. mkdir -p wamr-lldb
  669. cmake -S ./llvm -B build \
  670. -G Ninja \
  671. -DCMAKE_INSTALL_PREFIX=../wamr-lldb \
  672. -DCMAKE_BUILD_TYPE:STRING="Release" \
  673. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
  674. -DLLVM_ENABLE_PROJECTS="clang;lldb" \
  675. -DLLVM_TARGETS_TO_BUILD:STRING="X86;WebAssembly" \
  676. -DLLVM_BUILD_BENCHMARKS:BOOL=OFF \
  677. -DLLVM_BUILD_DOCS:BOOL=OFF \
  678. -DLLVM_BUILD_EXAMPLES:BOOL=OFF \
  679. -DLLVM_BUILD_LLVM_DYLIB:BOOL=OFF \
  680. -DLLVM_BUILD_TESTS:BOOL=OFF \
  681. -DLLVM_INCLUDE_BENCHMARKS:BOOL=OFF \
  682. -DLLVM_INCLUDE_DOCS:BOOL=OFF \
  683. -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF \
  684. -DLLVM_INCLUDE_TESTS:BOOL=OFF \
  685. -DLLVM_ENABLE_BINDINGS:BOOL=OFF \
  686. -DLLVM_ENABLE_LIBXML2:BOOL=ON \
  687. -DLLVM_ENABLE_LLD:BOOL=ON \
  688. -DLLDB_ENABLE_PYTHON:BOOL=ON \
  689. -DLLDB_EMBED_PYTHON_HOME=ON \
  690. -DLLDB_PYTHON_HOME=.. \
  691. -DLLDB_PYTHON_RELATIVE_PATH=lib/lldb-python \
  692. -DPython3_EXECUTABLE="$(pwd)/../python/bin/python${{ env.PYTHON_VERSION }}"
  693. cmake --build build --target lldb install --parallel $(nproc)
  694. working-directory: core/deps/llvm-project
  695. - if: ${{ steps.cache-lldb.outputs.cache-hit != 'true' }}
  696. name: copy lldb to extension folder
  697. run: |
  698. mkdir -p bin
  699. mkdir -p lib
  700. cp ../../../../../../core/deps/llvm-project/lldb/tools/lldb-vscode/package.json ./
  701. cp -r ../../../../../../core/deps/llvm-project/lldb/tools/lldb-vscode/syntaxes/ ./
  702. cp ../../../../../../core/deps/llvm-project/build/bin/lldb* bin
  703. cp ../../../../../../core/deps/llvm-project/build/lib/liblldb*.so lib
  704. cp ../../../../../../core/deps/llvm-project/build/lib/liblldb*.so.* lib
  705. cp -R ../../../../../../core/deps/llvm-project/build/lib/lldb-python lib
  706. cp -R ../../../../../../core/deps/python/lib/python* lib
  707. cp ../../../../../../core/deps/python/lib/libpython${{ env.PYTHON_VERSION }}.so.1.0 lib
  708. working-directory: test-tools/wamr-ide/VSCode-Extension/resource/debug/linux
  709. - name: run tests
  710. timeout-minutes: 5
  711. run: xvfb-run npm run test
  712. working-directory: test-tools/wamr-ide/VSCode-Extension