| # Copyright (c) 2018 Cisco and/or its affiliates. |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at: |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| macro(add_vpp_crypto_engine name) |
| cmake_parse_arguments(CRYPTO_ENGINE |
| "" |
| "LINK_FLAGS;COMPONENT;DEV_COMPONENT" |
| "SOURCES;LINK_LIBRARIES;SUPPORTED_OS_LIST" |
| ${ARGN} |
| ) |
| if (CRYPTO_ENGINE_SUPPORTED_OS_LIST AND NOT ${CMAKE_SYSTEM_NAME} IN_LIST CRYPTO_ENGINE_SUPPORTED_OS_LIST) |
| message(WARNING "unsupported OS - ${name} crypto engine disabled") |
| return() |
| endif() |
| set(crypto_engine_name ${name}_crypto_engine) |
| if(NOT CRYPTO_ENGINE_COMPONENT) |
| set(CRYPTO_ENGINE_COMPONENT vpp-crypto-engines) |
| endif() |
| if(NOT CRYPTO_ENGINE_DEV_COMPONENT) |
| if(NOT VPP_EXTERNAL_PROJECT) |
| set(CRYPTO_ENGINE_DEV_COMPONENT vpp-dev) |
| else() |
| set(CRYPTO_ENGINE_DEV_COMPONENT ${CRYPTO_ENGINE_COMPONENT}-dev) |
| endif() |
| endif() |
| |
| add_library(${crypto_engine_name} SHARED ${CRYPTO_ENGINE_SOURCES}) |
| target_compile_options(${crypto_engine_name} PUBLIC ${VPP_DEFAULT_MARCH_FLAGS}) |
| set_target_properties(${crypto_engine_name} PROPERTIES NO_SONAME 1) |
| target_compile_options(${crypto_engine_name} PRIVATE "-fvisibility=hidden") |
| target_compile_options (${crypto_engine_name} PRIVATE "-ffunction-sections") |
| target_compile_options (${crypto_engine_name} PRIVATE "-fdata-sections") |
| target_link_libraries (${crypto_engine_name} "-Wl,--gc-sections") |
| set(deps "") |
| if(NOT VPP_EXTERNAL_PROJECT) |
| list(APPEND deps vpp_version_h) |
| endif() |
| if(deps) |
| add_dependencies(${crypto_engine_name} ${deps}) |
| endif() |
| set_target_properties(${crypto_engine_name} PROPERTIES |
| PREFIX "" |
| LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vpp_crypto_engines) |
| if(CRYPTO_ENGINE_LINK_LIBRARIES) |
| target_link_libraries(${crypto_engine_name} ${CRYPTO_ENGINE_LINK_LIBRARIES}) |
| endif() |
| if(CRYPTO_ENGINE_LINK_FLAGS) |
| set_target_properties(${crypto_engine_name} PROPERTIES LINK_FLAGS "${CRYPTO_ENGINE_LINK_FLAGS}") |
| endif() |
| |
| install( |
| TARGETS ${crypto_engine_name} |
| DESTINATION ${VPP_LIBRARY_DIR}/vpp_crypto_engines |
| COMPONENT ${CRYPTO_ENGINE_COMPONENT} |
| ) |
| endmacro() |
| |
| macro(vpp_crypto_engine_find_library n var name) |
| find_library(${var} NAMES ${name} ${ARGN}) |
| mark_as_advanced(${var}) |
| if (NOT ${var}) |
| message(WARNING "-- ${name} library not found - ${n} crypto engine disabled") |
| return() |
| endif() |
| message(STATUS "${n} crypto engine needs ${name} library - found at ${${var}}") |
| endmacro() |