blob: 9587e00c0f01df17b61b4d9b9359776d0bc808f4 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
project( openssl LANGUAGES NONE )
set( VERSION 1.1.1a )
set( SHA256 fc20130f8b7cbd2fb918b2f14e2f429e109c31ddd0fb38fc5d71d9ffed3f9f41 )
if ("SunOS" STREQUAL ${CMAKE_SYSTEM_NAME})
# No debug for Solaris without patching Configure
if ("i386" STREQUAL ${CMAKE_SYSTEM_PROCESSOR})
if (64 EQUAL ${BUILD_BITS})
set( openssl_PLATFORM solaris64-x86_64-cc )
else()
set( openssl_PLATFORM solaris-x86-cc )
endif()
elseif ("sparc" STREQUAL ${CMAKE_SYSTEM_PROCESSOR})
if (64 EQUAL ${BUILD_BITS})
set( openssl_PLATFORM solaris64-sparcv9-cc )
else()
set( openssl_PLATFORM solaris-sparcv9-cc )
endif()
endif()
elseif ("Linux" STREQUAL ${CMAKE_SYSTEM_NAME})
if (64 EQUAL ${BUILD_BITS})
set( openssl_PLATFORM $<$<CONFIG:Debug>:debug->linux-x86_64 )
else()
set( openssl_PLATFORM $<$<CONFIG:Debug>:debug->linux-elf )
set( openssl_CONFIGURE_FLAGS ${openssl_CONFIGURE_FLAGS} -m32 )
endif()
if ("Clang" STREQUAL ${CMAKE_CXX_COMPILER_ID})
set( openssl_PLATFORM ${openssl_PLATFORM}-clang )
endif()
elseif ("Darwin" STREQUAL ${CMAKE_SYSTEM_NAME})
# No debug for OS X without patching Configure
set( openssl_PLATFORM darwin64-x86_64-cc )
elseif ("Windows" STREQUAL ${CMAKE_SYSTEM_NAME})
if (64 EQUAL ${BUILD_BITS})
set( openssl_PLATFORM $<$<CONFIG:Debug>:debug->VC-WIN64A no-asm )
else()
set( openssl_PLATFORM $<$<CONFIG:Debug>:debug->VC-WIN32 no-asm)
endif()
endif()
if (NOT DEFINED openssl_PLATFORM)
message( FATAL_ERROR "openssl_PLATFORM unset for ${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}" )
endif()
if (${WIN32})
find_package(Perl REQUIRED)
# Keeps separate release/debug objects in build script
set ( _CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure ${openssl_PLATFORM} --prefix=<INSTALL_DIR>/$<CONFIG> --openssldir=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} )
set ( _BUILD_COMMAND nmake )
set ( _INSTALL_COMMAND nmake install_sw )
else()
# TODO Configure trips up without MAKE
set ( _CONFIGURE_COMMAND MAKE=$(MAKE) ./Configure threads zlib shared --prefix=<INSTALL_DIR>/$<CONFIG> ${openssl_CONFIGURE_FLAGS} ${openssl_PLATFORM} )
set ( _BUILD_COMMAND $(MAKE) all )
set ( _INSTALL_COMMAND $(MAKE) install_sw )
endif()
set( EXTERN ${PROJECT_NAME}-extern )
include(ExternalProject)
ExternalProject_Add( ${EXTERN}
URL "https://www.openssl.org/source/openssl-${VERSION}.tar.gz"
URL_HASH SHA256=${SHA256}
UPDATE_COMMAND ""
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND "${_CONFIGURE_COMMAND}"
BUILD_COMMAND "${_BUILD_COMMAND}"
INSTALL_COMMAND "${_INSTALL_COMMAND}"
# TODO TEST_COMMAND $(MAKE) test
)
ExternalProject_Get_Property( ${EXTERN} INSTALL_DIR )
set(INSTALL_DIR "${INSTALL_DIR}/$<CONFIG>")
if (${WIN32})
set( CMAKE_SHARED_LIBRARY_PREFIX lib )
else()
set( CMAKE_LINK_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
endif()
add_library(OpenSSL_SSL INTERFACE)
target_include_directories(OpenSSL_SSL SYSTEM INTERFACE
$<BUILD_INTERFACE:${INSTALL_DIR}/include>
)
target_link_libraries(OpenSSL_SSL INTERFACE
${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}ssl${CMAKE_LINK_LIBRARY_SUFFIX}
)
add_dependencies(OpenSSL_SSL ${EXTERN})
add_library(OpenSSL_Crypto INTERFACE)
target_include_directories(OpenSSL_Crypto SYSTEM INTERFACE
$<BUILD_INTERFACE:${INSTALL_DIR}/include>
)
target_link_libraries(OpenSSL_Crypto INTERFACE
${INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}crypto${CMAKE_LINK_LIBRARY_SUFFIX}
)
add_dependencies(OpenSSL_Crypto ${EXTERN})
set_target_properties(OpenSSL_SSL OpenSSL_Crypto PROPERTIES
INTERFACE_LIBRARY_DIR ${INSTALL_DIR}/lib
INTERFACE_RUNTIME_DIR ${INSTALL_DIR}/bin
)
add_library(OpenSSL::SSL ALIAS OpenSSL_SSL)
add_library(OpenSSL::Crypto ALIAS OpenSSL_Crypto)