mirror of https://github.com/dnomd343/md5sum.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.8 KiB
80 lines
2.8 KiB
cmake_minimum_required(VERSION 3.12)
|
|
project(md5sum LANGUAGES CXX)
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|
|
option(MD5_BUILD_DEMO "Build md5 demo binary." OFF)
|
|
option(MD5_SHARED_LIB "Build as a dynamic library." OFF)
|
|
option(MD5_ENABLE_LTO "Enable LTO optimization of the library." ON)
|
|
option(MD5_ENABLE_TESTING "Enable testing of the md5sum library." OFF)
|
|
option(MD5_ENABLE_BENCHMARK "Enable benchmark of the md5sum library." OFF)
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|
|
set(CXX_STANDARDS)
|
|
foreach (CXX_FEATURE ${CMAKE_CXX_COMPILE_FEATURES})
|
|
if (CXX_FEATURE MATCHES "^cxx_std_[0-9]+$")
|
|
string(REGEX MATCH "[0-9]+$" CXX_STANDARD ${CXX_FEATURE})
|
|
list(APPEND CXX_STANDARDS ${CXX_STANDARD}) # supported c++ standards
|
|
endif()
|
|
endforeach()
|
|
|
|
if (NOT 17 IN_LIST CXX_STANDARDS)
|
|
message(FATAL_ERROR "MD5 project require at least C++17.")
|
|
endif()
|
|
|
|
list(GET CXX_STANDARDS -1 MD5_CXX_STANDARD) # select the latest C++ standard
|
|
message(STATUS "MD5 CXX Standard: ${MD5_CXX_STANDARD}")
|
|
set(CMAKE_CXX_STANDARD ${MD5_CXX_STANDARD})
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release) # using release build in default
|
|
endif()
|
|
|
|
add_compile_options(-Wall -Wextra -Werror)
|
|
if (MD5_ENABLE_LTO)
|
|
add_compile_options(-flto=auto)
|
|
endif()
|
|
|
|
file(GLOB MD5_SRC src/impl/*.cc)
|
|
if (NOT MD5_SHARED_LIB)
|
|
add_library(md5sum STATIC ${MD5_SRC})
|
|
else()
|
|
add_library(md5sum SHARED ${MD5_SRC})
|
|
target_compile_options(md5sum PRIVATE -fvisibility=hidden)
|
|
endif()
|
|
|
|
set(MD5_COMPILE_OPTIONS -fno-rtti -fno-exceptions)
|
|
target_compile_options(md5sum PRIVATE ${MD5_COMPILE_OPTIONS})
|
|
target_include_directories(md5sum PUBLIC src/)
|
|
add_library(md5sum::md5sum ALIAS md5sum)
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|
|
if (MD5_BUILD_DEMO)
|
|
add_executable(md5_demo demo.cc)
|
|
target_link_libraries(md5_demo PRIVATE md5sum)
|
|
target_compile_options(md5_demo PRIVATE ${MD5_COMPILE_OPTIONS})
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|
|
include(third_party/ThirdParty.cmake)
|
|
|
|
if (MD5_ENABLE_TESTING)
|
|
enable_testing()
|
|
file(GLOB MD5_TEST_SRC test/*.cc)
|
|
add_executable(md5_test ${MD5_TEST_SRC})
|
|
target_link_libraries(md5_test PRIVATE md5sum GTest::gtest_main)
|
|
add_test(NAME md5_test COMMAND md5_test)
|
|
endif()
|
|
|
|
if (MD5_ENABLE_BENCHMARK)
|
|
add_executable(md5_benchmark benchmark.cc)
|
|
target_link_libraries(md5_benchmark PRIVATE md5sum benchmark::benchmark_main)
|
|
target_compile_options(md5_benchmark PRIVATE ${MD5_COMPILE_OPTIONS})
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------------------ #
|
|
|