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