file(GLOB_RECURSE sources *.cpp) add_library(app4triqs_c ${sources}) # Link against triqs and enable warnings target_link_libraries(app4triqs_c PUBLIC triqs PRIVATE project_warnings) # Configure target and compilation target_compile_options(app4triqs_c PUBLIC -fPIC) target_include_directories(app4triqs_c PUBLIC $) target_include_directories(app4triqs_c SYSTEM INTERFACE $) target_compile_definitions(app4triqs_c PUBLIC APP4TRIQS_GIT_HASH=${PROJECT_GIT_HASH} TRIQS_GIT_HASH=${TRIQS_GIT_HASH} $<$:APP4TRIQS_DEBUG> $<$:TRIQS_DEBUG> $<$:TRIQS_ARRAYS_ENFORCE_BOUNDCHECK> ) # Install library and headers install(TARGETS app4triqs_c EXPORT app4triqs-targets DESTINATION lib) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h") # ========= Static Analyzer Checks ========== option(ANALYZE_SOURCES OFF "Run static analyzer checks if found (clang-tidy, cppcheck)") if(ANALYZE_SOURCES) # Locate static analyzer tools find_program(CPPCHECK_EXECUTABLE NAMES "cppcheck" PATHS ENV PATH) find_program(CLANG_TIDY_EXECUTABLE NAMES "clang-tidy" PATHS ENV PATH) # Run clang-tidy if found if(CLANG_TIDY_EXECUTABLE) message(STATUS "clang-tidy found: ${CLANG_TIDY_EXECUTABLE}") set_target_properties(app4triqs_c PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") else() message(STATUS "clang-tidy not found in $PATH. Please consider installing clang-tidy for additional checks!") endif() # Run cppcheck if found if(CPPCHECK_EXECUTABLE) message(STATUS "cppcheck found: ${CPPCHECK_EXECUTABLE}") add_custom_command( TARGET app4triqs_c COMMAND ${CPPCHECK_EXECUTABLE} --enable=warning,style,performance,portability --std=c++17 --template=gcc --verbose --force --quiet ${sources} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) else() message(STATUS "cppcheck not found in $PATH. Please consider installing cppcheck for additional checks!") endif() endif() # ========= Dynamic Analyzer Checks ========== option(ASAN OFF "Compile library and executables with LLVM Address Sanitizer") option(UBSAN OFF "Compile library and executables with LLVM Undefined Behavior Sanitizer") if(ASAN) if(NOT TARGET asan) find_package(sanitizer REQUIRED "asan") endif() target_link_libraries(app4triqs_c PUBLIC asan) install(TARGETS asan EXPORT app4triqs-targets) endif() if(UBSAN) if(NOT TARGET ubsan) find_package(sanitizer REQUIRED "ubsan") endif() target_link_libraries(app4triqs_c PUBLIC ubsan) install(TARGETS ubsan EXPORT app4triqs-targets) endif()