From 9d7701c370f06be663f2a485507d388ab5194ca8 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Wed, 31 Aug 2016 14:09:51 +0200 Subject: Added a CMake system to easily add and choose crypto implementations. --- CMakeModules/curve25519_implementations.cmake | 3 +++ CMakeModules/get_target_name.cmake | 10 ++++++++++ CMakeModules/implementations.cmake | 23 +++++++++++++++++++++++ CMakeModules/rsa_implementations.cmake | 3 +++ 4 files changed, 39 insertions(+) create mode 100644 CMakeModules/curve25519_implementations.cmake create mode 100644 CMakeModules/get_target_name.cmake create mode 100644 CMakeModules/implementations.cmake create mode 100644 CMakeModules/rsa_implementations.cmake (limited to 'CMakeModules') diff --git a/CMakeModules/curve25519_implementations.cmake b/CMakeModules/curve25519_implementations.cmake new file mode 100644 index 0000000..6be8dca --- /dev/null +++ b/CMakeModules/curve25519_implementations.cmake @@ -0,0 +1,3 @@ +include(implementations) + +DefineImplementations("curve25519") diff --git a/CMakeModules/get_target_name.cmake b/CMakeModules/get_target_name.cmake new file mode 100644 index 0000000..6e7c6fd --- /dev/null +++ b/CMakeModules/get_target_name.cmake @@ -0,0 +1,10 @@ + +function(get_target_name target_name) + +get_filename_component(implementation ${CMAKE_CURRENT_LIST_DIR} NAME) +get_filename_component(implementation_path ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) +get_filename_component(algorithm ${implementation_path} NAME) + +set(${target_name} "${algorithm}-${implementation}" PARENT_SCOPE) + +endfunction(get_target_name) diff --git a/CMakeModules/implementations.cmake b/CMakeModules/implementations.cmake new file mode 100644 index 0000000..aa6a8bf --- /dev/null +++ b/CMakeModules/implementations.cmake @@ -0,0 +1,23 @@ +function(DefineImplementations prefix) + + FILE(GLOB children RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${prefix} ${CMAKE_CURRENT_SOURCE_DIR}/${prefix}/*) + + set(implementations "") + foreach(child ${children}) + IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${prefix}/${child}) + LIST(APPEND implementations ${child}) + ENDIF() + ENDFOREACH() + + list(LENGTH implementations nr_implementations) + + if(nr_implementations EQUAL 0) + message(FATAL_ERROR "Cannot call DefineImplementations with an empty implementations list.") + endif() + + list(GET implementations 0 default) + set(${prefix}_implementations ${implementations} PARENT_SCOPE) + set(${prefix}_implementation "${default}" CACHE STRING "${prefix} implementation chosen at configure time") + set_property(CACHE ${prefix}_implementation PROPERTY STRINGS ${implementations}) + +endfunction(DefineImplementations) diff --git a/CMakeModules/rsa_implementations.cmake b/CMakeModules/rsa_implementations.cmake new file mode 100644 index 0000000..171058f --- /dev/null +++ b/CMakeModules/rsa_implementations.cmake @@ -0,0 +1,3 @@ +include(implementations) + +DefineImplementations("rsa") -- cgit v1.2.3-70-g09d2