123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- cmake_minimum_required(VERSION 3.9)
- project(openssl C)
- if(NOT SOURCE_PATH)
- message(FATAL_ERROR "Requires SOURCE_PATH")
- endif()
- if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR CMAKE_SYSTEM_NAME STREQUAL "Linux")
- if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
- set(PLATFORM linux-x86_64)
- else()
- set(PLATFORM linux-generic32)
- endif()
- elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
- if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64")
- set(PLATFORM ios64-xcrun)
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm")
- set(PLATFORM ios-xcrun)
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" OR
- VCPKG_TARGET_ARCHITECTURE MATCHES "x64")
- set(PLATFORM iossimulator-xcrun)
- else()
- message(FATAL_ERROR "Unknown iOS target architecture: ${VCPKG_TARGET_ARCHITECTURE}")
- endif()
- # disable that makes linkage error (e.g. require stderr usage)
- list(APPEND DISABLES no-ui no-asm)
- elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64")
- set(PLATFORM darwin64-arm64-cc)
- else()
- set(PLATFORM darwin64-x86_64-cc)
- endif()
- elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
- set(PLATFORM BSD-generic64)
- elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
- set(PLATFORM BSD-generic64)
- elseif(MINGW)
- if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
- set(PLATFORM mingw64)
- else()
- set(PLATFORM mingw)
- endif()
- elseif(EMSCRIPTEN)
- set(MAKE $ENV{EMSDK}/upstream/emscripten/emmake)
- set(ENV{MAKE} $ENV{EMSDK}/upstream/emscripten/emmake)
- else()
- message(FATAL_ERROR "Unknown platform")
- endif()
- get_filename_component(COMPILER_ROOT "${CMAKE_C_COMPILER}" DIRECTORY)
- message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}")
- message("COMPILER_ROOT=${COMPILER_ROOT}")
- message("CMAKE_SYSROOT=${CMAKE_SYSROOT}")
- message("CMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}")
- message("CMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
- message("CMAKE_C_FLAGS=${CMAKE_C_FLAGS}")
- message("CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}")
- message("CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}")
- message("CMAKE_INCLUDE_SYSTEM_FLAG_C=${CMAKE_INCLUDE_SYSTEM_FLAG_C}")
- message("CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG=${CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG}")
- string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE)
- set(CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BUILD_TYPE}}")
- if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
- set(CFLAGS "${CFLAGS} -Wno-error=unused-command-line-argument")
- endif()
- if(CMAKE_C_COMPILER_TARGET AND CMAKE_C_COMPILE_OPTIONS_TARGET)
- set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_TARGET}${CMAKE_C_COMPILER_TARGET}")
- endif()
- if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN AND CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN)
- set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}")
- endif()
- if(CMAKE_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT)
- set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}")
- elseif(CMAKE_OSX_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT)
- set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_OSX_SYSROOT}")
- endif()
- if (CMAKE_OSX_DEPLOYMENT_TARGET AND CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG)
- set(CFLAGS "${CFLAGS} ${CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG}${CMAKE_OSX_DEPLOYMENT_TARGET}")
- elseif((CMAKE_SYSTEM_NAME STREQUAL "Darwin") AND (VCPKG_TARGET_ARCHITECTURE MATCHES "arm64"))
- set(CFLAGS "${CFLAGS} -mmacosx-version-min=11.0")
- endif()
- string(REGEX REPLACE "^ " "" CFLAGS "${CFLAGS}")
- set(ENV{ANDROID_DEV} "${CMAKE_SYSROOT}/usr")
- if(NOT IOS)
- set(ENV{CC} "${CMAKE_C_COMPILER}")
- endif()
- message("ENV{ANDROID_DEV}=$ENV{ANDROID_DEV}")
- get_filename_component(SOURCE_PATH_NAME "${SOURCE_PATH}" NAME)
- set(BUILDDIR "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_PATH_NAME}")
- if(NOT EXISTS "${BUILDDIR}")
- file(COPY ${SOURCE_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
- endif()
- get_filename_component(MSYS_BIN_DIR "${MAKE}" DIRECTORY)
- if(BUILD_SHARED_LIBS)
- set(SHARED shared)
- file(STRINGS "${BUILDDIR}/VERSION.dat" SHLIB_VERSION
- REGEX "^SHLIB_VERSION=.*")
- string(REGEX REPLACE "^(SHLIB_VERSION=)(.*)$" "\\2"
- SHLIB_VERSION "${SHLIB_VERSION}")
- if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS")
- set(LIB_EXT dylib)
- set(LIB_EXTS ${SHLIB_VERSION}.${LIB_EXT})
- elseif(MINGW)
- string(REPLACE "." "_" SHLIB_VERSION "${SHLIB_VERSION}")
- set(BIN_EXT dll)
- set(LIB_EXT dll.a)
- else()
- set(LIB_EXT so)
- set(LIB_EXTS ${LIB_EXT}.${SHLIB_VERSION})
- endif()
- list(APPEND BIN_EXTS ${BIN_EXT})
- list(APPEND LIB_EXTS ${LIB_EXT})
- else()
- set(SHARED no-shared no-module)
- set(LIB_EXTS a)
- endif()
- set(INSTALL_PKG_CONFIGS "${BUILDDIR}/openssl.pc")
- foreach(lib ssl crypto)
- foreach(ext ${LIB_EXTS})
- list(APPEND INSTALL_LIBS "${BUILDDIR}/lib${lib}.${ext}")
- list(APPEND INSTALL_PKG_CONFIGS "${BUILDDIR}/lib${lib}.pc")
- endforeach()
- foreach(ext ${BIN_EXTS})
- # This might be wrong for targets which don't follow this naming scheme, but I'm not aware of any
- if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
- list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}-x64.${ext}")
- else()
- list(APPEND INSTALL_BINS "${BUILDDIR}/lib${lib}-${SHLIB_VERSION}.${ext}")
- endif()
- endforeach()
- endforeach()
- if(CMAKE_HOST_WIN32)
- set(ENV_COMMAND set)
- set(PATH_VAR ";%PATH%")
- else()
- set(ENV_COMMAND export)
- set(PATH_VAR ":$ENV{PATH}")
- endif()
- add_custom_command(
- OUTPUT "${BUILDDIR}/Makefile"
- COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}"
- VERBATIM
- WORKING_DIRECTORY "${BUILDDIR}"
- )
- if(NOT IOS)
- add_custom_command(
- OUTPUT "${BUILDDIR}/Makefile"
- COMMAND ${ENV_COMMAND} CC=${CMAKE_C_COMPILER}
- COMMAND ${ENV_COMMAND} AR=${CMAKE_AR}
- COMMAND ${ENV_COMMAND} LD=${CMAKE_LINKER}
- COMMAND ${ENV_COMMAND} RANLIB=${CMAKE_RANLIB}
- COMMAND ${ENV_COMMAND} MAKE=${MAKE}
- COMMAND ${ENV_COMMAND} MAKEDEPPROG=${CMAKE_C_COMPILER}
- COMMAND ${ENV_COMMAND} WINDRES=${CMAKE_RC_COMPILER}
- VERBATIM
- APPEND
- )
- if(EMSCRIPTEN)
- list(APPEND DISABLES
- threads
- no-engine
- no-dso
- no-asm
- no-shared
- no-sse2
- no-srtp
- )
- else()
- list(APPEND DISABLES
- enable-static-engine
- no-zlib
- no-ssl2
- no-idea
- no-cast
- no-seed
- no-md2
- no-tests)
- endif()
- endif()
- if(EMSCRIPTEN)
- add_custom_command(
- OUTPUT "${BUILDDIR}/Makefile"
- COMMAND "$ENV{EMSDK}/upstream/emscripten/emconfigure" ./config
- ${SHARED}
- ${DISABLES}
- "--prefix=${CMAKE_INSTALL_PREFIX}"
- "--openssldir=/etc/ssl"
- "--cross-compile-prefix=\"/\""
- VERBATIM
- APPEND
- )
- add_custom_target(build_libs ALL
- COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}"
- COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h"
- COMMAND "${MAKE}" make build_libs
- VERBATIM
- WORKING_DIRECTORY "${BUILDDIR}"
- DEPENDS "${BUILDDIR}/Makefile"
- BYPRODUCTS ${INSTALL_LIBS}
- )
- else()
- add_custom_command(
- OUTPUT "${BUILDDIR}/Makefile"
- COMMAND "${PERL}" Configure
- ${SHARED}
- ${DISABLES}
- ${PLATFORM}
- "--prefix=${CMAKE_INSTALL_PREFIX}"
- "--libdir=${CMAKE_INSTALL_PREFIX}/lib"
- "--openssldir=/etc/ssl"
- ${CFLAGS}
- VERBATIM
- APPEND
- )
- add_custom_target(build_libs ALL
- COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}"
- COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h"
- COMMAND "${MAKE}" -j ${VCPKG_CONCURRENCY} build_libs
- VERBATIM
- WORKING_DIRECTORY "${BUILDDIR}"
- DEPENDS "${BUILDDIR}/Makefile"
- BYPRODUCTS ${INSTALL_LIBS}
- )
- endif()
- add_custom_command(
- OUTPUT "${BUILDDIR}/Makefile"
- COMMAND "${CMAKE_COMMAND}" "-DDIR=${BUILDDIR}" -P "${CMAKE_CURRENT_LIST_DIR}/remove-deps.cmake"
- VERBATIM
- APPEND
- )
- if((CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") AND BUILD_SHARED_LIBS)
- if(DEFINED CMAKE_INSTALL_NAME_DIR)
- set(ID_PREFIX "${CMAKE_INSTALL_NAME_DIR}")
- else()
- set(ID_PREFIX "@rpath")
- endif()
- add_custom_command(
- TARGET build_libs
- COMMAND /usr/bin/install_name_tool -id "${ID_PREFIX}/libssl.${SHLIB_VERSION}.dylib"
- "${BUILDDIR}/libssl.${SHLIB_VERSION}.dylib"
- COMMAND /usr/bin/install_name_tool -id "${ID_PREFIX}/libcrypto.${SHLIB_VERSION}.dylib"
- "${BUILDDIR}/libcrypto.${SHLIB_VERSION}.dylib"
- COMMAND /usr/bin/install_name_tool -change "${CMAKE_INSTALL_PREFIX}/lib/libcrypto.${SHLIB_VERSION}.dylib"
- "${ID_PREFIX}/libcrypto.${SHLIB_VERSION}.dylib"
- "${BUILDDIR}/libssl.${SHLIB_VERSION}.dylib"
- VERBATIM
- )
- endif()
- install(
- FILES ${INSTALL_LIBS}
- DESTINATION lib
- )
- install(
- FILES ${INSTALL_BINS}
- DESTINATION bin
- )
- install(
- FILES ${INSTALL_PKG_CONFIGS}
- DESTINATION lib/pkgconfig
- )
|