[libc-commits] [libc] 700aeba - [libc] Set default CXX_STANDARD to C++17 and let targets set their own standard if needed.
Tue Ly via libc-commits
libc-commits at lists.llvm.org
Fri Feb 4 06:59:51 PST 2022
Author: Tue Ly
Date: 2022-02-04T09:59:21-05:00
New Revision: 700aebaf745f8b0a7c514ca452de1f60779816a1
URL: https://github.com/llvm/llvm-project/commit/700aebaf745f8b0a7c514ca452de1f60779816a1
DIFF: https://github.com/llvm/llvm-project/commit/700aebaf745f8b0a7c514ca452de1f60779816a1.diff
LOG: [libc] Set default CXX_STANDARD to C++17 and let targets set their own standard if needed.
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
Added:
Modified:
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
Removed:
################################################################################
diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt
index f9836877addf8..75e82ea979b80 100644
--- a/libc/CMakeLists.txt
+++ b/libc/CMakeLists.txt
@@ -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)
diff --git a/libc/cmake/modules/LLVMLibCObjectRules.cmake b/libc/cmake/modules/LLVMLibCObjectRules.cmake
index 69ec2160f1c0d..3ab05e0e87431 100644
--- a/libc/cmake/modules/LLVMLibCObjectRules.cmake
+++ b/libc/cmake/modules/LLVMLibCObjectRules.cmake
@@ -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
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index 285119ff79c0d..00b14014ef8b0 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -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)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index df2ef34d42ce9..94336d9177ac1 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -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(
diff --git a/libc/src/math/generic/logf.cpp b/libc/src/math/generic/logf.cpp
index 99bd7a473c7b7..4a35f49888207 100644
--- a/libc/src/math/generic/logf.cpp
+++ b/libc/src/math/generic/logf.cpp
@@ -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
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index 827dc867ff510..fa2a336e75d17 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -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(
diff --git a/libc/test/src/math/
diff erential_testing/CMakeLists.txt b/libc/test/src/math/
diff erential_testing/CMakeLists.txt
index 56d4ff4edf749..79aca4b3a0808 100644
--- a/libc/test/src/math/
diff erential_testing/CMakeLists.txt
+++ b/libc/test/src/math/
diff erential_testing/CMakeLists.txt
@@ -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
)
diff --git a/libc/utils/MPFRWrapper/CMakeLists.txt b/libc/utils/MPFRWrapper/CMakeLists.txt
index 2ef3731c57493..95968669c17a0 100644
--- a/libc/utils/MPFRWrapper/CMakeLists.txt
+++ b/libc/utils/MPFRWrapper/CMakeLists.txt
@@ -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)
More information about the libc-commits
mailing list