cmake_minimum_required(VERSION 3.5)
project(openssl)

if(NOT CPU AND CMAKE_SYSTEM_PROCESSOR)
  set(CPU ${CMAKE_SYSTEM_PROCESSOR})
endif()

if(CORE_SYSTEM_NAME MATCHES "android")
  if(CPU MATCHES arm64)
    set(OPENSSL_TARGET android-arm64)
  elseif(CPU MATCHES arm)
    set(OPENSSL_TARGET android-arm)
  elseif(CPU MATCHES i686)
    set(OPENSSL_TARGET android-x86)
  endif()
elseif(CORE_SYSTEM_NAME MATCHES "linux" OR CORE_SYSTEM_NAME MATCHES "rbpi")
  if(CPU STREQUAL x86_64 OR ARCH STREQUAL x86_64)
    set(OPENSSL_TARGET linux-x86_64)
  elseif(CPU MATCHES "i.86")
    set(OPENSSL_TARGET linux-x86)
  elseif(CPU MATCHES aarch64 OR CPU MATCHES arm64 OR ARCH MATCHES aarch64)
    set(OPENSSL_TARGET linux-aarch64)
  elseif(CPU MATCHES arm OR ARCH MATCHES arm OR CPU MATCHES cortex-a7 OR CPU MATCHES arm1176jzf-s)
    set(OPENSSL_TARGET linux-armv4)
  else()
    message(WARNING "Could not detect bitness for CPU ${CPU} - assuming 32bit")
    set(OPENSSL_TARGET linux-generic32 no-asm)
  endif()
elseif(CORE_SYSTEM_NAME MATCHES "ios" OR CORE_SYSTEM_NAME MATCHES "darwin_embedded")
  set(OPENSSL_TARGET iphoneos-cross)
elseif(CORE_SYSTEM_NAME MATCHES "osx")
  if(CPU MATCHES arm64)
    set(OPENSSL_TARGET darwin64-arm64-cc)
  else()
    set(OPENSSL_TARGET darwin64-x86_64-cc)
  endif()
endif()

list(APPEND configure_command ${CMAKE_COMMAND} -E env)
list(APPEND configure_command ANDROID_NDK=${TOOLCHAIN})
list(APPEND configure_command AR=${CMAKE_AR})
list(APPEND configure_command CC=${CMAKE_C_COMPILER})
list(APPEND configure_command CFLAGS=${CMAKE_C_FLAGS})
list(APPEND configure_command CPPFLAGS=${CMAKE_CPP_FLAGS})
list(APPEND configure_command CXX=${CMAKE_CXX_COMPILER})
list(APPEND configure_command CXXFLAGS=${CMAKE_CXX_FLAGS})
list(APPEND configure_command INSTALL_PREFIX=)
list(APPEND configure_command LDFLAGS=${CMAKE_LD_FLAGS})
list(APPEND configure_command RANLIB=${CMAKE_RANLIB})
list(APPEND configure_command <SOURCE_DIR>/Configure)
list(APPEND configure_command ${OPENSSL_TARGET})
list(APPEND configure_command no-shared zlib)
list(APPEND configure_command no-tests)
if(PLATFORM MATCHES appletvos)
  list(APPEND configure_command no-async)
endif()
list(APPEND configure_command --prefix=${OUTPUT_DIR})
list(APPEND configure_command --with-zlib-include=${OUTPUT_DIR}/include)
list(APPEND configure_command --with-zlib-lib=${OUTPUT_DIR}/lib)
list(APPEND configure_command COMMAND sed -ie "s|PROGRAMS=|PROGRAMS=#|" ${PROJECT_SOURCE_DIR}/Makefile)
list(APPEND configure_command COMMAND sed -ie "s|-isysroot $.CROSS_TOP./SDKs/$.CROSS_SDK. ||" ${PROJECT_SOURCE_DIR}/Makefile)

include(ExternalProject)

externalproject_add(openssl
                    SOURCE_DIR ${CMAKE_SOURCE_DIR}
                    UPDATE_COMMAND ""
                    CONFIGURE_COMMAND ${configure_command}
                    INSTALL_COMMAND ""
                    BUILD_IN_SOURCE 1)

install(CODE "execute_process(COMMAND make install_sw WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})")
