Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion tools/ci_build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -1053,10 +1053,12 @@ def generate_vcpkg_install_options(build_dir, args):
folder_name_parts = []
if args.enable_address_sanitizer:
folder_name_parts.append("asan")
if args.use_binskim_compliant_compile_flags and not args.android:
if args.use_binskim_compliant_compile_flags and not args.android and not args.build_wasm:
folder_name_parts.append("binskim")
if args.disable_rtti:
folder_name_parts.append("nortti")
if args.build_wasm and not args.disable_wasm_exception_catching and not args.disable_exceptions:
folder_name_parts.append("exception_catching")
if args.disable_exceptions:
folder_name_parts.append("noexception")
if len(folder_name_parts) == 0:
Expand Down
123 changes: 64 additions & 59 deletions tools/python/util/vcpkg_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,9 +305,6 @@ def generate_triplet_for_posix_platform(

ldflags.append("-g")

if not enable_rtti:
cflags.append("-DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0")

cxxflags = cflags.copy()
if os_name == "osx":
cxxflags += ["-fvisibility=hidden", "-fvisibility-inlines-hidden"]
Expand Down Expand Up @@ -367,66 +364,74 @@ def generate_vcpkg_triplets_for_emscripten(build_dir: str, emscripten_root: str)
build_dir (str): The directory to save the generated triplet files.
emscripten_root (str): The root path of Emscripten.
"""
for enable_rtti in [True, False]:
for enable_asan in [True, False]:
for target_abi in ["wasm32", "wasm64"]:
folder_name_parts = []
if enable_asan:
folder_name_parts.append("asan")
folder_name = "default" if len(folder_name_parts) == 0 else "_".join(folder_name_parts)
os_name = "emscripten"
folder_name_parts = []
if enable_asan:
folder_name_parts.append("asan")
if not enable_rtti:
folder_name_parts.append("nortti")
folder_name = "default" if len(folder_name_parts) == 0 else "_".join(folder_name_parts)
file_name = f"{target_abi}-{os_name}.cmake"
dest_path = Path(build_dir) / folder_name / file_name
os.makedirs(dest_path.parent, exist_ok=True)
with open(dest_path, "w", encoding="utf-8") as f:
add_copyright_header(f)
f.write(r"""
for enable_wasm_exception_catching in [True, False]:
for enable_rtti in [True, False]:
for enable_asan in [True, False]:
for target_abi in ["wasm32", "wasm64"]:
folder_name_parts = []
if enable_asan:
folder_name_parts.append("asan")
folder_name = "default" if len(folder_name_parts) == 0 else "_".join(folder_name_parts)
os_name = "emscripten"
folder_name_parts = []
if enable_asan:
folder_name_parts.append("asan")
if not enable_rtti:
folder_name_parts.append("nortti")
if enable_wasm_exception_catching:
folder_name_parts.append("exception_catching")
Comment thread
snnn marked this conversation as resolved.
Outdated
folder_name = "default" if len(folder_name_parts) == 0 else "_".join(folder_name_parts)
file_name = f"{target_abi}-{os_name}.cmake"
dest_path = Path(build_dir) / folder_name / file_name
os.makedirs(dest_path.parent, exist_ok=True)
with open(dest_path, "w", encoding="utf-8") as f:
add_copyright_header(f)
f.write(r"""
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Emscripten)
""")
f.write(f"set(VCPKG_TARGET_ARCHITECTURE {target_abi})\n")
emscripten_root_path_cmake_path = emscripten_root.replace("\\", "/")
f.write(f'set(EMSCRIPTEN_ROOT_PATH "{emscripten_root_path_cmake_path}")\n')
vcpkg_toolchain_file = (Path(build_dir) / "emsdk_vcpkg_toolchain.cmake").absolute()
vcpkg_toolchain_file_cmake_path = str(vcpkg_toolchain_file).replace("\\", "/")
f.write(f'set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "{vcpkg_toolchain_file_cmake_path}")\n')
cflags_release = ["-DNDEBUG", "-O3", "-pthread"]
ldflags = []
cflags = [
"-ffunction-sections",
"-fdata-sections",
"-msimd128",
"-pthread",
"-Wno-pthreads-mem-growth",
"-sDISABLE_EXCEPTION_CATCHING=0",
]
if enable_asan:
cflags += ["-fsanitize=address"]
ldflags += ["-fsanitize=address"]
if target_abi == "wasm64":
cflags.append("-sMEMORY64")
ldflags.append("-sMEMORY64")
if len(ldflags) >= 1:
f.write('set(VCPKG_LINKER_FLAGS "{}")\n'.format(" ".join(ldflags)))
cxxflags = cflags.copy()
if cflags:
f.write(f'set(VCPKG_C_FLAGS "{" ".join(cflags)}")\n')
if cxxflags:
f.write(f'set(VCPKG_CXX_FLAGS "{" ".join(cxxflags)}")\n')
if cflags_release:
cflags_release += cflags
f.write(f'set(VCPKG_C_FLAGS_RELEASE "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_CXX_FLAGS_RELEASE "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_C_FLAGS_RELWITHDEBINFO "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_CXX_FLAGS_RELWITHDEBINFO "{" ".join(cflags_release)}")\n')
add_port_configs(f, True, True)
f.write(f"set(VCPKG_TARGET_ARCHITECTURE {target_abi})\n")
emscripten_root_path_cmake_path = emscripten_root.replace("\\", "/")
f.write(f'set(EMSCRIPTEN_ROOT_PATH "{emscripten_root_path_cmake_path}")\n')
vcpkg_toolchain_file = (Path(build_dir) / "emsdk_vcpkg_toolchain.cmake").absolute()
vcpkg_toolchain_file_cmake_path = str(vcpkg_toolchain_file).replace("\\", "/")
f.write(f'set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "{vcpkg_toolchain_file_cmake_path}")\n')
cflags_release = ["-DNDEBUG", "-O3", "-pthread"]
ldflags = []
cflags = [
"-ffunction-sections",
"-fdata-sections",
"-msimd128",
"-pthread",
"-Wno-pthreads-mem-growth",
]
if enable_wasm_exception_catching:
cflags.append("-sDISABLE_EXCEPTION_CATCHING=0")
if enable_asan:
cflags += ["-fsanitize=address"]
ldflags += ["-fsanitize=address"]
if target_abi == "wasm64":
cflags.append("-sMEMORY64")
ldflags.append("-sMEMORY64")
if len(ldflags) >= 1:
f.write('set(VCPKG_LINKER_FLAGS "{}")\n'.format(" ".join(ldflags)))
if not enable_rtti:
cflags.append("-DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0")
cxxflags = cflags.copy()
if not enable_rtti:
cxxflags.append("-fno-rtti")
if cflags:
f.write(f'set(VCPKG_C_FLAGS "{" ".join(cflags)}")\n')
if cxxflags:
f.write(f'set(VCPKG_CXX_FLAGS "{" ".join(cxxflags)}")\n')
if cflags_release:
cflags_release += cflags
f.write(f'set(VCPKG_C_FLAGS_RELEASE "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_CXX_FLAGS_RELEASE "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_C_FLAGS_RELWITHDEBINFO "{" ".join(cflags_release)}")\n')
f.write(f'set(VCPKG_CXX_FLAGS_RELWITHDEBINFO "{" ".join(cflags_release)}")\n')
add_port_configs(f, True, True)


def generate_windows_triplets(build_dir: str) -> None:
Expand Down