diff --git a/conan/tools/cmake/toolchain.py b/conan/tools/cmake/toolchain.py index 9fb1e87be05..b1168ebc354 100644 --- a/conan/tools/cmake/toolchain.py +++ b/conan/tools/cmake/toolchain.py @@ -313,12 +313,14 @@ class AppleSystemBlock(Block): {% if CMAKE_SYSTEM_VERSION is defined %} set(CMAKE_SYSTEM_VERSION {{ CMAKE_SYSTEM_VERSION }}) {% endif %} - set(DEPLOYMENT_TARGET ${CONAN_SETTINGS_HOST_MIN_OS_VERSION}) # Set the architectures for which to build. set(CMAKE_OSX_ARCHITECTURES {{ CMAKE_OSX_ARCHITECTURES }} CACHE STRING "" FORCE) # Setting CMAKE_OSX_SYSROOT SDK, when using Xcode generator the name is enough # but full path is necessary for others set(CMAKE_OSX_SYSROOT {{ CMAKE_OSX_SYSROOT }} CACHE STRING "" FORCE) + {% if CMAKE_OSX_DEPLOYMENT_TARGET is defined %} + set(CMAKE_OSX_DEPLOYMENT_TARGET {{ CMAKE_OSX_DEPLOYMENT_TARGET }}) + {% endif %} """) def _get_architecture(self): @@ -358,9 +360,6 @@ def context(self): host_os_version = self._conanfile.settings.get_safe("os.version") host_sdk_name = self._apple_sdk_name() - # TODO: Discuss how to handle CMAKE_OSX_DEPLOYMENT_TARGET to set min-version - # add a setting? check an option and if not present set a default? - # default to os.version? ctxt_toolchain = {} if host_sdk_name: ctxt_toolchain["CMAKE_OSX_SYSROOT"] = host_sdk_name @@ -371,6 +370,12 @@ def context(self): ctxt_toolchain["CMAKE_SYSTEM_NAME"] = os_ ctxt_toolchain["CMAKE_SYSTEM_VERSION"] = host_os_version + if host_os_version: + # https://cmake.org/cmake/help/latest/variable/CMAKE_OSX_DEPLOYMENT_TARGET.html + # Despite the OSX part in the variable name(s) they apply also to other SDKs than + # macOS like iOS, tvOS, or watchOS. + ctxt_toolchain["CMAKE_OSX_DEPLOYMENT_TARGET"] = host_os_version + return ctxt_toolchain diff --git a/conans/test/unittests/tools/cmake/test_cmaketoolchain.py b/conans/test/unittests/tools/cmake/test_cmaketoolchain.py index 884cfdbc272..081d518c686 100644 --- a/conans/test/unittests/tools/cmake/test_cmaketoolchain.py +++ b/conans/test/unittests/tools/cmake/test_cmaketoolchain.py @@ -140,3 +140,28 @@ def test_user_toolchain(conanfile): toolchain = CMakeToolchain(conanfile) content = toolchain.content assert 'include(' not in content + +@pytest.fixture +def conanfile_apple(): + c = ConanFile(Mock(), None) + c.settings = "os", "compiler", "build_type", "arch" + c.initialize(Settings({"os": {"Macos": {"version": ["10.15"]}}, + "compiler": {"apple-clang": {"libcxx": ["libc++"]}}, + "build_type": ["Release"], + "arch": ["x86"]}), EnvValues()) + c.settings.build_type = "Release" + c.settings.arch = "x86" + c.settings.compiler = "apple-clang" + c.settings.compiler.libcxx = "libc++" + c.settings.os = "Macos" + c.settings.os.version = "10.15" + c.conf = Conf() + c.folders.set_base_generators(".") + c._conan_node = Mock() + c._conan_node.dependencies = [] + return c + +def test_osx_deployment_target(conanfile_apple): + toolchain = CMakeToolchain(conanfile_apple) + content = toolchain.content + assert 'set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)' in content