Index: test/std/localization/locale.categories/category.ctype/ctype_base.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.ctype/ctype_base.pass.cpp +++ test/std/localization/locale.categories/category.ctype/ctype_base.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_1.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_1.pass.cpp +++ test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_1.pass.cpp @@ -15,8 +15,8 @@ // charT tolower(charT) const; -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 #include #include Index: test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_many.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_many.pass.cpp +++ test/std/localization/locale.categories/category.ctype/locale.ctype.byname/tolower_many.pass.cpp @@ -15,8 +15,8 @@ // const charT* tolower(charT* low, const charT* high) const; -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 #include #include Index: test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_1.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_1.pass.cpp +++ test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_1.pass.cpp @@ -15,8 +15,8 @@ // charT toupper(charT) const; -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 #include Index: test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_many.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_many.pass.cpp +++ test/std/localization/locale.categories/category.ctype/locale.ctype.byname/toupper_many.pass.cpp @@ -15,8 +15,8 @@ // const charT* toupper(charT* low, const charT* high) const; -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 #include #include Index: test/std/localization/locale.categories/category.monetary/locale.moneypunct/types.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.monetary/locale.moneypunct/types.pass.cpp +++ test/std/localization/locale.categories/category.monetary/locale.moneypunct/types.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp =================================================================== --- test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp +++ test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/localization/locales/locale/locale.types/locale.category/category.pass.cpp =================================================================== --- test/std/localization/locales/locale/locale.types/locale.category/category.pass.cpp +++ test/std/localization/locales/locale/locale.types/locale.category/category.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/re/re.traits/translate_nocase.pass.cpp =================================================================== --- test/std/re/re.traits/translate_nocase.pass.cpp +++ test/std/re/re.traits/translate_nocase.pass.cpp @@ -16,8 +16,8 @@ // REQUIRES: locale.en_US.UTF-8 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // TODO: investigation needed // XFAIL: linux-gnu Index: test/std/strings/string.conversions/stof.pass.cpp =================================================================== --- test/std/strings/string.conversions/stof.pass.cpp +++ test/std/strings/string.conversions/stof.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/strings/string.conversions/stol.pass.cpp =================================================================== --- test/std/strings/string.conversions/stol.pass.cpp +++ test/std/strings/string.conversions/stol.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/strings/string.conversions/stoll.pass.cpp =================================================================== --- test/std/strings/string.conversions/stoll.pass.cpp +++ test/std/strings/string.conversions/stoll.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/strings/string.conversions/stoul.pass.cpp =================================================================== --- test/std/strings/string.conversions/stoul.pass.cpp +++ test/std/strings/string.conversions/stoul.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/strings/string.conversions/stoull.pass.cpp =================================================================== --- test/std/strings/string.conversions/stoull.pass.cpp +++ test/std/strings/string.conversions/stoull.pass.cpp @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/thread/futures/futures.future_error/what.pass.cpp =================================================================== --- test/std/thread/futures/futures.future_error/what.pass.cpp +++ test/std/thread/futures/futures.future_error/what.pass.cpp @@ -12,8 +12,8 @@ // LWG 2056 changed the values of future_errc, so if we're using new headers // with an old library we'll get incorrect messages. // -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // XFAIL: with_system_cxx_lib=x86_64-apple-darwin13 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_strong_explicit.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_compare_exchange_weak_explicit.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_exchange_explicit.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_load_explicit.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit.pass.cpp =================================================================== --- test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit.pass.cpp +++ test/std/utilities/memory/util.smartptr/util.smartptr.shared.atomic/atomic_store_explicit.pass.cpp @@ -11,8 +11,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Index: test/std/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp =================================================================== --- test/std/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp +++ test/std/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Due to C++17 inline variables ASAN flags this test as containing an ODR // violation because Clock::is_steady is defined in both the dylib and this TU. Index: test/std/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp =================================================================== --- test/std/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp +++ test/std/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // UNSUPPORTED: libcpp-has-no-monotonic-clock // Due to C++17 inline variables ASAN flags this test as containing an ODR Index: test/std/utilities/time/time.clock/time.clock.system/consistency.pass.cpp =================================================================== --- test/std/utilities/time/time.clock/time.clock.system/consistency.pass.cpp +++ test/std/utilities/time/time.clock/time.clock.system/consistency.pass.cpp @@ -9,8 +9,8 @@ // // This test uses new symbols that were not defined in the libc++ shipped on // darwin11 and darwin12: -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 -// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.7 +// XFAIL: with_system_cxx_lib=x86_64-apple-macosx10.8 // Due to C++17 inline variables ASAN flags this test as containing an ODR // violation because Clock::is_steady is defined in both the dylib and this TU. Index: utils/libcxx/test/config.py =================================================================== --- utils/libcxx/test/config.py +++ utils/libcxx/test/config.py @@ -117,14 +117,15 @@ def configure(self): self.configure_executor() + self.configure_use_system_cxx_lib() self.configure_target_info() self.configure_cxx() self.configure_triple() + self.configure_deployment() self.configure_src_root() self.configure_obj_root() self.configure_cxx_stdlib_under_test() self.configure_cxx_library_root() - self.configure_use_system_cxx_lib() self.configure_use_clang_verify() self.configure_use_thread_safety() self.configure_execute_external() @@ -361,6 +362,13 @@ # Insert the platform name into the available features as a lower case. self.config.available_features.add(target_platform) + # If we're using deployment, add sub-components of the triple using + # "darwin" instead of the platform name. + if self.use_deployment: + arch, _, _ = self.config.deployment + self.config.available_features.add('apple-darwin') + self.config.available_features.add(arch + '-apple-darwin') + # Simulator testing can take a really long time for some of these tests # so add a feature check so we can REQUIRES: long_tests in them self.long_tests = self.get_lit_bool('long_tests') @@ -483,6 +491,10 @@ ['-target', self.config.target_triple]): self.lit_config.warning('use_target is true but -target is '\ 'not supported by the compiler') + if self.use_deployment: + arch, name, version = self.config.deployment + self.cxx.flags += ['-arch', arch] + self.cxx.flags += ['-m' + name + '-version-min=' + version] def configure_compile_flags_header_includes(self): support_path = os.path.join(self.libcxx_src_root, 'test', 'support') @@ -951,12 +963,34 @@ not_str = '%s %s ' % (pipes.quote(sys.executable), pipes.quote(not_py)) sub.append(('not ', not_str)) + def can_use_deployment(self): + # Check if the host is on an Apple platform using clang. + if not self.target_info.platform() == "darwin": + return False + if not self.target_info.is_host_macosx(): + return False + if not self.cxx.type.endswith('clang'): + return False + return True + def configure_triple(self): # Get or infer the target triple. - self.config.target_triple = self.get_lit_conf('target_triple') + target_triple = self.get_lit_conf('target_triple') self.use_target = self.get_lit_bool('use_target', False) - if self.use_target and self.config.target_triple: + if self.use_target and target_triple: self.lit_config.warning('use_target is true but no triple is specified') + + # Use deployment if possible. + self.use_deployment = not self.use_target and self.can_use_deployment() + if self.use_deployment: + return + + # Save the triple (and warn on Apple platforms). + self.config.target_triple = target_triple + if self.use_target and 'apple' in target_triple: + self.lit_config.warning('consider using arch and platform instead' + ' of target_triple on Apple platforms') + # If no target triple was given, try to infer it from the compiler # under test. if not self.config.target_triple: @@ -978,6 +1012,39 @@ self.lit_config.note( "inferred target_triple as: %r" % self.config.target_triple) + def configure_deployment(self): + assert not self.use_deployment is None + assert not self.use_target is None + if not self.use_deployment: + # Warn about ignored parameters. + if self.get_lit_conf('arch'): + self.lit_config.warning('ignoring arch, using target_triple') + if self.get_lit_conf('platform'): + self.lit_config.warning('ignoring platform, using target_triple') + return + + assert not self.use_target + assert self.target_info.is_host_macosx() + + # Always specify deployment explicitly on Apple platforms, since + # otherwise a platform is picked up from the SDK. If the SDK version + # doesn't match the system version, tests that use the system library + # may fail spuriously. + arch = self.get_lit_conf('arch') + if not arch: + arch = self.cxx.getTriple().split('-', 1)[0] + self.lit_config.note("inferred arch as: %r" % arch) + + inferred_platform, name, version = self.target_info.get_platform() + if inferred_platform: + self.lit_config.note("inferred platform as: %r" % (name + version)) + self.config.deployment = (arch, name, version) + + # Set the target triple for use by lit. + self.config.target_triple = arch + '-apple-' + name + version + self.lit_config.note( + "computed target_triple as: %r" % self.config.target_triple) + def configure_env(self): self.target_info.configure_env(self.exec_env) Index: utils/libcxx/test/target_info.py =================================================================== --- utils/libcxx/test/target_info.py +++ utils/libcxx/test/target_info.py @@ -12,6 +12,7 @@ import locale import os import platform +import re import sys class DefaultTargetInfo(object): @@ -70,12 +71,62 @@ def __init__(self, full_config): super(DarwinLocalTI, self).__init__(full_config) + def is_host_macosx(self): + name = lit.util.capture(['sw_vers', '-productName']).strip() + return name == "Mac OS X" + + def get_macosx_version(self): + assert self.is_host_macosx() + version = lit.util.capture(['sw_vers', '-productVersion']).strip() + version = re.sub(r'([0-9]+\.[0-9]+)(\..*)?', r'\1', version) + return version + + def get_sdk_version(self, name): + assert self.is_host_macosx() + cmd = ['xcrun', '--sdk', name, '--show-sdk-path'] + try: + out = lit.util.capture(cmd).strip() + except OSError: + pass + + if not out: + self.full_config.lit_config.fatal( + "cannot infer sdk version with: %r" % cmd) + + return re.sub(r'.*/[^0-9]+([0-9.]+)\.sdk', r'\1', out) + + def get_platform(self): + platform = self.full_config.get_lit_conf('platform') + if platform: + platform = re.sub(r'([^0-9]+)([0-9\.]*)', r'\1-\2', platform) + name, version = tuple(platform.split('-', 1)) + else: + name = 'macosx' + version = None + + if version: + return (False, name, version) + + # Infer the version, either from the SDK or the system itself. For + # macosx, ignore the SDK version; what matters is what's at + # /usr/lib/libc++.dylib. + if name == 'macosx': + version = self.get_macosx_version() + else: + version = self.get_sdk_version(name) + return (True, name, version) + def add_locale_features(self, features): add_common_locales(features, self.full_config.lit_config) def add_cxx_compile_flags(self, flags): + if self.full_config.use_deployment: + _, name, _ = self.full_config.config.deployment + cmd = ['xcrun', '--sdk', name, '--show-sdk-path'] + else: + cmd = ['xcrun', '--show-sdk-path'] try: - out = lit.util.capture(['xcrun', '--show-sdk-path']).strip() + out = lit.util.capture(cmd).strip() res = 0 except OSError: res = -1