parse mbedtls source file names directly from cmakelists.txt
diff --git a/src/rp2_common/pico_mbedtls/CMakeLists.txt b/src/rp2_common/pico_mbedtls/CMakeLists.txt index 2a9d637..df89f58 100644 --- a/src/rp2_common/pico_mbedtls/CMakeLists.txt +++ b/src/rp2_common/pico_mbedtls/CMakeLists.txt
@@ -28,174 +28,63 @@ pico_register_common_scope_var(MBEDTLS_VERSION_MAJOR) endif() - function(src_crypto_list) - set(src_crypto - aes.c - aesni.c - aria.c - asn1parse.c - asn1write.c - base64.c - bignum.c - camellia.c - ccm.c - chacha20.c - chachapoly.c - cipher.c - cipher_wrap.c - constant_time.c - cmac.c - ctr_drbg.c - des.c - dhm.c - ecdh.c - ecdsa.c - ecjpake.c - ecp.c - ecp_curves.c - entropy.c - entropy_poll.c - error.c - gcm.c - hkdf.c - hmac_drbg.c - md.c - md5.c - memory_buffer_alloc.c - mps_reader.c - mps_trace.c - nist_kw.c - oid.c - padlock.c - pem.c - pk.c - pk_wrap.c - pkcs12.c - pkcs5.c - pkparse.c - pkwrite.c - platform.c - platform_util.c - poly1305.c - psa_crypto.c - psa_crypto_aead.c - psa_crypto_cipher.c - psa_crypto_client.c - psa_crypto_ecp.c - psa_crypto_hash.c - psa_crypto_mac.c - psa_crypto_rsa.c - psa_crypto_se.c - psa_crypto_slot_management.c - psa_crypto_storage.c - psa_its_file.c - ripemd160.c - rsa.c - sha1.c - sha256.c - sha512.c - threading.c - timing.c - version.c - version_features.c - ) - if (MBEDTLS_VERSION_MAJOR EQUAL 2) - list(APPEND src_crypto - arc4.c - blowfish.c - havege.c - md2.c - md4.c - psa_crypto_driver_wrappers.c - rsa_internal.c xtea.c - ) - elseif (MBEDTLS_VERSION_MAJOR EQUAL 3) - list(APPEND src_crypto - bignum_core.c - rsa_alt_helpers.c - pk_ecc.c - psa_crypto_driver_wrappers_no_static.c - psa_crypto_ffdh.c - psa_crypto_pake.c - psa_util.c - sha3.c - ) - endif() + function(extract_mbedtls_file_lists FAILURE_REASON) + set(MBEDTLS_LIBRARY_PATH "${PICO_MBEDTLS_PATH}/library/") + set(${FAILURE_REASON} "" PARENT_SCOPE) + # file is pretty predictable, so do a hacky parse rather than nested cmake + if (EXISTS "${MBEDTLS_LIBRARY_PATH}/CMakeLists.txt") + file(READ "${MBEDTLS_LIBRARY_PATH}/CMakeLists.txt" FILE_CONTENTS) - # block_cipher.c was only added with v3.6.0. Support versions without it as well - if (EXISTS ${PICO_MBEDTLS_PATH}/library/block_cipher.c) - list(APPEND src_crypto - block_cipher.c - ) + # take multiline from set up to closing ) + if(FILE_CONTENTS MATCHES "set\\(src_crypto([^\\)]*)") + string(REGEX REPLACE "[ \r\n]+" ";" mbedtls_src_crypto "${CMAKE_MATCH_1}") + list(REMOVE_ITEM mbedtls_src_crypto "") + else() + set(${FAILURE_REASON} "src_crypto variable not extracted" PARENT_SCOPE) + return() + endif() + # take multiline from set up to closing ) + if(FILE_CONTENTS MATCHES "set\\(src_x509([^\\)]*)") + string(REGEX REPLACE "[ \r\n]+" ";" mbedtls_src_x509 "${CMAKE_MATCH_1}") + list(REMOVE_ITEM mbedtls_src_x509 "") + else() + set(${FAILURE_REASON} "src_x509 variable not extracted" PARENT_SCOPE) + return() + endif() + # take multiline from set up to closing ) + if(FILE_CONTENTS MATCHES "set\\(src_tls([^\\)]*)") + string(REGEX REPLACE "[ \r\n]+" ";" mbedtls_src_tls "${CMAKE_MATCH_1}") + list(REMOVE_ITEM mbedtls_src_tls "") + else() + set(${FAILURE_REASON} "src_tls variable not extracted" PARENT_SCOPE) + return() + endif() + else() + set(${FAILURE_REASON} "${MBEDTLS_LIBRARY_PATH}/CMakeLists.txt does not exist" PARENT_SCOPE) + return() endif() - - list(TRANSFORM src_crypto PREPEND ${PICO_MBEDTLS_PATH}/library/) - set(src_crypto ${src_crypto} PARENT_SCOPE) + list(TRANSFORM mbedtls_src_crypto PREPEND "${MBEDTLS_LIBRARY_PATH}") + list(TRANSFORM mbedtls_src_x509 PREPEND "${MBEDTLS_LIBRARY_PATH}") + list(TRANSFORM mbedtls_src_tls PREPEND "${MBEDTLS_LIBRARY_PATH}") + set(mbedtls_src_crypto ${mbedtls_src_crypto} PARENT_SCOPE) + set(mbedtls_src_x509 ${mbedtls_src_x509} PARENT_SCOPE) + set(mbedtls_src_tls ${mbedtls_src_tls} PARENT_SCOPE) + unset(MBEDTLS_LIBRARY_PATH) endfunction() - src_crypto_list() + extract_mbedtls_file_lists(FAILURE_REASON) + if (FAILURE_REASON) + message(WARNING "Could not configure mbedtls: ${FAILURE_REASON}") + return() + endif() pico_add_library(pico_mbedtls_crypto NOFLAG) - target_sources(pico_mbedtls_crypto INTERFACE ${src_crypto}) + target_sources(pico_mbedtls_crypto INTERFACE ${mbedtls_src_crypto}) - function(src_x509_list) - set(src_x509 - x509.c - x509_create.c - x509_crl.c - x509_crt.c - x509_csr.c - x509write_crt.c - x509write_csr.c - ) - if (MBEDTLS_VERSION_MAJOR EQUAL 2) - list(APPEND src_x509 - certs.c - pkcs11.c - ) - endif() - list(TRANSFORM src_x509 PREPEND ${PICO_MBEDTLS_PATH}/library/) - set(src_x509 ${src_x509} PARENT_SCOPE) - endfunction() - - src_x509_list() pico_add_library(pico_mbedtls_x509 NOFLAG) - target_sources(pico_mbedtls_x509 INTERFACE ${src_x509}) + target_sources(pico_mbedtls_x509 INTERFACE ${mbedtls_src_x509}) - function(src_tls_list) - set(src_tls - debug.c - net_sockets.c - ssl_cache.c - ssl_ciphersuites.c - ssl_cookie.c - ssl_msg.c - ssl_ticket.c - ssl_tls.c - ssl_tls13_keys.c - ) - if (MBEDTLS_VERSION_MAJOR EQUAL 2) - list(APPEND src_tls - ssl_cli.c - ssl_srv.c - ) - elseif (MBEDTLS_VERSION_MAJOR EQUAL 3) - list(APPEND src_tls - ssl_client.c - ssl_debug_helpers_generated.c - ssl_tls13_client.c - ssl_tls13_generic.c - ssl_tls13_server.c - ssl_tls12_client.c - ssl_tls12_server.c - ) - endif() - list(TRANSFORM src_tls PREPEND ${PICO_MBEDTLS_PATH}/library/) - set(src_tls ${src_tls} PARENT_SCOPE) - endfunction() - - src_tls_list() pico_add_library(pico_mbedtls_tls NOFLAG) - target_sources(pico_mbedtls_tls INTERFACE ${src_tls}) + target_sources(pico_mbedtls_tls INTERFACE ${mbedtls_src_tls}) pico_add_library(pico_mbedtls NOFLAG) pico_mirrored_target_link_libraries(pico_mbedtls INTERFACE pico_mbedtls_crypto pico_mbedtls_x509 pico_mbedtls_tls pico_rand) @@ -216,18 +105,15 @@ target_include_directories(pico_mbedtls_headers SYSTEM INTERFACE ${PICO_MBEDTLS_PATH}/include/ ${PICO_MBEDTLS_PATH}/library/ ${CMAKE_CURRENT_LIST_DIR}/include/) function(suppress_mbedtls_warnings) - # It seems everything needs this due to mbedtls_get_unaligned_uint64 - src_crypto_list() - src_x509_list() - src_tls_list() - foreach(src_file IN LISTS src_crypto src_x509 src_tls) + extract_mbedtls_file_lists(FAILURE_REASON) # this succeeded before, so should again + + foreach(src_file IN LISTS mbedtls_src_crypto mbedtls_src_x509 mbedtls_src_tls) set_source_files_properties( ${src_file} PROPERTIES COMPILE_OPTIONS "-Wno-cast-qual" ) endforeach() - set_source_files_properties( ${PICO_MBEDTLS_PATH}/library/ssl_srvx.c ${PICO_MBEDTLS_PATH}/library/x509_crt.c