From 540d9b8158d3cf42a04b4cdf455f1e6d16eaf4de Mon Sep 17 00:00:00 2001 From: Marius Volkhart Date: Wed, 6 Feb 2019 18:12:05 +0900 Subject: [PATCH] Add includes to build interface of decaf libs Apply Modern CMake best practices and use target_include_directories rather than include_directories for defining where to find header files. Where possible, scope was reduced to PRIVATE, indicating that the headers are required only for compilation, not when linking against the target. Additionally, the generated headers that are required for the decaf libs to work have been added to their build interface. This means that other projects that use CMake to build this project will correctly link against the decaf and decaf-static targets. --- CMakeLists.txt | 7 ------- src/CMakeLists.txt | 14 ++++++++------ src/curve25519/CMakeLists.txt | 10 ++-------- src/ed448goldilocks/CMakeLists.txt | 10 ++-------- src/generator/curve25519/CMakeLists.txt | 6 +----- src/generator/ed448goldilocks/CMakeLists.txt | 6 +----- src/p25519/CMakeLists.txt | 13 +++++++------ src/p448/CMakeLists.txt | 13 +++++++------ 8 files changed, 28 insertions(+), 51 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 588a71b..0954d94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,13 +34,6 @@ include(GNUInstallDirs) include(CheckSymbolExists) include(CMakePushCheckState) -include_directories( - ${GSOURCE_PATH}/include/ - src/include/ - src/ - ${CMAKE_CURRENT_BINARY_DIR} -) - set(STRICT_OPTIONS_CPP ) set(STRICT_OPTIONS_C ) set(STRICT_OPTIONS_CXX ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0294fc6..0f332cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -61,10 +61,6 @@ else() # nothing picked yet, stick to the message("Target architecture is general purpose 32bits") endif() -include_directories( - ${PROJECT_SOURCE_DIR}/src/include/${TARGET_ARCH_DIR} -) - set(DECAF_SOURCE_FILES_CXX ) @@ -79,7 +75,10 @@ if(ENABLE_STATIC) add_library(decaf-static STATIC ${DECAF_HEADER_FILES} ${DECAF_SOURCE_FILES_C} ${DECAF_SOURCE_FILES_CXX} $ $ $ $) add_dependencies(decaf-static generatedCode) set_target_properties(decaf-static PROPERTIES OUTPUT_NAME decaf) - target_include_directories(decaf-static PUBLIC) + target_include_directories(decaf-static + PUBLIC $ + PRIVATE ${PROJECT_SOURCE_DIR}/src/include + ) target_link_libraries(decaf-static INTERFACE) endif() if(ENABLE_SHARED) @@ -89,7 +88,10 @@ if(ENABLE_SHARED) set_target_properties(decaf PROPERTIES LINK_FLAGS "-stdlib=libc++") endif() set_target_properties(decaf PROPERTIES VERSION ${DECAF_SO_VERSION}) - target_include_directories(decaf PUBLIC) + target_include_directories(decaf + PUBLIC $ + PRIVATE ${PROJECT_SOURCE_DIR}/src/include + ) target_link_libraries(decaf PRIVATE) if(MSVC) if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") diff --git a/src/curve25519/CMakeLists.txt b/src/curve25519/CMakeLists.txt index 766736f..9374405 100644 --- a/src/curve25519/CMakeLists.txt +++ b/src/curve25519/CMakeLists.txt @@ -4,13 +4,6 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p25519 - ${GSOURCE_PATH}/c/p25519 - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} -) - set(CURVE25519_SOURCE_FILES_C ${GSOURCE_PATH}/c/curve25519/decaf.c ${GSOURCE_PATH}/c/curve25519/elligator.c @@ -26,5 +19,6 @@ SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/curve25519/eddsa.c PROPERTIES GENE SET_SOURCE_FILES_PROPERTIES(${PROJECT_SOURCE_DIR}/src/curve25519/decaf_tables.c PROPERTIES GENERATED 1) add_library(CURVE25519 OBJECT ${CURVE25519_SOURCE_FILES_C}) -add_dependencies(CURVE25519 generatedCode p25519) +add_dependencies(CURVE25519 generatedCode) +target_link_libraries(CURVE25519 PRIVATE p25519) set_target_properties(CURVE25519 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/ed448goldilocks/CMakeLists.txt b/src/ed448goldilocks/CMakeLists.txt index 3b93205..53ff7c3 100644 --- a/src/ed448goldilocks/CMakeLists.txt +++ b/src/ed448goldilocks/CMakeLists.txt @@ -4,13 +4,6 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ - -include_directories( - ${PROJECT_SOURCE_DIR}/src/p448 - ${GSOURCE_PATH}/c/p448 - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} -) - set(CURVE448_SOURCE_FILES_C ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c ${GSOURCE_PATH}/c/ed448goldilocks/elligator.c @@ -26,5 +19,6 @@ SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/ed448goldilocks/eddsa.c PROPERTIES SET_SOURCE_FILES_PROPERTIES(${PROJECT_SOURCE_DIR}/src/ed448goldilocks/decaf_tables.c PROPERTIES GENERATED 1) add_library(CURVE448 OBJECT ${CURVE448_SOURCE_FILES_C}) -add_dependencies(CURVE448 generatedCode p448) +add_dependencies(CURVE448 generatedCode) +target_link_libraries(CURVE448 PRIVATE p448) set_target_properties(CURVE448 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/generator/curve25519/CMakeLists.txt b/src/generator/curve25519/CMakeLists.txt index 0edb165..2349b63 100644 --- a/src/generator/curve25519/CMakeLists.txt +++ b/src/generator/curve25519/CMakeLists.txt @@ -84,17 +84,13 @@ add_custom_target(generatorCurve25519 DEPENDS ${GSOURCE_PATH}/include/decaf/point_255.hxx ${GSOURCE_PATH}/include/decaf/ed255.hxx ) -include_directories( - ${PROJECT_SOURCE_DIR}/src/p25519 - ${GSOURCE_PATH}/c/p25519 - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} -) add_executable(decaf_gen_tables_curve25519 EXCLUDE_FROM_ALL ${GSOURCE_PATH}/c/curve25519/decaf_gen_tables.c ${GSOURCE_PATH}/c/curve25519/decaf.c ${GSOURCE_PATH}/c/curve25519/scalar.c ${PROJECT_SOURCE_DIR}/src/utils.c $) +target_link_libraries(decaf_gen_tables_curve25519 PRIVATE p25519) add_custom_target(decaf_tables_curve25519 COMMAND decaf_gen_tables_curve25519 > ${PROJECT_SOURCE_DIR}/src/curve25519/decaf_tables.c diff --git a/src/generator/ed448goldilocks/CMakeLists.txt b/src/generator/ed448goldilocks/CMakeLists.txt index 1e31ee9..5c4b4b8 100644 --- a/src/generator/ed448goldilocks/CMakeLists.txt +++ b/src/generator/ed448goldilocks/CMakeLists.txt @@ -92,17 +92,13 @@ add_custom_target(generatorEd448goldilocks DEPENDS ${GSOURCE_PATH}/include/decaf/point_448.hxx ${GSOURCE_PATH}/include/decaf/ed448.hxx ) -include_directories( - ${PROJECT_SOURCE_DIR}/src/p448 - ${GSOURCE_PATH}/c/p448 - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} -) add_executable(decaf_gen_tables_ed448goldilocks EXCLUDE_FROM_ALL ${GSOURCE_PATH}/c/ed448goldilocks/decaf_gen_tables.c ${GSOURCE_PATH}/c/ed448goldilocks/decaf.c ${GSOURCE_PATH}/c/ed448goldilocks/scalar.c ${PROJECT_SOURCE_DIR}/src/utils.c $) +target_link_libraries(decaf_gen_tables_ed448goldilocks PRIVATE p448) add_custom_target(decaf_tables_ed448goldilocks COMMAND decaf_gen_tables_ed448goldilocks > ${PROJECT_SOURCE_DIR}/src/ed448goldilocks/decaf_tables.c diff --git a/src/p25519/CMakeLists.txt b/src/p25519/CMakeLists.txt index c6153fc..efd12ec 100644 --- a/src/p25519/CMakeLists.txt +++ b/src/p25519/CMakeLists.txt @@ -4,12 +4,6 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ -include_directories( - ${PROJECT_SOURCE_DIR}/src/p25519 - ${GSOURCE_PATH}/c/p25519 - ${PROJECT_SOURCE_DIR}/src/p25519/${TARGET_ARCH_DIR_P25519} -) - set(P25519_HEADER_FILES ${GSOURCE_PATH}/c/p25519/f_field.h ${TARGET_ARCH_DIR_P25519}/f_impl.h @@ -25,5 +19,12 @@ SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p25519/f_generic.c PROPERTIES GENE add_library(p25519 OBJECT ${P25519_HEADER_FILES} ${P25519_SOURCE_FILES_C}) add_dependencies(p25519 generatorP25519) +target_include_directories(p25519 + PUBLIC ${GSOURCE_PATH}/include + PUBLIC ${GSOURCE_PATH}/c/p25519 + PUBLIC ${TARGET_ARCH_DIR_P25519} + PUBLIC ${PROJECT_SOURCE_DIR}/src/include/${TARGET_ARCH_DIR} + PUBLIC ${PROJECT_SOURCE_DIR}/src/include +) set_target_properties(p25519 PROPERTIES POSITION_INDEPENDENT_CODE True) diff --git a/src/p448/CMakeLists.txt b/src/p448/CMakeLists.txt index c9eef94..2794b4b 100644 --- a/src/p448/CMakeLists.txt +++ b/src/p448/CMakeLists.txt @@ -4,12 +4,6 @@ # Released under the MIT License. See LICENSE.txt for license information. # ############################################################################ -include_directories( - ${PROJECT_SOURCE_DIR}/src/p448 - ${GSOURCE_PATH}/c/p448 - ${PROJECT_SOURCE_DIR}/src/p448/${TARGET_ARCH_DIR_P448} -) - set(P448_HEADER_FILES ${GSOURCE_PATH}/c/p448/f_field.h ${TARGET_ARCH_DIR_P448}/f_impl.h @@ -25,5 +19,12 @@ SET_SOURCE_FILES_PROPERTIES(${GSOURCE_PATH}/c/p448/f_generic.c PROPERTIES GENERA add_library(p448 OBJECT ${P448_HEADER_FILES} ${P448_SOURCE_FILES_C}) add_dependencies(p448 generatorP448) +target_include_directories(p448 + PUBLIC ${GSOURCE_PATH}/include + PUBLIC ${GSOURCE_PATH}/c/p448 + PUBLIC ${TARGET_ARCH_DIR_P448} + PUBLIC ${PROJECT_SOURCE_DIR}/src/include/${TARGET_ARCH_DIR} + PUBLIC ${PROJECT_SOURCE_DIR}/src/include +) set_target_properties(p448 PROPERTIES POSITION_INDEPENDENT_CODE True)