Skip to content

Commit

Permalink
Support multi config generators on all platforms
Browse files Browse the repository at this point in the history
  • Loading branch information
behda committed Feb 24, 2024
1 parent 1db0368 commit 19b5d7a
Showing 1 changed file with 32 additions and 30 deletions.
62 changes: 32 additions & 30 deletions submodules/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,18 @@ if (QUIC_USE_OPENSSL3)
list(APPEND OPENSSL_CONFIG_FLAGS no-uplink no-cmp no-fips no-padlockeng no-siv no-legacy no-dtls no-deprecated --libdir=lib)
endif()

set(LIBSSL_DEBUG_PATH ${OPENSSL_DIR}/debug/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBCRYPTO_DEBUG_PATH ${OPENSSL_DIR}/debug/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBSSL_PATH ${OPENSSL_DIR}/release/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBCRYPTO_PATH ${OPENSSL_DIR}/release/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})

if (WIN32)

if (DEFINED ENV{CommonProgramFiles})
message(STATUS "Setting openssldir to $ENV{CommonProgramFiles}\\SSL")
list(APPEND OPENSSL_CONFIG_FLAGS --openssldir=\"$ENV{CommonProgramFiles}\\SSL\")
endif()

set(LIBSSL_DEBUG_PATH ${OPENSSL_DIR}/debug/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBCRYPTO_DEBUG_PATH ${OPENSSL_DIR}/debug/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBSSL_PATH ${OPENSSL_DIR}/release/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBCRYPTO_PATH ${OPENSSL_DIR}/release/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})

if (QUIC_UWP_BUILD)
# Translate target architecture into corresponding OpenSSL build flag
if (${SYSTEM_PROCESSOR} STREQUAL "arm64")
Expand Down Expand Up @@ -117,7 +117,7 @@ if (WIN32)
# Create working and output directories as needed
file(MAKE_DIRECTORY ${OPENSSL_DIR}/debug/include)
file(MAKE_DIRECTORY ${OPENSSL_DIR}/release/include)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/${QUIC_OPENSSL}/openssl/debug)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release)

# Configure steps for debug and release variants
Expand Down Expand Up @@ -173,9 +173,6 @@ if (WIN32)

else()

set(LIBSSL_PATH ${OPENSSL_DIR}/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBCRYPTO_PATH ${OPENSSL_DIR}/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX})

# Figure out the default cert directory
execute_process(
COMMAND openssl version -d
Expand All @@ -197,8 +194,6 @@ else()
list(APPEND OPENSSL_CONFIG_FLAGS --openssldir=/usr/local/ssl)
endif()

list(APPEND OPENSSL_CONFIG_FLAGS --prefix=${OPENSSL_DIR})

if (QUIC_ENABLE_SANITIZERS)
list(APPEND OPENSSL_CONFIG_FLAGS enable-asan enable-ubsan)
endif()
Expand Down Expand Up @@ -271,15 +266,17 @@ else()
endif()

# Create working and output directories as needed
file(MAKE_DIRECTORY ${OPENSSL_DIR}/include)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL})
file(MAKE_DIRECTORY ${OPENSSL_DIR}/debug/include)
file(MAKE_DIRECTORY ${OPENSSL_DIR}/release/include)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug)
file(MAKE_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release)

# Configure steps for debug and release variants
add_custom_command(
WORKING_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}
OUTPUT ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/Makefile
WORKING_DIRECTORY $<IF:$<CONFIG:Debug>,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release>
OUTPUT $<IF:$<CONFIG:Debug>,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug/Makefile,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release/Makefile>
COMMAND SYSTEM=${CMAKE_HOST_SYSTEM_NAME}
${OPENSSL_CONFIG_CMD} ${OPENSSL_CONFIG_FLAGS}
${OPENSSL_CONFIG_CMD} ${OPENSSL_CONFIG_FLAGS} $<$<CONFIG:Debug>:--debug> $<$<CONFIG:Debug>:--prefix=${OPENSSL_DIR}/debug> $<$<NOT:$<CONFIG:Debug>>:--prefix=${OPENSSL_DIR}/release>
COMMENT "OpenSSL configure"
)

Expand All @@ -289,10 +286,10 @@ else()
message(STATUS "Configuring OpenSSL: ${OPENSSL_CONFIG_CMD} ${OPENSSL_CONFIG_FLAGS}")
# Compile/install commands for debug and release variants
add_custom_command(
OUTPUT ${LIBSSL_PATH}
OUTPUT ${LIBCRYPTO_PATH}
DEPENDS ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/Makefile
WORKING_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}
OUTPUT $<IF:$<CONFIG:Debug>,${LIBSSL_DEBUG_PATH},${LIBSSL_PATH}>
OUTPUT $<IF:$<CONFIG:Debug>,${LIBCRYPTO_DEBUG_PATH},${LIBCRYPTO_PATH}>
DEPENDS $<IF:$<CONFIG:Debug>,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug/Makefile,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release/Makefile>
WORKING_DIRECTORY $<IF:$<CONFIG:Debug>,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release>
COMMAND make install_dev -j${NPROCS}
COMMENT "OpenSSL build"
)
Expand All @@ -302,21 +299,23 @@ else()
# That is ok if you use either one consistently but it fails to link when we use dynamic crypto with static ssl.
# To fix that we need little hackery - see openssl3/ssl/build.info
add_custom_command(
OUTPUT ${LIBSSL_PATH}
OUTPUT ${LIBCRYPTO_PATH}
OUTPUT $<IF:$<CONFIG:Debug>,${LIBSSL_DEBUG_PATH},${LIBSSL_PATH}>
OUTPUT $<IF:$<CONFIG:Debug>,${LIBCRYPTO_DEBUG_PATH},${LIBCRYPTO_PATH}>
APPEND
WORKING_DIRECTORY ${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}
COMMAND ar x ${LIBCRYPTO_PATH} libcrypto-lib-packet.o libcommon-lib-tls_pad.o
COMMAND ar r ${LIBSSL_PATH} libcrypto-lib-packet.o libcommon-lib-tls_pad.o
WORKING_DIRECTORY $<IF:$<CONFIG:Debug>,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/debug,${QUIC_BUILD_DIR}/submodules/${QUIC_OPENSSL}/release>
COMMAND ar x $<IF:$<CONFIG:Debug>,${LIBCRYPTO_DEBUG_PATH},${LIBCRYPTO_PATH}> libcrypto-lib-packet.o libcommon-lib-tls_pad.o
COMMAND ar r $<IF:$<CONFIG:Debug>,${LIBSSL_DEBUG_PATH},${LIBSSL_PATH}> libcrypto-lib-packet.o libcommon-lib-tls_pad.o
)
endif()

# Named target depending on the final lib artifacts produced by custom commands
add_custom_target(
OpenSSL_Target
DEPENDS
${LIBSSL_PATH}
${LIBCRYPTO_PATH}
$<$<CONFIG:Debug>:${LIBSSL_DEBUG_PATH}>
$<$<NOT:$<CONFIG:Debug>>:${LIBSSL_PATH}>
$<$<CONFIG:Debug>:${LIBCRYPTO_DEBUG_PATH}>
$<$<NOT:$<CONFIG:Debug>>:${LIBCRYPTO_PATH}>
)
set_property(TARGET OpenSSL_Target PROPERTY FOLDER "${QUIC_FOLDER_PREFIX}helpers")

Expand All @@ -327,13 +326,15 @@ else()
target_include_directories(
OpenSSLQuic
INTERFACE
${OPENSSL_DIR}/include
$<$<CONFIG:Debug>:${OPENSSL_DIR}/debug/include>
$<$<NOT:$<CONFIG:Debug>>:${OPENSSL_DIR}/release/include>
)

target_link_libraries(
OpenSSLQuic
INTERFACE
${LIBSSL_PATH}
$<$<CONFIG:Debug>:${LIBSSL_DEBUG_PATH}>
$<$<NOT:$<CONFIG:Debug>>:${LIBSSL_PATH}>
)

if (QUIC_USE_SYSTEM_LIBCRYPTO)
Expand All @@ -359,7 +360,8 @@ else()
target_link_libraries(
OpenSSLQuic
INTERFACE
${LIBCRYPTO_PATH}
$<$<CONFIG:Debug>:${LIBCRYPTO_DEBUG_PATH}>
$<$<NOT:$<CONFIG:Debug>>:${LIBCRYPTO_PATH}>
)
endif()

Expand Down

0 comments on commit 19b5d7a

Please sign in to comment.