From c2cebbe9633b55601c0d42e70b69d6c04cfd6d59 Mon Sep 17 00:00:00 2001 From: Changming Sun Date: Fri, 7 Feb 2025 07:07:45 +0000 Subject: [PATCH] update --- .../default/wasm32-emscripten.cmake | 32 +++++++++++++++++++ .../default/wasm64-emscripten.cmake | 32 +++++++++++++++++++ tools/ci_build/build.py | 10 +++--- 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 cmake/vcpkg-triplets/default/wasm32-emscripten.cmake create mode 100644 cmake/vcpkg-triplets/default/wasm64-emscripten.cmake diff --git a/cmake/vcpkg-triplets/default/wasm32-emscripten.cmake b/cmake/vcpkg-triplets/default/wasm32-emscripten.cmake new file mode 100644 index 0000000000..f47509014a --- /dev/null +++ b/cmake/vcpkg-triplets/default/wasm32-emscripten.cmake @@ -0,0 +1,32 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED EMSCRIPTEN_ROOT EMSDK PATH) + +if(NOT DEFINED ENV{EMSCRIPTEN_ROOT}) + find_path(EMSCRIPTEN_ROOT "emcc") +else() + set(EMSCRIPTEN_ROOT "$ENV{EMSCRIPTEN_ROOT}") +endif() + +if(NOT EMSCRIPTEN_ROOT) + if(NOT DEFINED ENV{EMSDK}) + message(FATAL_ERROR "The emcc compiler not found in PATH") + endif() + set(EMSCRIPTEN_ROOT "$ENV{EMSDK}/upstream/emscripten") +endif() + +if(NOT EXISTS "${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake") + message(FATAL_ERROR "Emscripten.cmake toolchain file not found") +endif() + +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Emscripten) +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake") +set(VCPKG_TARGET_ARCHITECTURE wasm32) +set(VCPKG_C_FLAGS "-ffunction-sections -fdata-sections -msimd128 -pthread -Wno-pthreads-mem-growth") +set(VCPKG_CXX_FLAGS "/MP /DWIN32 /D_WINDOWS /DWINAPI_FAMILY=100 /DWINVER=0x0A00 /D_WIN32_WINNT=0x0A00 /DNTDDI_VERSION=0x0A000000 /Zc:__cplusplus /GR- /we4541") +set(VCPKG_C_FLAGS_RELEASE "-DNDEBUG -O3") +set(VCPKG_CXX_FLAGS_RELEASE "-DNDEBUG -O3") +set(VCPKG_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O3") +set(VCPKG_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O3") diff --git a/cmake/vcpkg-triplets/default/wasm64-emscripten.cmake b/cmake/vcpkg-triplets/default/wasm64-emscripten.cmake new file mode 100644 index 0000000000..729de4c231 --- /dev/null +++ b/cmake/vcpkg-triplets/default/wasm64-emscripten.cmake @@ -0,0 +1,32 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED EMSCRIPTEN_ROOT EMSDK PATH) + +if(NOT DEFINED ENV{EMSCRIPTEN_ROOT}) + find_path(EMSCRIPTEN_ROOT "emcc") +else() + set(EMSCRIPTEN_ROOT "$ENV{EMSCRIPTEN_ROOT}") +endif() + +if(NOT EMSCRIPTEN_ROOT) + if(NOT DEFINED ENV{EMSDK}) + message(FATAL_ERROR "The emcc compiler not found in PATH") + endif() + set(EMSCRIPTEN_ROOT "$ENV{EMSDK}/upstream/emscripten") +endif() + +if(NOT EXISTS "${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake") + message(FATAL_ERROR "Emscripten.cmake toolchain file not found") +endif() + +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE static) +set(VCPKG_CMAKE_SYSTEM_NAME Emscripten) +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake") +set(VCPKG_TARGET_ARCHITECTURE wasm64) +set(VCPKG_C_FLAGS "-ffunction-sections -fdata-sections -msimd128 -pthread -Wno-pthreads-mem-growth -sMEMORY64") +set(VCPKG_CXX_FLAGS "/MP /DWIN32 /D_WINDOWS /DWINAPI_FAMILY=100 /DWINVER=0x0A00 /D_WIN32_WINNT=0x0A00 /DNTDDI_VERSION=0x0A000000 /Zc:__cplusplus /GR- /we4541") +set(VCPKG_C_FLAGS_RELEASE "-DNDEBUG -O3") +set(VCPKG_CXX_FLAGS_RELEASE "-DNDEBUG -O3") +set(VCPKG_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O3") +set(VCPKG_C_FLAGS_RELWITHDEBINFO "-DNDEBUG -O3") diff --git a/tools/ci_build/build.py b/tools/ci_build/build.py index 0e9f03ce88..bb3c7492e7 100644 --- a/tools/ci_build/build.py +++ b/tools/ci_build/build.py @@ -1105,10 +1105,7 @@ def generate_build_tree( cmake_extra_args, ): log.info("Generating CMake build tree") - if args.build_wasm: - # No custom triplet for the wasm builds yet - args.use_vcpkg = False - elif args.minimal_build is not None: + if args.minimal_build is not None: # Minimal build uses a custom ONNX cmake file. Don't know how to deal with it yet args.use_vcpkg = False elif args.ios or args.macos == "Catalyst": @@ -1272,7 +1269,10 @@ def generate_build_tree( # Choose the cmake triplet triplet = None if args.build_wasm: - triplet = "wasm32-emscripten" + if args.enable_wasm_memory64: + triplet = "wasm64-emscripten" + else: + triplet = "wasm32-emscripten" elif args.android: if args.android_abi == "armeabi-v7a": triplet = "arm-neon-android"