diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c615baf3..c8e43468 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,7 +23,7 @@ if(OPFLOW_ENABLE_MODULE) # ---------------------------------------------------------------------------- add_library(opflow) - target_compile_definitions(opflow PUBLIC OPFLOW_USE_MODULE) + target_compile_definitions(opflow PRIVATE OPFLOW_USE_MODULE) set_property(TARGET opflow PROPERTY CXX_SCAN_FOR_MODULES ON) target_sources(opflow PUBLIC FILE_SET CXX_MODULES @@ -42,7 +42,7 @@ if(OPFLOW_ENABLE_MODULE) FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) else() # ---------------------------------------------------------------------------- - # C++20 header only version + # C++26 header only version # ---------------------------------------------------------------------------- add_library(opflow INTERFACE) set_property(TARGET opflow PROPERTY CXX_SCAN_FOR_MODULES OFF) @@ -59,6 +59,13 @@ else() endif() add_library(opflow::opflow ALIAS opflow) +# Set OPFLOW_TARGET_SCOPE based on module enable status +if(OPFLOW_ENABLE_MODULE) + set(OPFLOW_TARGET_SCOPE PUBLIC) +else() + set(OPFLOW_TARGET_SCOPE INTERFACE) +endif() + # Create & include the version header configure_file(${CMAKE_CURRENT_LIST_DIR}/../cmake/Version.hpp.in ${CMAKE_BINARY_DIR}/Version.hpp @ONLY) @@ -120,3 +127,25 @@ target_link_options(opflow INTERFACE $<$: -fsanitize=leak> INTERFACE $<$: -fsanitize=thread> INTERFACE $<$: -fsanitize=undefined>) + +# ---------------------------------------------------------------------------- +# Compiler warnings +# ---------------------------------------------------------------------------- +# Enable strict warnings and treat warnings as errors by default + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_compile_options(opflow ${OPFLOW_TARGET_SCOPE} + -Wall + -Wextra + -Werror + # Suppress possible ABI warning from compiler upgrades + -Wno-psabi + ) +endif() +# MSVC-specific warnings +if(MSVC) + target_compile_options(opflow ${OPFLOW_TARGET_SCOPE} + /W4 + /WX + ) +endif()