From dfe5e72ed3674980544419a741d4055b883c12d5 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Sat, 16 Aug 2014 01:35:36 +0000 Subject: [PATCH] [libcxx] Update the way the -std= flag is chosen by CMake and LibcxxTestFormat Summary: This patch does two things: CMake Update: - Add compiler flag checks for -std=c++11 and -std=c++1y and remove check for -std=c++0x. - Add configuration option LIBCXX_ENABLE_CXX1Y to prevent/allow -std=c++1y from being chosen as the std version. LIBCXX_ENABLE_CXX1Y is set to OFF by default. - if LIBCXX_ENABLE_CXX1Y is enabled then set LIBCXX_STD_VERSION to c++1y and fail if the compiler does not support -std=c++1y - If c++1y is not enabled then use c++11 and fail if the compiler does not support c++11. Lit Update: - Update lit.site.cfg.in to capture LIBCXX_STD_VERSION information as config.std. - Remove mentions of has_cxx0X configuration option. - Check for `--param std=X' passed to lit on the command line. - Choose the std for the tests either from command line parameter or (if it doesn't exist) the lit.site.cfg. Reviewers: mclow.lists, danalbert Reviewed By: danalbert Subscribers: emaste, rnk, ajwong, danalbert, cfe-commits Differential Revision: http://reviews.llvm.org/D4329 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@215802 91177308-0d34-0410-b5e6-96231b3b80d8 --- CMakeLists.txt | 20 +++++++++++++++++--- cmake/config-ix.cmake | 3 ++- test/CMakeLists.txt | 1 - test/lit.cfg | 26 ++++++++++++-------------- test/lit.site.cfg.in | 2 +- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c3b375e9..6f51e4e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,7 @@ option(LIBCXX_ENABLE_RTTI "Use run time type information." ON) option(LIBCXX_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON) option(LIBCXX_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) option(LIBCXX_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) -option(LIBCXX_ENABLE_CXX0X "Enable -std=c++0x and use of c++0x language features if the compiler supports it." ON) +option(LIBCXX_ENABLE_CXX1Y "Enable -std=c++1y and use of c++1y language features if the compiler supports it." OFF) option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON) option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON) @@ -194,9 +194,23 @@ else() list(APPEND LIBCXX_CXX_REQUIRED_FLAGS -nostdinc++) string(REPLACE "-stdlib=libc++" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") endif() - if (LIBCXX_ENABLE_CXX0X AND LIBCXX_HAS_STDCXX0X_FLAG) - list(APPEND LIBCXX_CXX_REQUIRED_FLAGS -std=c++0x) + # If c++1y has been enabled then attempt to use it. Fail if it is no supported + # by the compiler. Otherwise choose c++11 and ensure the compiler supports it. + if (LIBCXX_ENABLE_CXX1Y) + if (LIBCXX_HAS_STDCXX1Y_FLAG) + set(LIBCXX_STD_VERSION c++1y) + else() + message(FATAL_ERROR "c++1y was enabled but the compiler does not support it.") + endif() + else() + if (LIBCXX_HAS_STDCXX11_FLAG) + set(LIBCXX_STD_VERSION c++11) + else() + message(FATAL_ERROR "c++11 is required by libc++ but is not supported by the compiler") + endif() endif() + # LIBCXX_STD_VERSION should always be set at this point. + list(APPEND LIBCXX_CXX_REQUIRED_FLAGS "-std=${LIBCXX_STD_VERSION}") endif() macro(append_if list condition var) diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake index e8adafd6..6aa4fa2d 100644 --- a/cmake/config-ix.cmake +++ b/cmake/config-ix.cmake @@ -2,7 +2,8 @@ include(CheckLibraryExists) include(CheckCXXCompilerFlag) # Check compiler flags -check_cxx_compiler_flag(-std=c++0x LIBCXX_HAS_STDCXX0X_FLAG) +check_cxx_compiler_flag(-std=c++11 LIBCXX_HAS_STDCXX11_FLAG) +check_cxx_compiler_flag(-std=c++1y LIBCXX_HAS_STDCXX1Y_FLAG) check_cxx_compiler_flag(-fPIC LIBCXX_HAS_FPIC_FLAG) check_cxx_compiler_flag(-nodefaultlibs LIBCXX_HAS_NODEFAULTLIBS_FLAG) check_cxx_compiler_flag(-nostdinc++ LIBCXX_HAS_NOSTDINCXX_FLAG) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4810b2c5..b04bb972 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -28,7 +28,6 @@ if(PYTHONINTERP_FOUND) set(LIBCXX_BINARY_DIR ${CMAKE_BINARY_DIR}) set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) pythonize_bool(LIBCXX_ENABLE_SHARED) - pythonize_bool(LIBCXX_HAS_STDCXX0X_FLAG) set(AUTO_GEN_COMMENT "## Autogenerated by libcxx configuration.\n# Do not edit!") diff --git a/test/lit.cfg b/test/lit.cfg index 8a6ff415..edb0ab0d 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -247,18 +247,6 @@ if libcxx_obj_root is None: if libcxx_obj_root is None: libcxx_obj_root = libcxx_src_root -cxx_has_stdcxx0x_flag_str = lit_config.params.get('cxx_has_stdcxx0x_flag', None) -if cxx_has_stdcxx0x_flag_str is not None: - if cxx_has_stdcxx0x_flag_str.lower() in ('1', 'true'): - cxx_has_stdcxx0x_flag = True - elif cxx_has_stdcxx0x_flag_str.lower() in ('', '0', 'false'): - cxx_has_stdcxx0x_flag = False - else: - lit_config.fatal( - 'user parameter cxx_has_stdcxx0x_flag_str should be 0 or 1') -else: - cxx_has_stdcxx0x_flag = getattr(config, 'cxx_has_stdcxx0x_flag', True) - # This test suite supports testing against either the system library or the # locally built one; the former mode is useful for testing ABI compatibility # between the current headers and a shipping dynamic library. @@ -313,8 +301,18 @@ include_paths = ['-I' + libcxx_src_root + '/include', '-I' + libcxx_src_root + '/test/support'] library_paths = ['-L' + libcxx_obj_root + '/lib'] compile_flags = [] -if cxx_has_stdcxx0x_flag: - compile_flags += ['-std=c++0x'] + +# Try and get the std version from the command line. Fall back to default given +# in lit.site.cfg is not present. If default is not present then force c++11. +std = lit_config.params.get('std', None) +if std is None: + std = getattr(config, 'std', None) + if std is None: + std = 'c++11' + lit_config.note('using default std: \'-std=c++11\'') +else: + lit_config.note('using user specified std: \'-std={}\''.format(std)) +compile_flags += ['-std={}'.format(std)] # Configure extra linker parameters. exec_env = {} diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in index 1a73dff2..9ef332ca 100644 --- a/test/lit.site.cfg.in +++ b/test/lit.site.cfg.in @@ -1,6 +1,6 @@ @AUTO_GEN_COMMENT@ config.cxx_under_test = "@LIBCXX_COMPILER@" -config.cxx_has_stdcxx0x_flag = @LIBCXX_HAS_STDCXX0X_FLAG@ +config.std = "@LIBCXX_STD_VERSION@" config.libcxx_src_root = "@LIBCXX_SOURCE_DIR@" config.libcxx_obj_root = "@LIBCXX_BINARY_DIR@" config.python_executable = "@PYTHON_EXECUTABLE@"