Skip to content

Commit

Permalink
Use standard C++20 (no GNU extensions) (#3479)
Browse files Browse the repository at this point in the history
* Do not allow GNU C++ extensions

* Bump CMake version

* CMake fix

* No gnu extensions in wrappers

* Fix
  • Loading branch information
garth-wells authored Oct 23, 2024
1 parent 046674a commit 17ac58b
Show file tree
Hide file tree
Showing 11 changed files with 58 additions and 66 deletions.
33 changes: 15 additions & 18 deletions cpp/cmake/scripts/generate-cmakefiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,11 @@
#
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)
set(PROJECT_NAME {project_name})
project(${{PROJECT_NAME}} LANGUAGES C CXX)
# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand All @@ -30,6 +25,10 @@
add_executable(${{PROJECT_NAME}} {src_files})
target_link_libraries(${{PROJECT_NAME}} dolfinx)
# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand All @@ -54,16 +53,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)
set(PROJECT_NAME {project_name})
project(${{PROJECT_NAME}} LANGUAGES C CXX)
# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -95,6 +89,10 @@
add_executable(${{PROJECT_NAME}} {src_files} ${{CMAKE_CURRENT_BINARY_DIR}}/{ufl_c_files})
target_link_libraries(${{PROJECT_NAME}} dolfinx)
# Set C++20 standard
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
set(CMAKE_CXX_EXTENSIONS OFF)
# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand All @@ -119,16 +117,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)
set(PROJECT_NAME {project_name})
project(${{PROJECT_NAME}} LANGUAGES C CXX)
# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -165,6 +158,10 @@
add_executable(${{PROJECT_NAME}} {src_files} ${{CMAKE_CURRENT_BINARY_DIR}}/{ufl_c_files})
target_link_libraries(${{PROJECT_NAME}} dolfinx)
# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${{PROJECT_NAME}} PUBLIC cxx_std_20)
# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/biharmonic/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/biharmonic.c)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/codim_0_assembly/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/mixed_codim0.c)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/custom_kernel/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand All @@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/hyperelasticity/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -43,6 +38,10 @@ else()
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/hyperelasticity.c)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
set(CMAKE_CXX_EXTENSIONS OFF)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/interpolation-io/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand All @@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/interpolation_different_meshes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles.py from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand All @@ -21,6 +16,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/poisson/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/poisson.c)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
11 changes: 5 additions & 6 deletions cpp/demo/poisson_matrix_free/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
#
# python cmake/scripts/generate-cmakefiles from dolfinx/cpp
#
cmake_minimum_required(VERSION 3.19)
cmake_minimum_required(VERSION 3.21)

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

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT TARGET dolfinx)
find_package(DOLFINX REQUIRED)
endif()
Expand Down Expand Up @@ -48,6 +43,10 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(${PROJECT_NAME} main.cpp ${CMAKE_CURRENT_BINARY_DIR}/poisson.c)
target_link_libraries(${PROJECT_NAME} dolfinx)

# Set C++20 standard
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)

# Do not throw error for 'multi-line comments' (these are typical in rst which
# includes LaTeX)
include(CheckCXXCompilerFlag)
Expand Down
1 change: 1 addition & 0 deletions cpp/dolfinx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ include(GNUInstallDirs)
# ------------------------------------------------------------------------------
# Declare the library (target) and set C++ standard
add_library(dolfinx)
set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_features(dolfinx PUBLIC cxx_std_20)

# ------------------------------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ nanobind_add_module(
dolfinx/wrappers/petsc.cpp
dolfinx/wrappers/refinement.cpp
)

set(CMAKE_CXX_EXTENSIONS OFF)
target_compile_definitions(cpp PRIVATE cxx_std_20)

# Add DOLFINx libraries
Expand Down

0 comments on commit 17ac58b

Please sign in to comment.