Skip to content

Commit

Permalink
Merge pull request #462 from SCOREC/cws/cxx14cmake
Browse files Browse the repository at this point in the history
Clean up setting of C++ standard
  • Loading branch information
cwsmith authored Oct 22, 2024
2 parents 5cbef61 + 16aa111 commit e39d19b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 21 deletions.
22 changes: 8 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,31 @@ include(cmake/xsdk.cmake)

option(USE_XSDK_DEFAULTS "enable the XDSK v0.3.0 default configuration" NO)

#requre c++11 without extensions
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSION OFF)
if(NOT ENABLE_CGNS)
set(CMAKE_CXX_STANDARD 11)
endif()

xsdk_begin_package()
bob_begin_package()

if(USE_XSDK_DEFAULTS)
xsdk_compiler_flags()
endif()

# require c++14
option(ENABLE_CGNS "Enable the CGNS reader: requires c++14 extensions" OFF)
message(STATUS "ENABLE_CGNS: ${ENABLE_CGNS}")
if(NOT ENABLE_CGNS)
bob_set_cxx_standard(11)
else()
message(STATUS "enabling cxx14")
bob_set_cxx_standard(14)
endif()

# Set some default compiler flags that should always be used
if(NOT USE_XSDK_DEFAULTS)
bob_set_shared_libs()
bob_begin_cxx_flags()
bob_end_cxx_flags()
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
if(ENABLE_CGNS) #takes precedence over SCOREC_ENABLE_CXX11
message(STATUS "enabling cxx14")
if(ENABLE_CGNS)
bob_cxx14_flags()
elseif(SCOREC_ENABLE_CXX11)
else()
bob_cxx11_flags()
endif()
endif()
Expand Down Expand Up @@ -193,9 +190,6 @@ add_library(core INTERFACE)
target_link_libraries(core INTERFACE ${SCOREC_EXPORTED_TARGETS})
if(ENABLE_CGNS)
target_link_libraries(core INTERFACE ${CMAKE_DL_LIBS}) #HDF5 uses dlopen
target_compile_features(core INTERFACE cxx_std_14)
else()
target_compile_features(core INTERFACE cxx_std_11)
endif()
scorec_export_library(core)

Expand Down
27 changes: 20 additions & 7 deletions cmake/bob.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,27 @@ function(bob_begin_cxx_flags)
set(CMAKE_CXX_FLAGS "${FLAGS}" PARENT_SCOPE)
endfunction(bob_begin_cxx_flags)

function(bob_cxx11_flags)
set(FLAGS "${CMAKE_CXX_FLAGS}")
if(CMAKE_CXX_COMPILER_ID MATCHES "PGI")
set(FLAGS "${FLAGS} -std=c++11")
# The following is from the book,"Professional CMake: 19th edition"
macro(bob_set_cxx_standard standard)
# Require C++<standard>, but let a parent project ask for something higher
if(DEFINED CMAKE_CXX_STANDARD)
if(CMAKE_CXX_STANDARD EQUAL 98 OR CMAKE_CXX_STANDARD LESS ${standard})
message(FATAL_ERROR "This project requires at least C++${standard}")
endif()
else()
set(FLAGS "${FLAGS} --std=c++11")
set(CMAKE_CXX_STANDARD ${standard})
endif()
message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
# Always enforce the language constraint
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# We don't need compiler extensions, but let a parent ask for them
if(NOT DEFINED CMAKE_CXX_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
endmacro()

function(bob_cxx11_flags)
set(FLAGS "${CMAKE_CXX_FLAGS}")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (${PROJECT_NAME}_CXX_WARNINGS)
set(FLAGS "${FLAGS} -Wno-c++98-compat-pedantic -Wno-c++98-compat")
Expand All @@ -94,8 +108,7 @@ endfunction(bob_cxx11_flags)

function(bob_cxx14_flags)
set(FLAGS "${CMAKE_CXX_FLAGS}")
# clang only: -Werror=return-stack-address -Werror=mismatched-tags
set(FLAGS "${FLAGS} --std=c++14 -Wall -Wextra -Wpedantic -Werror -Wno-extra-semi -Werror=unused-parameter -Wno-error=deprecated-declarations")
set(FLAGS "${FLAGS} -Wall -Wextra -Wpedantic -Werror -Wno-extra-semi -Werror=unused-parameter -Wno-error=deprecated-declarations")
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (${PROJECT_NAME}_CXX_WARNINGS)
set(FLAGS "${FLAGS} -Wno-c++98-compat-pedantic -Wno-c++98-compat")
Expand Down

0 comments on commit e39d19b

Please sign in to comment.