diff --git a/tools/ci_build/build.py b/tools/ci_build/build.py index fe20351b0e8bb..db7dbed23a2d2 100644 --- a/tools/ci_build/build.py +++ b/tools/ci_build/build.py @@ -35,7 +35,8 @@ def version_to_tuple(version: str) -> tuple: import util.android as android # noqa: E402 from util import ( # noqa: E402 generate_android_triplets, - generate_posix_triplets, + generate_linux_triplets, + generate_macos_triplets, generate_vcpkg_triplets_for_emscripten, generate_windows_triplets, get_logger, @@ -1115,7 +1116,6 @@ def generate_build_tree( cmake_extra_args, ): log.info("Generating CMake build tree") - cmake_dir = os.path.join(source_dir, "cmake") cmake_args = [cmake_path, cmake_dir] if not use_dev_mode(args): @@ -1330,8 +1330,16 @@ def generate_build_tree( generate_android_triplets(build_dir, args.android_cpp_shared, args.android_api) elif is_windows(): generate_windows_triplets(build_dir) + elif is_macOS(): + osx_target = args.apple_deploy_target + if args.apple_deploy_target is None: + osx_target = os.environ.get("MACOSX_DEPLOYMENT_TARGET") + if osx_target is not None: + log.info(f"Setting VCPKG_OSX_DEPLOYMENT_TARGET to {osx_target}") + generate_macos_triplets(build_dir, osx_target) else: - generate_posix_triplets(build_dir) + # Linux, *BSD, AIX or other platforms + generate_linux_triplets(build_dir) add_default_definition(cmake_extra_defines, "CMAKE_TOOLCHAIN_FILE", str(vcpkg_toolchain_path)) vcpkg_install_options = generate_vcpkg_install_options(build_dir, args) diff --git a/tools/ci_build/github/azure-pipelines/stages/py-cpu-packaging-stage.yml b/tools/ci_build/github/azure-pipelines/stages/py-cpu-packaging-stage.yml index 4ff539df9f914..42d6e4371ccce 100644 --- a/tools/ci_build/github/azure-pipelines/stages/py-cpu-packaging-stage.yml +++ b/tools/ci_build/github/azure-pipelines/stages/py-cpu-packaging-stage.yml @@ -123,7 +123,7 @@ stages: --skip_submodule_sync --cmake_generator "Visual Studio 17 2022" --enable_pybind - --enable_onnx_tests + --enable_onnx_tests --use_vcpkg --use_vcpkg_ms_internal_asset_cache ${{ parameters.build_py_parameters }} --parallel --use_binskim_compliant_compile_flags --update --build $(TelemetryOption) diff --git a/tools/ci_build/github/azure-pipelines/templates/windowsai-steps.yml b/tools/ci_build/github/azure-pipelines/templates/windowsai-steps.yml index fb3ebdc760a7b..355a575307f0b 100644 --- a/tools/ci_build/github/azure-pipelines/templates/windowsai-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/windowsai-steps.yml @@ -89,7 +89,7 @@ jobs: # must call vsdevcmd first to add cmake to PATH - script: | python --version - python "$(Build.SourcesDirectory)\tools\ci_build\build.py" --build_dir $(Build.BinariesDirectory) --parallel --use_binskim_compliant_compile_flags --build_shared_lib --enable_onnx_tests --ms_experimental --use_dml --use_winml --cmake_generator "Visual Studio 17 2022" --update --config RelWithDebInfo --enable_lto --use_telemetry --disable_rtti --enable_wcos --windows_sdk_version "10.0.22621.0" $(BuildFlags) --cmake_extra_defines "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO=/PROFILE" "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO=/PROFILE" + python "$(Build.SourcesDirectory)\tools\ci_build\build.py" --build_dir $(Build.BinariesDirectory) --parallel --use_binskim_compliant_compile_flags --build_shared_lib --enable_onnx_tests --ms_experimental --use_dml --use_winml --cmake_generator "Visual Studio 17 2022" --update --config RelWithDebInfo --enable_lto --use_telemetry --disable_rtti --enable_wcos --use_vcpkg --use_vcpkg_ms_internal_asset_cache --windows_sdk_version "10.0.22621.0" $(BuildFlags) --cmake_extra_defines "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO=/PROFILE" "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO=/PROFILE" workingDirectory: '$(Build.BinariesDirectory)' displayName: 'Generate cmake config' diff --git a/tools/ci_build/github/azure-pipelines/win-qnn-arm64-ci-pipeline.yml b/tools/ci_build/github/azure-pipelines/win-qnn-arm64-ci-pipeline.yml index e08d7eb2b12de..1c3d911fa7dbb 100644 --- a/tools/ci_build/github/azure-pipelines/win-qnn-arm64-ci-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/win-qnn-arm64-ci-pipeline.yml @@ -90,7 +90,7 @@ jobs: --config $(BuildConfig) --build_dir $(Build.BinariesDirectory) --cmake_generator "Visual Studio 17 2022" - --build_shared_lib + --build_shared_lib --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_qnn $(QnnLibKind) --qnn_home $(QnnSDKRootDir) --update --build --parallel diff --git a/tools/ci_build/github/azure-pipelines/win-qnn-ci-pipeline.yml b/tools/ci_build/github/azure-pipelines/win-qnn-ci-pipeline.yml index 81de3335a07d2..faef469e010f6 100644 --- a/tools/ci_build/github/azure-pipelines/win-qnn-ci-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/win-qnn-ci-pipeline.yml @@ -78,7 +78,7 @@ jobs: --build_dir $(Build.BinariesDirectory) --cmake_generator "Visual Studio 17 2022" --build_java - --build_shared_lib + --build_shared_lib --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_qnn $(QnnLibKind) --qnn_home $(QnnSDKRootDir) --use_binskim_compliant_compile_flags diff --git a/tools/python/util/__init__.py b/tools/python/util/__init__.py index a669963e84bcf..8631218ca9e00 100644 --- a/tools/python/util/__init__.py +++ b/tools/python/util/__init__.py @@ -7,7 +7,8 @@ from .run import run # noqa: F401 from .vcpkg_helpers import ( # noqa: F401 generate_android_triplets, - generate_posix_triplets, + generate_linux_triplets, + generate_macos_triplets, generate_vcpkg_triplets_for_emscripten, generate_windows_triplets, ) diff --git a/tools/python/util/vcpkg_helpers.py b/tools/python/util/vcpkg_helpers.py index d33b2f7675690..875a6186e55c2 100644 --- a/tools/python/util/vcpkg_helpers.py +++ b/tools/python/util/vcpkg_helpers.py @@ -222,6 +222,7 @@ def generate_triplet_for_posix_platform( enable_asan: bool, crt_linkage: str, target_abi: str, + osx_deployment_target: str, ) -> None: """ Generate triplet file for POSIX platforms (Linux, macOS). @@ -235,6 +236,7 @@ def generate_triplet_for_posix_platform( enable_asan (bool): Flag indicating if AddressSanitizer is enabled. crt_linkage (str): The CRT linkage type ("static" or "dynamic"). target_abi (str): The target ABI, which maps to the VCPKG_TARGET_ARCHITECTURE variable. Valid options include x86, x64, arm, arm64, arm64ec, s390x, ppc64le, riscv32, riscv64, loongarch32, loongarch64, mips64. + osx_deployment_target (str, optional): The macOS deployment target version. The parameter sets the minimum macOS version for compiled binaries. It also changes what versions of the macOS platform SDK CMake will search for. See the CMake documentation for CMAKE_OSX_DEPLOYMENT_TARGET for more information. """ folder_name_parts = [] if enable_asan: @@ -341,6 +343,8 @@ def generate_triplet_for_posix_platform( else: osx_abi = target_abi f.write(f'set(VCPKG_OSX_ARCHITECTURES "{osx_abi}")\n') + if osx_deployment_target: + f.write(f'set(VCPKG_OSX_DEPLOYMENT_TARGET "{osx_deployment_target}")\n') f.write("set(CMAKE_POSITION_INDEPENDENT_CODE ON)\n") f.write( "list(APPEND VCPKG_CMAKE_CONFIGURE_OPTIONS --compile-no-warning-as-error -DBENCHMARK_ENABLE_WERROR=OFF)\n" @@ -501,32 +505,58 @@ def generate_windows_triplets(build_dir: str) -> None: add_port_configs(f, enable_exception, False) -def generate_posix_triplets(build_dir: str) -> None: +def generate_linux_triplets(build_dir: str) -> None: """ - Generate triplet files for POSIX platforms (Linux, macOS). + Generate triplet files for Linux platforms. Args: build_dir (str): The directory to save the generated triplet files. """ - for os_name in ["linux", "osx"]: - if os_name == "linux": - target_abis = ["x86", "x64", "arm", "arm64", "s390x", "ppc64le", "riscv64", "loongarch64", "mips64"] - else: - target_abis = ["x64", "arm64", "universal2"] - for enable_rtti in [True, False]: - for enable_exception in [True, False]: - for enable_binskim in [True, False]: - for enable_asan in [True, False]: - if enable_asan and enable_binskim: - continue - for target_abi in target_abis: - generate_triplet_for_posix_platform( - build_dir, - os_name, - enable_rtti, - enable_exception, - enable_binskim, - enable_asan, - "dynamic", - target_abi, - ) + target_abis = ["x86", "x64", "arm", "arm64", "s390x", "ppc64le", "riscv64", "loongarch64", "mips64"] + for enable_rtti in [True, False]: + for enable_exception in [True, False]: + for enable_binskim in [True, False]: + for enable_asan in [True, False]: + if enable_asan and enable_binskim: + continue + for target_abi in target_abis: + generate_triplet_for_posix_platform( + build_dir, + "linux", + enable_rtti, + enable_exception, + enable_binskim, + enable_asan, + "dynamic", + target_abi, + None, + ) + + +def generate_macos_triplets(build_dir: str, osx_deployment_target: str) -> None: + """ + Generate triplet files for macOS platforms. + + Args: + build_dir (str): The directory to save the generated triplet files. + osx_deployment_target (str, optional): The macOS deployment target version. + """ + target_abis = ["x64", "arm64", "universal2"] + for enable_rtti in [True, False]: + for enable_exception in [True, False]: + for enable_binskim in [True, False]: + for enable_asan in [True, False]: + if enable_asan and enable_binskim: + continue + for target_abi in target_abis: + generate_triplet_for_posix_platform( + build_dir, + "osx", + enable_rtti, + enable_exception, + enable_binskim, + enable_asan, + "dynamic", + target_abi, + osx_deployment_target, + )