[libc] Set default CXX_STANDARD to C++17 and let targets set their own standard if...
authorTue Ly <lntue@google.com>
Thu, 3 Feb 2022 05:03:27 +0000 (00:03 -0500)
committerTue Ly <lntue@google.com>
Fri, 4 Feb 2022 14:59:21 +0000 (09:59 -0500)
CMAKE_CXX_STANDARD 14 is set in the llvm-project/llvm folder overriding all COMPILE_OPTIONS -std=c++17.  We need to override the CXX_STANDARD property of the target in order to set the correct C++ standard flags.

Reviewed By: gchatelet

Differential Revision: https://reviews.llvm.org/D118871

libc/CMakeLists.txt
libc/cmake/modules/LLVMLibCObjectRules.cmake
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/src/math/generic/CMakeLists.txt
libc/src/math/generic/logf.cpp
libc/test/src/math/CMakeLists.txt
libc/test/src/math/differential_testing/CMakeLists.txt
libc/utils/MPFRWrapper/CMakeLists.txt

index f983687..75e82ea 100644 (file)
@@ -1,5 +1,8 @@
 cmake_minimum_required(VERSION 3.13.4)
 
+# Default to C++17
+set(CMAKE_CXX_STANDARD 17)
+
 # Use old version of target_sources command which converts the source
 # file paths to full paths.
 cmake_policy(SET CMP0076 OLD)
index 69ec216..3ab05e0 100644 (file)
@@ -20,8 +20,8 @@ endfunction()
 function(add_object_library target_name)
   cmake_parse_arguments(
     "ADD_OBJECT"
-    "" # No option arguments
-    "" # Single value arguments
+    "" # No optional arguments
+    "CXX_STANDARD" # Single value arguments
     "SRCS;HDRS;COMPILE_OPTIONS;DEPENDS" # Multivalue arguments
     ${ARGN}
   )
@@ -53,6 +53,14 @@ function(add_object_library target_name)
     add_dependencies(${fq_target_name} ${fq_deps_list})
   endif()
 
+  if(ADD_OBJECT_CXX_STANDARD)
+    set_target_properties(
+      ${fq_target_name}
+      PROPERTIES
+        CXX_STANDARD ${ADD_OBJECT_CXX_STANDARD}
+    )
+  endif()
+
   set_target_properties(
     ${fq_target_name}
     PROPERTIES
@@ -80,7 +88,7 @@ function(add_entrypoint_object target_name)
   cmake_parse_arguments(
     "ADD_ENTRYPOINT_OBJ"
     "ALIAS;REDIRECTED" # Optional argument
-    "NAME" # Single value arguments
+    "NAME;CXX_STANDARD" # Single value arguments
     "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS"  # Multi value arguments
     ${ARGN}
   )
@@ -184,6 +192,14 @@ function(add_entrypoint_object target_name)
   target_include_directories(${fq_target_name} PRIVATE ${include_dirs})
   add_dependencies(${fq_target_name} ${full_deps_list})
 
+  if(ADD_ENTRYPOINT_OBJ_CXX_STANDARD)
+    set_target_properties(
+      ${fq_target_name} ${internal_target_name}
+      PROPERTIES
+        CXX_STANDARD ${ADD_ENTRYPOINT_OBJ_CXX_STANDARD}
+    )
+  endif()
+
   set_target_properties(
     ${fq_target_name}
     PROPERTIES
index 285119f..00b1401 100644 (file)
@@ -73,7 +73,7 @@ function(add_libc_unittest target_name)
   cmake_parse_arguments(
     "LIBC_UNITTEST"
     "NO_RUN_POSTBUILD" # Optional arguments
-    "SUITE" # Single value arguments
+    "SUITE;CXX_STANDARD" # Single value arguments
     "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS;LINK_OPTIONS" # Multi-value arguments
     "NO_LIBC_UNITTEST_TEST_MAIN"
     ${ARGN}
@@ -139,6 +139,13 @@ function(add_libc_unittest target_name)
       PRIVATE ${LIBC_UNITTEST_COMPILE_OPTIONS}
     )
   endif()
+  if(LIBC_UNITTEST_CXX_STANDARD)
+    set_target_properties(
+      ${fq_target_name}
+      PROPERTIES
+        CXX_STANDARD ${LIBC_UNITTEST_CXX_STANDARD}
+    )
+  endif()
 
   target_link_libraries(${fq_target_name} PRIVATE ${link_object_files})
   if(LIBC_UNITTEST_LINK_OPTIONS)
index df2ef34..94336d9 100644 (file)
@@ -44,8 +44,6 @@ add_object_library(
     libc.include.errno
     libc.include.math
     libc.src.errno.__errno_location
-  COMPILE_OPTIONS
-    -Wno-c++17-extensions
 )
 
 add_object_library(
@@ -56,8 +54,6 @@ add_object_library(
     sincosf_data.cpp
   DEPENDS
     .math_utils
-  COMPILE_OPTIONS
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -72,7 +68,6 @@ add_entrypoint_object(
     libc.src.errno.__errno_location
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -88,7 +83,6 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.fputil
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -103,7 +97,6 @@ add_entrypoint_object(
     libc.src.errno.__errno_location
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -662,8 +655,6 @@ add_object_library(
     common_constants.h
   SRCS
     common_constants.cpp
-  COMPILE_OPTIONS
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -677,7 +668,6 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.fputil
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -689,9 +679,8 @@ add_entrypoint_object(
   DEPENDS
     .common_constants
     libc.src.__support.FPUtil.fputil
-  COMPILE_OPTIONS
+    COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -862,7 +851,6 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -876,7 +864,6 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
@@ -890,7 +877,6 @@ add_entrypoint_object(
     libc.src.__support.FPUtil.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_entrypoint_object(
index 99bd7a4..4a35f49 100644 (file)
@@ -49,9 +49,6 @@
 
 namespace __llvm_libc {
 
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-
 // Lookup table for log(f) = log(1 + n*2^(-7)) where n = 0..127.
 static constexpr double LOG_F[128] = {
     0x0.0000000000000p+0, 0x1.fe02a6b106788p-8, 0x1.fc0a8b0fc03e3p-7,
@@ -178,6 +175,4 @@ LLVM_LIBC_FUNCTION(float, logf, (float x)) {
   return static_cast<float>(r);
 }
 
-#pragma clang diagnostic pop
-
 } // namespace __llvm_libc
index 827dc86..fa2a336 100644 (file)
@@ -1008,7 +1008,6 @@ add_fp_unittest(
     libc.src.__support.FPUtil.generic.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_fp_unittest(
@@ -1023,7 +1022,6 @@ add_fp_unittest(
     libc.src.__support.FPUtil.generic.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_fp_unittest(
@@ -1038,7 +1036,6 @@ add_fp_unittest(
     libc.src.__support.FPUtil.generic.sqrt
   COMPILE_OPTIONS
     -O3
-    -Wno-c++17-extensions
 )
 
 add_fp_unittest(
@@ -1097,8 +1094,6 @@ add_fp_unittest(
     libc.include.math
     libc.src.math.hypotf
     libc.src.__support.FPUtil.fputil
-  COMPILE_OPTIONS
-    -Wno-c++17-extensions
 )
 
 add_fp_unittest(
@@ -1112,8 +1107,6 @@ add_fp_unittest(
     libc.include.math
     libc.src.math.hypot
     libc.src.__support.FPUtil.fputil
-  COMPILE_OPTIONS
-    -Wno-c++17-extensions
 )
 
 add_fp_unittest(
index 56d4ff4..79aca4b 100644 (file)
@@ -3,7 +3,7 @@ function(add_diff_binary target_name)
   cmake_parse_arguments(
     "DIFF"
     "" # No optional arguments
-    "SUITE" # Single value arguments
+    "SUITE;CXX_STANDARD" # Single value arguments
     "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi-value arguments
     ${ARGN}
   )
@@ -53,6 +53,14 @@ function(add_diff_binary target_name)
 
   set_target_properties(${fq_target_name}
     PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+  
+  if(DIFF_CXX_STANDARD)
+    set_target_properties(
+      ${fq_target_name}
+      PROPERTIES
+        CXX_STANDARD ${DIFF_CXX_STANDARD}
+    )
+  endif()
 
   add_dependencies(
     ${fq_target_name}
@@ -417,7 +425,6 @@ add_diff_binary(
     libc.src.math.hypotf
   COMPILE_OPTIONS
     -fno-builtin
-    -Wno-c++17-extensions
 )
 
 add_diff_binary(
@@ -429,5 +436,4 @@ add_diff_binary(
     libc.src.math.hypot
   COMPILE_OPTIONS
     -fno-builtin
-    -Wno-c++17-extensions
 )
index 2ef3731..9596866 100644 (file)
@@ -3,6 +3,9 @@ if(LIBC_TESTS_CAN_USE_MPFR)
     MPFRUtils.cpp
     MPFRUtils.h
   )
+  add_compile_options(
+    -O3
+  )
   add_dependencies(libcMPFRWrapper libc.src.__support.CPP.standalone_cpp libc.src.__support.FPUtil.fputil LibcUnitTest)
   if(EXISTS ${LLVM_LIBC_MPFR_INSTALL_PATH})
     target_include_directories(libcMPFRWrapper PUBLIC ${LLVM_LIBC_MPFR_INSTALL_PATH}/include)