From 9692d6a9ae2fe7ca0391d1a2f725617daa80d63e Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 29 Apr 2017 17:15:31 +0300 Subject: split root CMakeLists.txt --- CMakeLists.txt | 87 +++++++--------------------------------------------- common.cmake | 75 ++++++++++++++++++++++++++++++++++++++++++++ cxx/CMakeLists.txt | 12 +++----- utils/CMakeLists.txt | 12 ++++---- 4 files changed, 96 insertions(+), 90 deletions(-) create mode 100644 common.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2eed01d..b1fa830 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,98 +1,33 @@ project(aes_tools) -get_directory_property(parent_directory PARENT_DIRECTORY) -set(is_root_project $) - -set(AES_TOOLS_USE_STATIC_RUNTIME "${is_root_project}" CACHE BOOL "Link the runtime statically") -set(AES_TOOLS_STRIP_SYMBOL_TABLE "${is_root_project}" CACHE BOOL "Strip symbol tables") +include(common.cmake) set(AES_TOOLS_ASM OFF CACHE BOOL "Use the assembly language implementation instead of the one in C") -if(is_root_project) - if(MSVC) - add_compile_options(/MP /W4) - elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - add_compile_options(-Wall -Wextra) - endif() -endif() - -function(use_static_runtime_msvc target) - target_compile_options("${target}" PRIVATE - $<$:/MTd> - $<$>:/MT>) -endfunction() - -function(use_static_runtime_gcc target) - get_target_property(target_type "${target}" TYPE) - if(target_type STREQUAL EXECUTABLE) - target_link_libraries("${target}" PRIVATE -static) - endif() -endfunction() - -function(use_static_runtime target) - if(MSVC) - use_static_runtime_msvc("${target}") - elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - use_static_runtime_gcc("${target}") - else() - message(WARNING "Unrecognized toolset") - endif() -endfunction() - -function(strip_symbol_table_gcc target) - target_link_libraries("${target}" PRIVATE - $<$,$>:-s>) -endfunction() - -function(strip_symbol_table target) - if(MSVC) - elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - strip_symbol_table_gcc("${target}") - else() - message(WARNING "Unrecognized toolset") - endif() -endfunction() - -macro(add_executable target) - _add_executable(${ARGV}) - if(TARGET "${target}") - if(AES_TOOLS_USE_STATIC_RUNTIME) - use_static_runtime("${target}") - endif() - if(AES_TOOLS_STRIP_SYMBOL_TABLE) - strip_symbol_table("${target}") - endif() - endif() -endmacro() - -file(GLOB_RECURSE libaes_headers "include/*.h") +file(GLOB_RECURSE aes_include "include/*.h") if(MSVC AND AES_TOOLS_ASM) enable_language(ASM_MASM) - file(GLOB libaes_c_sources "src/*.c") - file(GLOB libaes_asm_sources "src/asm/*.asm") - set(libaes_sources ${libaes_asm_sources} ${libaes_c_sources}) - set_source_files_properties(${libaes_asm_sources} PROPERTIES COMPILE_FLAGS /safeseh) + file(GLOB aes_src_c "src/*.c") + file(GLOB aes_src_asm "src/asm/*.asm") + set(aes_src ${aes_src_asm} ${aes_src_c}) + set_source_files_properties(${aes_src_asm} PROPERTIES COMPILE_FLAGS /safeseh) # Setting CMAKE_ASM_MASM_FLAGS doesn't work: http://www.cmake.org/Bug/view.php?id=14711 else() - file(GLOB_RECURSE libaes_sources "src/*.c") + file(GLOB_RECURSE aes_src "src/*.c") endif() -add_library(libaes ${libaes_sources} ${libaes_headers}) -target_include_directories(libaes PUBLIC include/) - -if(AES_TOOLS_USE_STATIC_RUNTIME) - use_static_runtime(libaes) -endif() +add_library(aes ${aes_src} ${aes_include}) +target_include_directories(aes PUBLIC include/) if(is_root_project) if(MSVC) - target_compile_definitions(libaes PRIVATE _CRT_SECURE_NO_WARNINGS) + target_compile_definitions(aes PRIVATE _CRT_SECURE_NO_WARNINGS) endif() endif() if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - target_compile_options(libaes PUBLIC -mssse3 -maes) + target_compile_options(aes PUBLIC -mssse3 -maes) endif() add_subdirectory(cxx) diff --git a/common.cmake b/common.cmake new file mode 100644 index 0000000..1bd0c3d --- /dev/null +++ b/common.cmake @@ -0,0 +1,75 @@ +get_directory_property(parent_directory PARENT_DIRECTORY) +set(is_root_project $) + +set(USE_STATIC_RUNTIME "${is_root_project}" CACHE BOOL "Link the runtime statically") +set(STRIP_SYMBOL_TABLE "${is_root_project}" CACHE BOOL "Strip symbol tables") + +if(is_root_project) + if(MSVC) + add_compile_options(/MP /W4) + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + add_compile_options(-Wall -Wextra) + endif() +endif() + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +function(use_static_runtime_msvc target) + target_compile_options("${target}" PRIVATE + $<$:/MTd> + $<$>:/MT>) +endfunction() + +function(use_static_runtime_gcc target) + get_target_property(target_type "${target}" TYPE) + if(target_type STREQUAL EXECUTABLE) + target_link_libraries("${target}" PRIVATE -static) + endif() +endfunction() + +function(use_static_runtime target) + if(MSVC) + use_static_runtime_msvc("${target}") + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + use_static_runtime_gcc("${target}") + else() + message(WARNING "Unrecognized toolset") + endif() +endfunction() + +function(strip_symbol_table_gcc target) + target_link_libraries("${target}" PRIVATE + $<$,$>:-s>) +endfunction() + +function(strip_symbol_table target) + if(MSVC) + elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + strip_symbol_table_gcc("${target}") + else() + message(WARNING "Unrecognized toolset") + endif() +endfunction() + +macro(add_executable target) + _add_executable(${ARGV}) + if(TARGET "${target}") + if(USE_STATIC_RUNTIME) + use_static_runtime("${target}") + endif() + if(STRIP_SYMBOL_TABLE) + strip_symbol_table("${target}") + endif() + endif() +endmacro() + +macro(add_library target) + _add_library(${ARGV}) + if(TARGET "${target}") + if(USE_STATIC_RUNTIME) + use_static_runtime("${target}") + endif() + endif() +endmacro() diff --git a/cxx/CMakeLists.txt b/cxx/CMakeLists.txt index d54caae..1c028c0 100644 --- a/cxx/CMakeLists.txt +++ b/cxx/CMakeLists.txt @@ -1,10 +1,6 @@ find_package(Boost REQUIRED) -add_library(libaesxx INTERFACE) -target_include_directories(libaesxx INTERFACE include/) -target_include_directories(libaesxx SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) -target_link_libraries(libaesxx INTERFACE libaes) - -if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - target_compile_options(libaesxx INTERFACE -std=c++11) -endif() +add_library(aesxx INTERFACE) +target_include_directories(aesxx INTERFACE include/) +target_include_directories(aesxx SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) +target_link_libraries(aesxx INTERFACE aes) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index c159e75..0f3590b 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -8,34 +8,34 @@ set(block_util_headers block_cmd_parser.hpp block_dumper.hpp block_input.hpp dat add_executable(util_encrypt_block encrypt_block.cpp ${block_util_headers}) target_include_directories(util_encrypt_block SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_encrypt_block PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_encrypt_block PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_encrypt_block PROPERTIES OUTPUT_NAME encrypt_block) add_executable(util_decrypt_block decrypt_block.cpp ${block_util_headers}) target_include_directories(util_decrypt_block SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_decrypt_block PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_decrypt_block PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_decrypt_block PROPERTIES OUTPUT_NAME decrypt_block) set(file_util_headers data_parsers.hpp file_cmd_parser.hpp helpers/file.hpp) add_executable(util_encrypt_file encrypt_file.cpp ${file_util_headers}) target_include_directories(util_encrypt_file SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_encrypt_file PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_encrypt_file PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_encrypt_file PROPERTIES OUTPUT_NAME encrypt_file) add_executable(util_decrypt_file decrypt_file.cpp ${file_util_headers}) target_include_directories(util_decrypt_file SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_decrypt_file PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_decrypt_file PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_decrypt_file PROPERTIES OUTPUT_NAME decrypt_file) set(bmp_util_headers ${file_util_headers} helpers/bmp.hpp) add_executable(util_encrypt_bmp encrypt_bmp.cpp ${bmp_util_headers}) target_include_directories(util_encrypt_bmp SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_encrypt_bmp PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_encrypt_bmp PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_encrypt_bmp PROPERTIES OUTPUT_NAME encrypt_bmp) add_executable(util_decrypt_bmp decrypt_bmp.cpp ${bmp_util_headers}) target_include_directories(util_decrypt_bmp SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) -target_link_libraries(util_decrypt_bmp PRIVATE libaesxx ${Boost_LIBRARIES}) +target_link_libraries(util_decrypt_bmp PRIVATE aesxx ${Boost_LIBRARIES}) set_target_properties(util_decrypt_bmp PROPERTIES OUTPUT_NAME decrypt_bmp) -- cgit v1.2.3