Specify the list of Rust files with build.json

In principle this should be derivable from lib.rs directly, but Rust
made this surprisingly difficult, so we'll just do it with wildcards.

Bug: 42290412
Change-Id: I3153613bdddf62eaa0e752a4a24192e2c484a95c
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/70428
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/build.json b/build.json
index 55fe1a8..766117f 100644
--- a/build.json
+++ b/build.json
@@ -1026,5 +1026,16 @@
         "srcs": [
             "fuzz/*.cc"
         ]
+    },
+    "rust_bssl_sys": {
+        "srcs": [
+            "rust/bssl-sys/src/*.rs"
+        ]
+    },
+    "rust_bssl_crypto": {
+        "srcs": [
+            "rust/bssl-crypto/src/*.rs",
+            "rust/bssl-crypto/src/*/*.rs"
+        ]
     }
 }
diff --git a/gen/sources.bzl b/gen/sources.bzl
index 4d0497f..b989a33 100644
--- a/gen/sources.bzl
+++ b/gen/sources.bzl
@@ -2632,6 +2632,34 @@
     "pki/testdata/verify_unittest/self-issued.pem",
 ]
 
+rust_bssl_crypto_sources = [
+    "rust/bssl-crypto/src/aead.rs",
+    "rust/bssl-crypto/src/aes.rs",
+    "rust/bssl-crypto/src/cipher/aes_cbc.rs",
+    "rust/bssl-crypto/src/cipher/aes_ctr.rs",
+    "rust/bssl-crypto/src/cipher/mod.rs",
+    "rust/bssl-crypto/src/digest.rs",
+    "rust/bssl-crypto/src/ec.rs",
+    "rust/bssl-crypto/src/ecdh.rs",
+    "rust/bssl-crypto/src/ecdsa.rs",
+    "rust/bssl-crypto/src/ed25519.rs",
+    "rust/bssl-crypto/src/hkdf.rs",
+    "rust/bssl-crypto/src/hmac.rs",
+    "rust/bssl-crypto/src/hpke.rs",
+    "rust/bssl-crypto/src/lib.rs",
+    "rust/bssl-crypto/src/macros.rs",
+    "rust/bssl-crypto/src/mem.rs",
+    "rust/bssl-crypto/src/rand.rs",
+    "rust/bssl-crypto/src/rsa.rs",
+    "rust/bssl-crypto/src/scoped.rs",
+    "rust/bssl-crypto/src/test_helpers.rs",
+    "rust/bssl-crypto/src/x25519.rs",
+]
+
+rust_bssl_sys_sources = [
+    "rust/bssl-sys/src/lib.rs",
+]
+
 ssl_sources = [
     "ssl/bio_ssl.cc",
     "ssl/d1_both.cc",
diff --git a/gen/sources.cmake b/gen/sources.cmake
index 4595e99..a2a374e 100644
--- a/gen/sources.cmake
+++ b/gen/sources.cmake
@@ -2677,6 +2677,38 @@
 )
 
 set(
+  RUST_BSSL_CRYPTO_SOURCES
+
+  rust/bssl-crypto/src/aead.rs
+  rust/bssl-crypto/src/aes.rs
+  rust/bssl-crypto/src/cipher/aes_cbc.rs
+  rust/bssl-crypto/src/cipher/aes_ctr.rs
+  rust/bssl-crypto/src/cipher/mod.rs
+  rust/bssl-crypto/src/digest.rs
+  rust/bssl-crypto/src/ec.rs
+  rust/bssl-crypto/src/ecdh.rs
+  rust/bssl-crypto/src/ecdsa.rs
+  rust/bssl-crypto/src/ed25519.rs
+  rust/bssl-crypto/src/hkdf.rs
+  rust/bssl-crypto/src/hmac.rs
+  rust/bssl-crypto/src/hpke.rs
+  rust/bssl-crypto/src/lib.rs
+  rust/bssl-crypto/src/macros.rs
+  rust/bssl-crypto/src/mem.rs
+  rust/bssl-crypto/src/rand.rs
+  rust/bssl-crypto/src/rsa.rs
+  rust/bssl-crypto/src/scoped.rs
+  rust/bssl-crypto/src/test_helpers.rs
+  rust/bssl-crypto/src/x25519.rs
+)
+
+set(
+  RUST_BSSL_SYS_SOURCES
+
+  rust/bssl-sys/src/lib.rs
+)
+
+set(
   SSL_SOURCES
 
   ssl/bio_ssl.cc
diff --git a/gen/sources.json b/gen/sources.json
index c2a97d6..407f3ac 100644
--- a/gen/sources.json
+++ b/gen/sources.json
@@ -2613,6 +2613,36 @@
       "pki/testdata/verify_unittest/self-issued.pem"
     ]
   },
+  "rust_bssl_crypto": {
+    "srcs": [
+      "rust/bssl-crypto/src/aead.rs",
+      "rust/bssl-crypto/src/aes.rs",
+      "rust/bssl-crypto/src/cipher/aes_cbc.rs",
+      "rust/bssl-crypto/src/cipher/aes_ctr.rs",
+      "rust/bssl-crypto/src/cipher/mod.rs",
+      "rust/bssl-crypto/src/digest.rs",
+      "rust/bssl-crypto/src/ec.rs",
+      "rust/bssl-crypto/src/ecdh.rs",
+      "rust/bssl-crypto/src/ecdsa.rs",
+      "rust/bssl-crypto/src/ed25519.rs",
+      "rust/bssl-crypto/src/hkdf.rs",
+      "rust/bssl-crypto/src/hmac.rs",
+      "rust/bssl-crypto/src/hpke.rs",
+      "rust/bssl-crypto/src/lib.rs",
+      "rust/bssl-crypto/src/macros.rs",
+      "rust/bssl-crypto/src/mem.rs",
+      "rust/bssl-crypto/src/rand.rs",
+      "rust/bssl-crypto/src/rsa.rs",
+      "rust/bssl-crypto/src/scoped.rs",
+      "rust/bssl-crypto/src/test_helpers.rs",
+      "rust/bssl-crypto/src/x25519.rs"
+    ]
+  },
+  "rust_bssl_sys": {
+    "srcs": [
+      "rust/bssl-sys/src/lib.rs"
+    ]
+  },
   "ssl": {
     "srcs": [
       "ssl/bio_ssl.cc",
diff --git a/util/build/build.go b/util/build/build.go
index 277bfdc..dd28107 100644
--- a/util/build/build.go
+++ b/util/build/build.go
@@ -17,8 +17,8 @@
 // A Target is a build target for consumption by the downstream build systems.
 // All pre-generated files are baked input its source lists.
 type Target struct {
-	// Srcs is the list of C or C++ files (determined by file extension) that are
-	// built into the target.
+	// Srcs is the list of C, C++, or Rust files (determined by file extension)
+	// that are built into the target.
 	Srcs []string `json:"srcs,omitempty"`
 	// Hdrs is the list public headers that should be available to external
 	// projects using this target.
diff --git a/util/generate_build_files.py b/util/generate_build_files.py
index 2c601df..519d67e 100644
--- a/util/generate_build_files.py
+++ b/util/generate_build_files.py
@@ -583,21 +583,6 @@
   return cfiles
 
 
-def FindRustFiles(directory):
-  """Recurses through directory and returns a list of paths to all the Rust source
-  files."""
-  rust_files = []
-
-  for (path, dirnames, filenames) in os.walk(directory):
-    for filename in filenames:
-      if not filename.endswith('.rs'):
-        continue
-      rust_files.append(os.path.join(path, filename))
-
-  rust_files.sort()
-  return rust_files
-
-
 def FindHeaderFiles(directory, filter_func):
   """Recurses through directory and returns a list of paths to all the header files that pass filter_func."""
   hfiles = []
@@ -626,9 +611,6 @@
   with open(os.path.join('src', 'gen', 'sources.json')) as f:
     sources = json.load(f)
 
-  bssl_sys_files = FindRustFiles(os.path.join('src', 'rust', 'bssl-sys', 'src'))
-  bssl_crypto_files = FindRustFiles(os.path.join('src', 'rust', 'bssl-crypto', 'src'))
-
   # TODO(crbug.com/boringssl/542): generate_build_files.py historically reported
   # all the assembly files as part of libcrypto. Merge them for now, but we
   # should split them out later.
@@ -662,8 +644,8 @@
       'pki_internal_headers': PrefixWithSrc(sources['pki']['internal_hdrs']),
       'pki_test': PrefixWithSrc(sources['pki_test']['srcs']),
       'pki_test_data': PrefixWithSrc(sources['pki_test']['data']),
-      'rust_bssl_crypto': bssl_crypto_files,
-      'rust_bssl_sys': bssl_sys_files,
+      'rust_bssl_crypto': PrefixWithSrc(sources['bssl_crypto_rust']['srcs']),
+      'rust_bssl_sys': PrefixWithSrc(sources['bssl_sys_rust']['srcs']),
       'ssl': PrefixWithSrc(sources['ssl']['srcs']),
       'ssl_headers': PrefixWithSrc(sources['ssl']['hdrs']),
       'ssl_internal_headers': PrefixWithSrc(sources['ssl']['internal_hdrs']),