From b34d9f6867850d309b4e8c407c8f3b39c514656f Mon Sep 17 00:00:00 2001 From: Sunghoon <35605090+hanbitmyths@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:49:49 -0700 Subject: [PATCH] [js/wasm] Add WebAssembly static library build into web CI pipeline (#10959) * add webassembly static library build into ci * add webassembly static library build into ci * skip publishing on static lib * fix type --- cmake/onnxruntime_webassembly.cmake | 50 ++++++++++--------- .../azure-pipelines/templates/web-ci.yml | 20 +++++++- .../azure-pipelines/templates/win-wasm-ci.yml | 28 +++++++---- .../azure-pipelines/web-ci-pipeline.yml | 1 + 4 files changed, 62 insertions(+), 37 deletions(-) diff --git a/cmake/onnxruntime_webassembly.cmake b/cmake/onnxruntime_webassembly.cmake index cb9b3c7029..d4d54801e5 100644 --- a/cmake/onnxruntime_webassembly.cmake +++ b/cmake/onnxruntime_webassembly.cmake @@ -110,35 +110,37 @@ if (onnxruntime_BUILD_WEBASSEMBLY_STATIC_LIB) re2::re2 ) - file(GLOB_RECURSE onnxruntime_webassembly_test_src CONFIGURE_DEPENDS - "${ONNXRUNTIME_ROOT}/test/wasm/test_main.cc" - "${ONNXRUNTIME_ROOT}/test/wasm/test_inference.cc" - ) + if (onnxruntime_BUILD_UNIT_TESTS) + file(GLOB_RECURSE onnxruntime_webassembly_test_src CONFIGURE_DEPENDS + "${ONNXRUNTIME_ROOT}/test/wasm/test_main.cc" + "${ONNXRUNTIME_ROOT}/test/wasm/test_inference.cc" + ) - source_group(TREE ${REPO_ROOT} FILES ${onnxruntime_webassembly_test_src}) + source_group(TREE ${REPO_ROOT} FILES ${onnxruntime_webassembly_test_src}) - add_executable(onnxruntime_webassembly_test - ${onnxruntime_webassembly_test_src} - ) + add_executable(onnxruntime_webassembly_test + ${onnxruntime_webassembly_test_src} + ) - set_target_properties(onnxruntime_webassembly_test PROPERTIES LINK_FLAGS - "-s ALLOW_MEMORY_GROWTH=1 -s \"EXPORTED_RUNTIME_METHODS=['FS']\" --preload-file ${CMAKE_CURRENT_BINARY_DIR}/testdata@/testdata -s EXIT_RUNTIME=1" - ) + set_target_properties(onnxruntime_webassembly_test PROPERTIES LINK_FLAGS + "-s ALLOW_MEMORY_GROWTH=1 -s \"EXPORTED_RUNTIME_METHODS=['FS']\" --preload-file ${CMAKE_CURRENT_BINARY_DIR}/testdata@/testdata -s EXIT_RUNTIME=1" + ) - target_link_libraries(onnxruntime_webassembly_test PUBLIC - onnxruntime_webassembly - GTest::gtest - ) + target_link_libraries(onnxruntime_webassembly_test PUBLIC + onnxruntime_webassembly + GTest::gtest + ) - find_program(NODE_EXECUTABLE node required) - if (NOT NODE_EXECUTABLE) - message(FATAL_ERROR "Node is required for a test") + find_program(NODE_EXECUTABLE node required) + if (NOT NODE_EXECUTABLE) + message(FATAL_ERROR "Node is required for a test") + endif() + + add_test(NAME onnxruntime_webassembly_test + COMMAND ${NODE_EXECUTABLE} onnxruntime_webassembly_test.js + WORKING_DIRECTORY $ + ) endif() - - add_test(NAME onnxruntime_webassembly_test - COMMAND ${NODE_EXECUTABLE} onnxruntime_webassembly_test.js - WORKING_DIRECTORY $ - ) else() file(GLOB_RECURSE onnxruntime_webassembly_src CONFIGURE_DEPENDS "${ONNXRUNTIME_ROOT}/wasm/api.cc" @@ -215,4 +217,4 @@ else() set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm") endif() endif() -endif() \ No newline at end of file +endif() diff --git a/tools/ci_build/github/azure-pipelines/templates/web-ci.yml b/tools/ci_build/github/azure-pipelines/templates/web-ci.yml index cba20697c6..d3d4e27daf 100644 --- a/tools/ci_build/github/azure-pipelines/templates/web-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/web-ci.yml @@ -15,6 +15,10 @@ parameters: displayName: 'Package name' type: string default: 'NPM_packages' +- name: BuildStaticLib + displayName: 'Build static library' + type: boolean + default: false stages: - stage: Extract_commit @@ -70,6 +74,18 @@ stages: ExtraBuildArgs: '--skip_tests --disable_wasm_exception_catching --disable_rtti $(ExtraBuildArgs)' PoolName: ${{ parameters.PoolName }} +- ${{ if eq(parameters.BuildStaticLib, 'true') }}: + - stage: Build_wasm_Release_static_library + dependsOn: Extract_commit + jobs: + - template: win-wasm-ci.yml + parameters: + CommitOverride: true + BuildConfig: 'Release' + ExtraBuildArgs: '$(ExtraBuildArgs)' + PoolName: ${{ parameters.PoolName }} + SkipPublish: true + - stage: Build_web_Release dependsOn: Build_wasm_Release jobs: @@ -81,7 +97,7 @@ stages: PoolName: ${{ parameters.PoolName }} PackageName: ${{ parameters.PackageName }} -- ${{ if ne(parameters.IsReleasePipeline, 'true') }}: +- ${{ if ne(parameters.IsReleasePipeline, true) }}: - stage: Test_web_BrowserStack dependsOn: Build_wasm_Release jobs: @@ -89,7 +105,7 @@ stages: parameters: CommitOverride: true -- ${{ if ne(parameters.IsReleasePipeline, 'true') }}: +- ${{ if ne(parameters.IsReleasePipeline, true) }}: - stage: Test_web_MultiBrowsers dependsOn: Build_wasm_Release jobs: diff --git a/tools/ci_build/github/azure-pipelines/templates/win-wasm-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-wasm-ci.yml index 1dff1b7cde..235494f973 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-wasm-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-wasm-ci.yml @@ -15,6 +15,10 @@ parameters: type: string default: 'Win-CPU-2019' +- name: SkipPublish + type: boolean + default: false + jobs: - job: build_WASM pool: ${{ parameters.PoolName }} @@ -89,17 +93,19 @@ jobs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: '$(CommonBuildArgs) --build_dir $(Build.BinariesDirectory)\wasm_simd --path_to_protoc_exe $(Build.BinariesDirectory)\wasm\host_protoc\Release\protoc.exe --enable_wasm_simd' workingDirectory: '$(Build.BinariesDirectory)' - - script: | - copy $(Build.BinariesDirectory)\wasm\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) - copy $(Build.BinariesDirectory)\wasm_threads\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) - copy $(Build.BinariesDirectory)\wasm_simd_threads\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) - copy $(Build.BinariesDirectory)\wasm_simd\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) - displayName: 'Create Artifacts' - - task: PublishPipelineArtifact@0 - displayName: 'Publish Pipeline Artifact' - inputs: - artifactName: '${{ parameters.BuildConfig }}_wasm' - targetPath: '$(Build.ArtifactStagingDirectory)' + - ${{ if eq(parameters.SkipPublish, false) }}: + - script: | + copy $(Build.BinariesDirectory)\wasm\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) + copy $(Build.BinariesDirectory)\wasm_threads\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) + copy $(Build.BinariesDirectory)\wasm_simd_threads\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) + copy $(Build.BinariesDirectory)\wasm_simd\${{ parameters.BuildConfig }}\ort-wasm*.* $(Build.ArtifactStagingDirectory) + displayName: 'Create Artifacts' + - ${{ if eq(parameters.SkipPublish, false) }}: + - task: PublishPipelineArtifact@0 + displayName: 'Publish Pipeline Artifact' + inputs: + artifactName: '${{ parameters.BuildConfig }}_wasm' + targetPath: '$(Build.ArtifactStagingDirectory)' - task: PublishTestResults@2 displayName: 'Publish unit test results' inputs: diff --git a/tools/ci_build/github/azure-pipelines/web-ci-pipeline.yml b/tools/ci_build/github/azure-pipelines/web-ci-pipeline.yml index faf5efa01a..9d6cd4a26a 100644 --- a/tools/ci_build/github/azure-pipelines/web-ci-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/web-ci-pipeline.yml @@ -29,3 +29,4 @@ stages: NpmPackagingMode: ${{ variables.NpmPackagingMode }} IsReleasePipeline: false PoolName: 'Win-CPU-2019' + BuildStaticLib: true