quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

CMakeLists.txt (11859B)


      1 option(USE_STATIC_MBEDTLS_LIBRARY "Build Mbed TLS static library." ON)
      2 option(USE_SHARED_MBEDTLS_LIBRARY "Build Mbed TLS shared library." OFF)
      3 option(LINK_WITH_PTHREAD "Explicitly link Mbed TLS library to pthread." OFF)
      4 option(LINK_WITH_TRUSTED_STORAGE "Explicitly link Mbed TLS library to trusted_storage." OFF)
      5 
      6 # Set the project root directory if it's not already defined, as may happen if
      7 # the library folder is included directly by a parent project, without
      8 # including the top level CMakeLists.txt.
      9 if(NOT DEFINED MBEDTLS_DIR)
     10     set(MBEDTLS_DIR ${CMAKE_SOURCE_DIR})
     11 endif()
     12 
     13 set(src_crypto
     14     aes.c
     15     aesni.c
     16     aesce.c
     17     aria.c
     18     asn1parse.c
     19     asn1write.c
     20     base64.c
     21     bignum.c
     22     bignum_core.c
     23     bignum_mod.c
     24     bignum_mod_raw.c
     25     block_cipher.c
     26     camellia.c
     27     ccm.c
     28     chacha20.c
     29     chachapoly.c
     30     cipher.c
     31     cipher_wrap.c
     32     constant_time.c
     33     cmac.c
     34     ctr_drbg.c
     35     des.c
     36     dhm.c
     37     ecdh.c
     38     ecdsa.c
     39     ecjpake.c
     40     ecp.c
     41     ecp_curves.c
     42     ecp_curves_new.c
     43     entropy.c
     44     entropy_poll.c
     45     error.c
     46     gcm.c
     47     hkdf.c
     48     hmac_drbg.c
     49     lmots.c
     50     lms.c
     51     md.c
     52     md5.c
     53     memory_buffer_alloc.c
     54     nist_kw.c
     55     oid.c
     56     padlock.c
     57     pem.c
     58     pk.c
     59     pk_ecc.c
     60     pk_wrap.c
     61     pkcs12.c
     62     pkcs5.c
     63     pkparse.c
     64     pkwrite.c
     65     platform.c
     66     platform_util.c
     67     poly1305.c
     68     psa_crypto.c
     69     psa_crypto_aead.c
     70     psa_crypto_cipher.c
     71     psa_crypto_client.c
     72     psa_crypto_driver_wrappers_no_static.c
     73     psa_crypto_ecp.c
     74     psa_crypto_ffdh.c
     75     psa_crypto_hash.c
     76     psa_crypto_mac.c
     77     psa_crypto_pake.c
     78     psa_crypto_rsa.c
     79     psa_crypto_se.c
     80     psa_crypto_slot_management.c
     81     psa_crypto_storage.c
     82     psa_its_file.c
     83     psa_util.c
     84     ripemd160.c
     85     rsa.c
     86     rsa_alt_helpers.c
     87     sha1.c
     88     sha256.c
     89     sha512.c
     90     sha3.c
     91     threading.c
     92     timing.c
     93     version.c
     94     version_features.c
     95 )
     96 
     97 set(src_x509
     98     pkcs7.c
     99     x509.c
    100     x509_create.c
    101     x509_crl.c
    102     x509_crt.c
    103     x509_csr.c
    104     x509write.c
    105     x509write_crt.c
    106     x509write_csr.c
    107 )
    108 
    109 set(src_tls
    110     debug.c
    111     mps_reader.c
    112     mps_trace.c
    113     net_sockets.c
    114     ssl_cache.c
    115     ssl_ciphersuites.c
    116     ssl_client.c
    117     ssl_cookie.c
    118     ssl_debug_helpers_generated.c
    119     ssl_msg.c
    120     ssl_ticket.c
    121     ssl_tls.c
    122     ssl_tls12_client.c
    123     ssl_tls12_server.c
    124     ssl_tls13_keys.c
    125     ssl_tls13_server.c
    126     ssl_tls13_client.c
    127     ssl_tls13_generic.c
    128 )
    129 
    130 if(GEN_FILES)
    131     find_package(Perl REQUIRED)
    132 
    133     file(GLOB error_headers ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls/*.h)
    134     add_custom_command(
    135         OUTPUT
    136             ${CMAKE_CURRENT_BINARY_DIR}/error.c
    137         COMMAND
    138             ${PERL_EXECUTABLE}
    139                 ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl
    140                 ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls
    141                 ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files
    142                 ${CMAKE_CURRENT_BINARY_DIR}/error.c
    143         DEPENDS
    144             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_errors.pl
    145             ${error_headers}
    146             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/error.fmt
    147     )
    148 
    149     add_custom_command(
    150         OUTPUT
    151             ${CMAKE_CURRENT_BINARY_DIR}/version_features.c
    152         COMMAND
    153             ${PERL_EXECUTABLE}
    154                 ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_features.pl
    155                 ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls
    156                 ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files
    157                 ${CMAKE_CURRENT_BINARY_DIR}/version_features.c
    158         DEPENDS
    159             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_features.pl
    160             ${CMAKE_CURRENT_SOURCE_DIR}/../include/mbedtls/mbedtls_config.h
    161             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/version_features.fmt
    162     )
    163 
    164     add_custom_command(
    165         OUTPUT
    166             ${CMAKE_CURRENT_BINARY_DIR}/ssl_debug_helpers_generated.c
    167         COMMAND
    168             ${MBEDTLS_PYTHON_EXECUTABLE}
    169                 ${CMAKE_CURRENT_SOURCE_DIR}/../framework/scripts/generate_ssl_debug_helpers.py
    170                 --mbedtls-root ${CMAKE_CURRENT_SOURCE_DIR}/..
    171                 ${CMAKE_CURRENT_BINARY_DIR}
    172         DEPENDS
    173             ${CMAKE_CURRENT_SOURCE_DIR}/../framework/scripts/generate_ssl_debug_helpers.py
    174             ${error_headers}
    175     )
    176 
    177     add_custom_command(
    178         OUTPUT
    179             ${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers.h
    180             ${CMAKE_CURRENT_BINARY_DIR}/psa_crypto_driver_wrappers_no_static.c
    181         COMMAND
    182             ${MBEDTLS_PYTHON_EXECUTABLE}
    183                 ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py
    184                 ${CMAKE_CURRENT_BINARY_DIR}
    185         DEPENDS
    186             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/generate_driver_wrappers.py
    187             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.h.jinja
    188             ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja
    189     )
    190 
    191 
    192 else()
    193     link_to_source(error.c)
    194     link_to_source(version_features.c)
    195     link_to_source(ssl_debug_helpers_generated.c)
    196     link_to_source(psa_crypto_driver_wrappers_no_static.c)
    197 endif()
    198 
    199 if(CMAKE_COMPILER_IS_GNUCC)
    200     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations")
    201 endif(CMAKE_COMPILER_IS_GNUCC)
    202 
    203 if(CMAKE_COMPILER_IS_CLANG)
    204     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code")
    205 endif(CMAKE_COMPILER_IS_CLANG)
    206 
    207 if(CMAKE_COMPILER_IS_MSVC)
    208     option(MSVC_STATIC_RUNTIME "Build the libraries with /MT compiler flag" OFF)
    209     if(MSVC_STATIC_RUNTIME)
    210         foreach(flag_var
    211             CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
    212             CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
    213             CMAKE_C_FLAGS_CHECK)
    214             string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
    215         endforeach(flag_var)
    216     endif()
    217 endif()
    218 
    219 if(WIN32)
    220     set(libs ${libs} ws2_32 bcrypt)
    221 endif(WIN32)
    222 
    223 if(CMAKE_C_COMPILER_ID MATCHES "AppleClang")
    224     set(CMAKE_C_ARCHIVE_CREATE   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
    225     set(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
    226 endif()
    227 if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
    228     set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
    229     set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
    230 endif()
    231 
    232 if(HAIKU)
    233     set(libs ${libs} network)
    234 endif(HAIKU)
    235 
    236 if(LINK_WITH_PTHREAD)
    237     set(libs ${libs} ${CMAKE_THREAD_LIBS_INIT})
    238 endif()
    239 
    240 if(LINK_WITH_TRUSTED_STORAGE)
    241     set(libs ${libs} trusted_storage)
    242 endif()
    243 
    244 if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY)
    245     message(FATAL_ERROR "Need to choose static or shared mbedtls build!")
    246 endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY)
    247 
    248 set(mbedtls_target    "${MBEDTLS_TARGET_PREFIX}mbedtls")
    249 set(mbedx509_target   "${MBEDTLS_TARGET_PREFIX}mbedx509")
    250 set(mbedcrypto_target "${MBEDTLS_TARGET_PREFIX}mbedcrypto")
    251 
    252 set(mbedtls_target    ${mbedtls_target}    PARENT_SCOPE)
    253 set(mbedx509_target   ${mbedx509_target}   PARENT_SCOPE)
    254 set(mbedcrypto_target ${mbedcrypto_target} PARENT_SCOPE)
    255 
    256 if (USE_STATIC_MBEDTLS_LIBRARY)
    257     set(mbedtls_static_target    ${mbedtls_target})
    258     set(mbedx509_static_target   ${mbedx509_target})
    259     set(mbedcrypto_static_target ${mbedcrypto_target})
    260 endif()
    261 
    262 set(target_libraries ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
    263 
    264 if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
    265     string(APPEND mbedtls_static_target    "_static")
    266     string(APPEND mbedx509_static_target   "_static")
    267     string(APPEND mbedcrypto_static_target "_static")
    268 
    269     list(APPEND target_libraries
    270         ${mbedcrypto_static_target}
    271         ${mbedx509_static_target}
    272         ${mbedtls_static_target})
    273 endif()
    274 
    275 set(p256m_target "${MBEDTLS_TARGET_PREFIX}p256m")
    276 set(everest_target "${MBEDTLS_TARGET_PREFIX}everest")
    277 
    278 if(USE_STATIC_MBEDTLS_LIBRARY)
    279     add_library(${mbedcrypto_static_target} STATIC ${src_crypto})
    280     set_target_properties(${mbedcrypto_static_target} PROPERTIES OUTPUT_NAME mbedcrypto)
    281     target_link_libraries(${mbedcrypto_static_target} PUBLIC ${libs})
    282 
    283     if(TARGET ${everest_target})
    284         target_link_libraries(${mbedcrypto_static_target} PUBLIC ${everest_target})
    285     endif()
    286 
    287     if(TARGET ${p256m_target})
    288         target_link_libraries(${mbedcrypto_static_target} PUBLIC ${p256m_target})
    289     endif()
    290 
    291     add_library(${mbedx509_static_target} STATIC ${src_x509})
    292     set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509)
    293     target_link_libraries(${mbedx509_static_target} PUBLIC ${libs} ${mbedcrypto_static_target})
    294 
    295     add_library(${mbedtls_static_target} STATIC ${src_tls})
    296     set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
    297     target_link_libraries(${mbedtls_static_target} PUBLIC ${libs} ${mbedx509_static_target})
    298 endif(USE_STATIC_MBEDTLS_LIBRARY)
    299 
    300 if(USE_SHARED_MBEDTLS_LIBRARY)
    301     set(CMAKE_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR})
    302     add_library(${mbedcrypto_target} SHARED ${src_crypto})
    303     set_target_properties(${mbedcrypto_target} PROPERTIES VERSION 3.6.4 SOVERSION 16)
    304     target_link_libraries(${mbedcrypto_target} PUBLIC ${libs})
    305 
    306     if(TARGET ${everest_target})
    307         target_link_libraries(${mbedcrypto_target} PUBLIC ${everest_target})
    308     endif()
    309 
    310     if(TARGET ${p256m_target})
    311         target_link_libraries(${mbedcrypto_target} PUBLIC ${p256m_target})
    312     endif()
    313 
    314     add_library(${mbedx509_target} SHARED ${src_x509})
    315     set_target_properties(${mbedx509_target} PROPERTIES VERSION 3.6.4 SOVERSION 7)
    316     target_link_libraries(${mbedx509_target} PUBLIC ${libs} ${mbedcrypto_target})
    317 
    318     add_library(${mbedtls_target} SHARED ${src_tls})
    319     set_target_properties(${mbedtls_target} PROPERTIES VERSION 3.6.4 SOVERSION 21)
    320     target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
    321 endif(USE_SHARED_MBEDTLS_LIBRARY)
    322 
    323 foreach(target IN LISTS target_libraries)
    324     add_library(MbedTLS::${target} ALIAS ${target})  # add_subdirectory support
    325     # Include public header files from /include and other directories
    326     # declared by /3rdparty/**/CMakeLists.txt. Include private header files
    327     # from /library and others declared by /3rdparty/**/CMakeLists.txt.
    328     # /library needs to be listed explicitly when building .c files outside
    329     # of /library (which currently means: under /3rdparty).
    330     target_include_directories(${target}
    331         PUBLIC $<BUILD_INTERFACE:${MBEDTLS_DIR}/include/>
    332                $<INSTALL_INTERFACE:include/>
    333         PRIVATE ${MBEDTLS_DIR}/library/
    334                 # Needed to include psa_crypto_driver_wrappers.h
    335                 ${CMAKE_CURRENT_BINARY_DIR})
    336     # Pass-through MBEDTLS_CONFIG_FILE and MBEDTLS_USER_CONFIG_FILE
    337     if(MBEDTLS_CONFIG_FILE)
    338         target_compile_definitions(${target}
    339             PUBLIC MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}")
    340     endif()
    341     if(MBEDTLS_USER_CONFIG_FILE)
    342         target_compile_definitions(${target}
    343             PUBLIC MBEDTLS_USER_CONFIG_FILE="${MBEDTLS_USER_CONFIG_FILE}")
    344     endif()
    345     install(
    346         TARGETS ${target}
    347         EXPORT MbedTLSTargets
    348         ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    349         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    350         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    351         PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
    352 endforeach(target)
    353 
    354 set(lib_target "${MBEDTLS_TARGET_PREFIX}lib")
    355 
    356 add_custom_target(${lib_target} DEPENDS ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
    357 if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
    358     add_dependencies(${lib_target} ${mbedcrypto_static_target} ${mbedx509_static_target} ${mbedtls_static_target})
    359 endif()