Add chip_external_mbedtls flag to src/crypto (#23538)

This allows mbedtls to be compiled outside of the Matter gn build
routine, for build targets that wish to share mbedtls symbols.
diff --git a/config/nrfconnect/chip-gn/args.gni b/config/nrfconnect/chip-gn/args.gni
index 0ac1988..0963be6 100644
--- a/config/nrfconnect/chip-gn/args.gni
+++ b/config/nrfconnect/chip-gn/args.gni
@@ -14,6 +14,8 @@
 
 import("//build_overrides/chip.gni")
 
+import("${chip_root}/src/crypto/crypto.gni")
+
 chip_device_platform = "nrfconnect"
 
 chip_build_tests = false
@@ -22,6 +24,9 @@
 chip_system_project_config_include = ""
 chip_ble_project_config_include = ""
 
+chip_crypto = "mbedtls"
+chip_external_mbedtls = true
+
 custom_toolchain = "${chip_root}/config/nrfconnect/chip-gn/toolchain:zephyr"
 
 pw_build_PIP_CONSTRAINTS = [ "${chip_root}/scripts/constraints.txt" ]
diff --git a/config/telink/chip-gn/args.gni b/config/telink/chip-gn/args.gni
index 713a3fd..a84cc32 100644
--- a/config/telink/chip-gn/args.gni
+++ b/config/telink/chip-gn/args.gni
@@ -14,6 +14,8 @@
 
 import("//build_overrides/chip.gni")
 
+import("${chip_root}/src/crypto/crypto.gni")
+
 chip_device_platform = "telink"
 
 chip_build_tests = false
@@ -22,6 +24,9 @@
 chip_system_project_config_include = ""
 chip_ble_project_config_include = ""
 
+chip_crypto = "mbedtls"
+chip_external_mbedtls = true
+
 custom_toolchain = "${chip_root}/config/telink/chip-gn/toolchain:zephyr"
 
 pw_build_PIP_CONSTRAINTS = [ "${chip_root}/scripts/constraints.txt" ]
diff --git a/config/zephyr/chip-gn/args.gni b/config/zephyr/chip-gn/args.gni
index e5d5aed..1421e79 100644
--- a/config/zephyr/chip-gn/args.gni
+++ b/config/zephyr/chip-gn/args.gni
@@ -14,6 +14,8 @@
 
 import("//build_overrides/chip.gni")
 
+import("${chip_root}/src/crypto/crypto.gni")
+
 chip_device_platform = "zephyr"
 
 chip_build_tests = false
@@ -22,6 +24,9 @@
 chip_system_project_config_include = ""
 chip_ble_project_config_include = ""
 
+chip_crypto = "mbedtls"
+chip_external_mbedtls = true
+
 custom_toolchain = "${chip_root}/config/zephyr/chip-gn/toolchain:zephyr"
 
 pw_build_PIP_CONSTRAINTS = [ "${chip_root}/scripts/constraints.txt" ]
diff --git a/src/crypto/BUILD.gn b/src/crypto/BUILD.gn
index ced5793..5d0e0f4 100644
--- a/src/crypto/BUILD.gn
+++ b/src/crypto/BUILD.gn
@@ -107,9 +107,7 @@
     sources = [ "CHIPCryptoPALmbedTLS.cpp" ]
     public_deps = [ ":public_headers" ]
 
-    external_mbedtls = current_os == "zephyr"
-
-    if (!external_mbedtls) {
+    if (!chip_external_mbedtls) {
       public_deps += [ "${mbedtls_root}:mbedtls" ]
     }
   }
diff --git a/src/crypto/crypto.gni b/src/crypto/crypto.gni
index 1c99fb9..6ca9322 100644
--- a/src/crypto/crypto.gni
+++ b/src/crypto/crypto.gni
@@ -16,4 +16,10 @@
   # Crypto implementation: mbedtls, openssl, tinycrypt, boringssl, platform.
   chip_crypto = ""
   chip_with_se05x = 0
+
+  # Compile mbedtls externally. Only used if chip_crypto == "mbedtls"
+  chip_external_mbedtls = false
 }
+
+assert(!chip_external_mbedtls || chip_crypto == "mbedtls",
+       "Use of external mbedtls requires the mbedtls crypto impl")