diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 35ff4c112..df2d630b5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,6 +3,12 @@ cmake_minimum_required(VERSION 3.5) # Defer enabling C and CXX languages. project(BoringSSL NONE) +# Don't install BoringSSL to system directories by default; it has no stable +# ABI. Instead, default to an "install" directory under the source. +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install CACHE PATH "" FORCE) +endif() + if(WIN32) # On Windows, prefer cl over gcc if both are available. By default most of # the CMake generators prefer gcc, even on Windows. @@ -541,6 +547,7 @@ if(USE_CUSTOM_LIBCXX) set_target_properties(libcxxabi PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes -Wno-implicit-fallthrough") # libc++abi depends on libc++ internal headers. set_property(TARGET libcxxabi APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/util/bot/libcxx/src") + install(TARGETS libcxxabi EXPORT OpenSSLTargets) add_library(libcxx ${LIBCXX_SOURCES}) if(ASAN OR MSAN OR TSAN) @@ -556,6 +563,7 @@ if(USE_CUSTOM_LIBCXX) -DLIBCXX_BUILDING_LIBCXXABI ) target_link_libraries(libcxx libcxxabi) + install(TARGETS libcxx EXPORT OpenSSLTargets) endif() # Add minimal googletest targets. The provided one has many side-effects, and @@ -656,3 +664,12 @@ add_custom_target( WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} DEPENDS all_tests bssl_shim handshaker fips_specific_tests_if_any USES_TERMINAL) + +install(DIRECTORY include/ TYPE INCLUDE) + +install(EXPORT OpenSSLTargets + FILE OpenSSLTargets.cmake + NAMESPACE OpenSSL:: + DESTINATION lib/cmake/OpenSSL +) +install(FILES OpenSSLConfig.cmake DESTINATION lib/cmake/OpenSSL) diff --git a/src/OpenSSLConfig.cmake b/src/OpenSSLConfig.cmake new file mode 100644 index 000000000..3ebaf19ba --- /dev/null +++ b/src/OpenSSLConfig.cmake @@ -0,0 +1,32 @@ +include(${CMAKE_CURRENT_LIST_DIR}/OpenSSLTargets.cmake) + +# Recursively collect dependency locations for the imported targets. +macro(_openssl_config_libraries libraries target) + get_property(_DEPS TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + foreach(_DEP ${_DEPS}) + if(TARGET ${_DEP}) + _openssl_config_libraries(${libraries} ${_DEP}) + else() + list(APPEND ${libraries} ${_DEP}) + endif() + endforeach() + get_property(_LOC TARGET ${target} PROPERTY LOCATION) + list(APPEND ${libraries} ${_LOC}) +endmacro() + +set(OPENSSL_FOUND YES) +get_property(OPENSSL_INCLUDE_DIR TARGET OpenSSL::SSL PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +get_property(OPENSSL_CRYPTO_LIBRARY TARGET OpenSSL::Crypto PROPERTY LOCATION) +_openssl_config_libraries(OPENSSL_CRYPTO_LIBRARIES OpenSSL::Crypto) +list(REMOVE_DUPLICATES OPENSSL_CRYPTO_LIBRARIES) + +get_property(OPENSSL_SSL_LIBRARY TARGET OpenSSL::Crypto PROPERTY LOCATION) +_openssl_config_libraries(OPENSSL_SSL_LIBRARIES OpenSSL::SSL) +list(REMOVE_DUPLICATES OPENSSL_SSL_LIBRARIES) + +set(OPENSSL_LIBRARIES ${OPENSSL_CRYPTO_LIBRARIES} ${OPENSSL_SSL_LIBRARIES}) +list(REMOVE_DUPLICATES OPENSSL_LIBRARIES) + +set(_DEP) +set(_DEPS) +set(_LOC) diff --git a/src/crypto/CMakeLists.txt b/src/crypto/CMakeLists.txt index 1cb68ca13..39c99215a 100644 --- a/src/crypto/CMakeLists.txt +++ b/src/crypto/CMakeLists.txt @@ -435,6 +435,12 @@ add_library( ${CRYPTO_ARCH_SOURCES} ${CRYPTO_FIPS_OBJECTS} ) +target_include_directories(crypto INTERFACE + $ + $ +) +install(TARGETS crypto EXPORT OpenSSLTargets) +set_property(TARGET crypto PROPERTY EXPORT_NAME Crypto) if(FIPS_SHARED) # Rewrite libcrypto.so to inject the correct module hash value. This assumes diff --git a/src/ssl/CMakeLists.txt b/src/ssl/CMakeLists.txt index 4f4abf8a4..ed02bb56d 100644 --- a/src/ssl/CMakeLists.txt +++ b/src/ssl/CMakeLists.txt @@ -41,6 +41,12 @@ add_library( tls13_enc.cc tls13_server.cc ) +target_include_directories(ssl INTERFACE + $ + $ +) +install(TARGETS ssl EXPORT OpenSSLTargets) +set_property(TARGET ssl PROPERTY EXPORT_NAME SSL) add_dependencies(ssl global_target) diff --git a/src/tool/CMakeLists.txt b/src/tool/CMakeLists.txt index a591b7def..e695f5633 100644 --- a/src/tool/CMakeLists.txt +++ b/src/tool/CMakeLists.txt @@ -21,6 +21,7 @@ add_executable( tool.cc transport_common.cc ) +install(TARGETS bssl) add_dependencies(bssl global_target) diff --git a/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt b/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt index 267f82c37..f13f6df0f 100644 --- a/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt +++ b/src/util/fipstools/acvp/modulewrapper/CMakeLists.txt @@ -7,6 +7,7 @@ if(FIPS) main.cc modulewrapper.cc ) + install(TARGETS modulewrapper) add_dependencies(modulewrapper global_target)