Skip to content

Commit bb967d4

Browse files
garth-wellsschnellerhase
authored andcommitted
Use standard C++20 (no GNU extensions) (FEniCS#3479)
* Do not allow GNU C++ extensions * Bump CMake version * CMake fix * No gnu extensions in wrappers * Fix
1 parent 2d3c47c commit bb967d4

11 files changed

Lines changed: 58 additions & 66 deletions

File tree

cpp/cmake/scripts/generate-cmakefiles.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,11 @@
1111
#
1212
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
1313
#
14-
cmake_minimum_required(VERSION 3.19)
14+
cmake_minimum_required(VERSION 3.21)
1515
1616
set(PROJECT_NAME {project_name})
1717
project(${{PROJECT_NAME}} LANGUAGES C CXX)
1818
19-
# Set C++20 standard
20-
set(CMAKE_CXX_STANDARD 20)
21-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
22-
set(CMAKE_CXX_EXTENSIONS OFF)
23-
2419
if(NOT TARGET dolfinx)
2520
find_package(DOLFINX REQUIRED)
2621
endif()
@@ -30,6 +25,10 @@
3025
add_executable(${{PROJECT_NAME}} {src_files})
3126
target_link_libraries(${{PROJECT_NAME}} dolfinx)
3227
28+
# Set C++20 standard
29+
set(CMAKE_CXX_EXTENSIONS OFF)
30+
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
31+
3332
# Do not throw error for 'multi-line comments' (these are typical in rst which
3433
# includes LaTeX)
3534
include(CheckCXXCompilerFlag)
@@ -54,16 +53,11 @@
5453
#
5554
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
5655
#
57-
cmake_minimum_required(VERSION 3.19)
56+
cmake_minimum_required(VERSION 3.21)
5857
5958
set(PROJECT_NAME {project_name})
6059
project(${{PROJECT_NAME}} LANGUAGES C CXX)
6160
62-
# Set C++20 standard
63-
set(CMAKE_CXX_STANDARD 20)
64-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
65-
set(CMAKE_CXX_EXTENSIONS OFF)
66-
6761
if(NOT TARGET dolfinx)
6862
find_package(DOLFINX REQUIRED)
6963
endif()
@@ -95,6 +89,10 @@
9589
add_executable(${{PROJECT_NAME}} {src_files} ${{CMAKE_CURRENT_BINARY_DIR}}/{ufl_c_files})
9690
target_link_libraries(${{PROJECT_NAME}} dolfinx)
9791
92+
# Set C++20 standard
93+
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
94+
set(CMAKE_CXX_EXTENSIONS OFF)
95+
9896
# Do not throw error for 'multi-line comments' (these are typical in rst which
9997
# includes LaTeX)
10098
include(CheckCXXCompilerFlag)
@@ -119,16 +117,11 @@
119117
#
120118
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
121119
#
122-
cmake_minimum_required(VERSION 3.19)
120+
cmake_minimum_required(VERSION 3.21)
123121
124122
set(PROJECT_NAME {project_name})
125123
project(${{PROJECT_NAME}} LANGUAGES C CXX)
126124
127-
# Set C++20 standard
128-
set(CMAKE_CXX_STANDARD 20)
129-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
130-
set(CMAKE_CXX_EXTENSIONS OFF)
131-
132125
if(NOT TARGET dolfinx)
133126
find_package(DOLFINX REQUIRED)
134127
endif()
@@ -165,6 +158,10 @@
165158
add_executable(${{PROJECT_NAME}} {src_files} ${{CMAKE_CURRENT_BINARY_DIR}}/{ufl_c_files})
166159
target_link_libraries(${{PROJECT_NAME}} dolfinx)
167160
161+
# Set C++20 standard
162+
set(CMAKE_CXX_EXTENSIONS OFF)
163+
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
164+
168165
# Do not throw error for 'multi-line comments' (these are typical in rst which
169166
# includes LaTeX)
170167
include(CheckCXXCompilerFlag)

cpp/demo/biharmonic/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_biharmonic)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
4843
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/biharmonic.c)
4944
target_link_libraries(${PROJECT_NAME} dolfinx)
5045

46+
# Set C++20 standard
47+
set(CMAKE_CXX_EXTENSIONS OFF)
48+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
49+
5150
# Do not throw error for 'multi-line comments' (these are typical in rst which
5251
# includes LaTeX)
5352
include(CheckCXXCompilerFlag)

cpp/demo/codim_0_assembly/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_codim_0_assembly)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
4843
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/mixed_codim0.c)
4944
target_link_libraries(${PROJECT_NAME} dolfinx)
5045

46+
# Set C++20 standard
47+
set(CMAKE_CXX_EXTENSIONS OFF)
48+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
49+
5150
# Do not throw error for 'multi-line comments' (these are typical in rst which
5251
# includes LaTeX)
5352
include(CheckCXXCompilerFlag)

cpp/demo/custom_kernel/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_custom_kernel)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
2116
add_executable(${PROJECT_NAME} main.cpp)
2217
target_link_libraries(${PROJECT_NAME} dolfinx)
2318

19+
# Set C++20 standard
20+
set(CMAKE_CXX_EXTENSIONS OFF)
21+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
22+
2423
# Do not throw error for 'multi-line comments' (these are typical in rst which
2524
# includes LaTeX)
2625
include(CheckCXXCompilerFlag)

cpp/demo/hyperelasticity/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_hyperelasticity)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -43,6 +38,10 @@ else()
4338
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/hyperelasticity.c)
4439
target_link_libraries(${PROJECT_NAME} dolfinx)
4540

41+
# Set C++20 standard
42+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
43+
set(CMAKE_CXX_EXTENSIONS OFF)
44+
4645
# Do not throw error for 'multi-line comments' (these are typical in rst which
4746
# includes LaTeX)
4847
include(CheckCXXCompilerFlag)

cpp/demo/interpolation-io/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_interpolation-io)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
2116
add_executable(${PROJECT_NAME} main.cpp)
2217
target_link_libraries(${PROJECT_NAME} dolfinx)
2318

19+
# Set C++20 standard
20+
set(CMAKE_CXX_EXTENSIONS OFF)
21+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
22+
2423
# Do not throw error for 'multi-line comments' (these are typical in rst which
2524
# includes LaTeX)
2625
include(CheckCXXCompilerFlag)

cpp/demo/interpolation_different_meshes/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_interpolation_different_meshes)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
2116
add_executable(${PROJECT_NAME} main.cpp)
2217
target_link_libraries(${PROJECT_NAME} dolfinx)
2318

19+
# Set C++20 standard
20+
set(CMAKE_CXX_EXTENSIONS OFF)
21+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
22+
2423
# Do not throw error for 'multi-line comments' (these are typical in rst which
2524
# includes LaTeX)
2625
include(CheckCXXCompilerFlag)

cpp/demo/poisson/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_poisson)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
4843
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/poisson.c)
4944
target_link_libraries(${PROJECT_NAME} dolfinx)
5045

46+
# Set C++20 standard
47+
set(CMAKE_CXX_EXTENSIONS OFF)
48+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
49+
5150
# Do not throw error for 'multi-line comments' (these are typical in rst which
5251
# includes LaTeX)
5352
include(CheckCXXCompilerFlag)

cpp/demo/poisson_matrix_free/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@
22
#
33
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
44
#
5-
cmake_minimum_required(VERSION 3.19)
5+
cmake_minimum_required(VERSION 3.21)
66

77
set(PROJECT_NAME demo_poisson_matrix_free)
88
project(${PROJECT_NAME} LANGUAGES C CXX)
99

10-
# Set C++20 standard
11-
set(CMAKE_CXX_STANDARD 20)
12-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
13-
set(CMAKE_CXX_EXTENSIONS OFF)
14-
1510
if(NOT TARGET dolfinx)
1611
find_package(DOLFINX REQUIRED)
1712
endif()
@@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
4843
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/poisson.c)
4944
target_link_libraries(${PROJECT_NAME} dolfinx)
5045

46+
# Set C++20 standard
47+
set(CMAKE_CXX_EXTENSIONS OFF)
48+
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
49+
5150
# Do not throw error for 'multi-line comments' (these are typical in rst which
5251
# includes LaTeX)
5352
include(CheckCXXCompilerFlag)

cpp/dolfinx/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ include(GNUInstallDirs)
44
# ------------------------------------------------------------------------------
55
# Declare the library (target) and set C++ standard
66
add_library(dolfinx)
7+
set(CMAKE_CXX_EXTENSIONS OFF)
78
target_compile_features(dolfinx PUBLIC cxx_std_20)
89

910
# ------------------------------------------------------------------------------

0 commit comments

Comments
 (0)