cmake_minimum_required(VERSION 3.12 FATAL_ERROR) include(FetchContent) project(password-analyzer CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=mold -Wno-unused-command-line-argument") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address,undefined") message(STATUS "[DEPS] Processing spdlog") FetchContent_Declare( spdlog GIT_REPOSITORY https://github.com/gabime/spdlog GIT_TAG v1.12.0 GIT_SHALLOW TRUE GIT_PROGRESS TRUE OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(spdlog) message(STATUS "[DEPS] Processing Catch2") find_package(Catch2 3 CONFIG) if (NOT Catch2_FOUND) FetchContent_Declare( Catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.4.0 GIT_SHALLOW TRUE GIT_PROGRESS TRUE OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(Catch2) list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras) endif () message(STATUS "[DEPS] Processing MagicEnum") FetchContent_Declare( magic_enum GIT_REPOSITORY https://github.com/Neargye/magic_enum GIT_TAG v0.9.3 GIT_SHALLOW TRUE GIT_PROGRESS TRUE OVERRIDE_FIND_PACKAGE ) FetchContent_MakeAvailable(magic_enum) message(STATUS "[DEPS] Processing tbb") find_package(TBB REQUIRED COMPONENTS tbb) find_package(Threads REQUIRED) message(STATUS "[DEPS] Processing generator") file(DOWNLOAD "https://raw.githubusercontent.com/lewissbaker/generator/master/include/__generator.hpp" "${CMAKE_BINARY_DIR}/external/generator.hpp") include_directories(password-analyzer PRIVATE ${CMAKE_BINARY_DIR}/external) set(COMMON_SOURCES defs.hpp utils.cpp stat_date.cpp stat_keystroke.cpp stat_length.cpp stat_struct.cpp stat_word.cpp ) set(COMMON_LIBRARIES magic_enum::magic_enum spdlog::spdlog TBB::tbb Threads::Threads ) add_executable(password-analyzer ${COMMON_SOURCES} analyzer.cpp) target_link_libraries(password-analyzer PRIVATE ${COMMON_LIBRARIES}) add_executable(tests ${COMMON_SOURCES} tests.cpp) target_link_libraries(tests PRIVATE Catch2::Catch2WithMain ${COMMON_LIBRARIES}) include(CTest) include(Catch) catch_discover_tests(tests)