Specify the list of fuzzers with build.json

This is a bit of a mess because we actually build each fuzzer as a
separate target, but ah well. Migrating to FuzzTest will resolve that.

Bug: 42290412
Change-Id: Ia32287ce8b5947a339e966df9e55e2afabed08c1
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/70427
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
diff --git a/build.json b/build.json
index c44dc67..55fe1a8 100644
--- a/build.json
+++ b/build.json
@@ -1018,5 +1018,13 @@
             "tool/internal.h",
             "tool/transport_common.h"
         ]
+    },
+    "fuzz": {
+        // TODO(crbug.com/42290554): Unlike the other targets, each source here
+        // is expected to be built separately. When we migrate from libFuzzer to
+        // FuzzTest, this will be moot.
+        "srcs": [
+            "fuzz/*.cc"
+        ]
     }
 }
diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt
index 36ec9fb..1c784a1 100644
--- a/fuzz/CMakeLists.txt
+++ b/fuzz/CMakeLists.txt
@@ -1,7 +1,11 @@
-macro(fuzzer name)
-  add_executable(${name} ${name}.cc)
+# TODO(crbug.com/42290412): Flatten this build up a layer. Between
+# crbug.com/42290128, crbug.com/42290508 and crbug.com/42290554, there is enough
+# churn that we've left it alone for now.
+foreach(fuzzer ${FUZZ_SOURCES})
+  cmake_path(GET fuzzer STEM name)
+  add_executable(${name} ../${fuzzer})
   target_compile_options(${name} PRIVATE "-Wno-missing-prototypes")
-  target_link_libraries(${name} crypto ${ARGN})
+  target_link_libraries(${name} crypto ssl pki)
   if(LIBFUZZER_FROM_DEPS)
     set_target_properties(${name} PROPERTIES LINK_FLAGS "-fsanitize=fuzzer-no-link")
     target_link_libraries(${name} Fuzzer)
@@ -13,37 +17,4 @@
     PROPERTIES
     CXX_STANDARD 17
     CXX_STANDARD_REQUIRED YES)
-endmacro()
-
-fuzzer(arm_cpuinfo)
-fuzzer(bn_div)
-fuzzer(bn_mod_exp)
-fuzzer(cert)
-fuzzer(client ssl)
-fuzzer(conf)
-fuzzer(crl_getcrlstatusforcert_fuzzer pki)
-fuzzer(crl_parse_crl_certificatelist_fuzzer pki)
-fuzzer(crl_parse_crl_tbscertlist_fuzzer pki)
-fuzzer(crl_parse_issuing_distribution_point_fuzzer pki)
-fuzzer(decode_client_hello_inner ssl)
-fuzzer(der_roundtrip)
-fuzzer(dtls_client ssl)
-fuzzer(dtls_server ssl)
-fuzzer(ocsp_parse_ocsp_cert_id_fuzzer pki)
-fuzzer(ocsp_parse_ocsp_response_data_fuzzer pki)
-fuzzer(ocsp_parse_ocsp_response_fuzzer pki)
-fuzzer(ocsp_parse_ocsp_single_response_fuzzer pki)
-fuzzer(parse_authority_key_identifier_fuzzer pki)
-fuzzer(parse_certificate_fuzzer pki)
-fuzzer(parse_crldp_fuzzer pki)
-fuzzer(pkcs12)
-fuzzer(pkcs8)
-fuzzer(privkey)
-fuzzer(read_pem)
-fuzzer(server ssl)
-fuzzer(session ssl)
-fuzzer(spki)
-fuzzer(ssl_ctx_api ssl)
-fuzzer(verify_name_match_fuzzer pki)
-fuzzer(verify_name_match_normalizename_fuzzer pki)
-fuzzer(verify_name_match_verifynameinsubtree_fuzzer pki)
+endforeach()
diff --git a/gen/sources.bzl b/gen/sources.bzl
index 5f8a3b2..4d0497f 100644
--- a/gen/sources.bzl
+++ b/gen/sources.bzl
@@ -1052,6 +1052,41 @@
     "decrepit/xts/xts_test.cc",
 ]
 
+fuzz_sources = [
+    "fuzz/arm_cpuinfo.cc",
+    "fuzz/bn_div.cc",
+    "fuzz/bn_mod_exp.cc",
+    "fuzz/cert.cc",
+    "fuzz/client.cc",
+    "fuzz/conf.cc",
+    "fuzz/crl_getcrlstatusforcert_fuzzer.cc",
+    "fuzz/crl_parse_crl_certificatelist_fuzzer.cc",
+    "fuzz/crl_parse_crl_tbscertlist_fuzzer.cc",
+    "fuzz/crl_parse_issuing_distribution_point_fuzzer.cc",
+    "fuzz/decode_client_hello_inner.cc",
+    "fuzz/der_roundtrip.cc",
+    "fuzz/dtls_client.cc",
+    "fuzz/dtls_server.cc",
+    "fuzz/ocsp_parse_ocsp_cert_id_fuzzer.cc",
+    "fuzz/ocsp_parse_ocsp_response_data_fuzzer.cc",
+    "fuzz/ocsp_parse_ocsp_response_fuzzer.cc",
+    "fuzz/ocsp_parse_ocsp_single_response_fuzzer.cc",
+    "fuzz/parse_authority_key_identifier_fuzzer.cc",
+    "fuzz/parse_certificate_fuzzer.cc",
+    "fuzz/parse_crldp_fuzzer.cc",
+    "fuzz/pkcs12.cc",
+    "fuzz/pkcs8.cc",
+    "fuzz/privkey.cc",
+    "fuzz/read_pem.cc",
+    "fuzz/server.cc",
+    "fuzz/session.cc",
+    "fuzz/spki.cc",
+    "fuzz/ssl_ctx_api.cc",
+    "fuzz/verify_name_match_fuzzer.cc",
+    "fuzz/verify_name_match_normalizename_fuzzer.cc",
+    "fuzz/verify_name_match_verifynameinsubtree_fuzzer.cc",
+]
+
 pki_sources = [
     "pki/cert_error_id.cc",
     "pki/cert_error_params.cc",
diff --git a/gen/sources.cmake b/gen/sources.cmake
index 919e0a6..4595e99 100644
--- a/gen/sources.cmake
+++ b/gen/sources.cmake
@@ -1085,6 +1085,43 @@
 )
 
 set(
+  FUZZ_SOURCES
+
+  fuzz/arm_cpuinfo.cc
+  fuzz/bn_div.cc
+  fuzz/bn_mod_exp.cc
+  fuzz/cert.cc
+  fuzz/client.cc
+  fuzz/conf.cc
+  fuzz/crl_getcrlstatusforcert_fuzzer.cc
+  fuzz/crl_parse_crl_certificatelist_fuzzer.cc
+  fuzz/crl_parse_crl_tbscertlist_fuzzer.cc
+  fuzz/crl_parse_issuing_distribution_point_fuzzer.cc
+  fuzz/decode_client_hello_inner.cc
+  fuzz/der_roundtrip.cc
+  fuzz/dtls_client.cc
+  fuzz/dtls_server.cc
+  fuzz/ocsp_parse_ocsp_cert_id_fuzzer.cc
+  fuzz/ocsp_parse_ocsp_response_data_fuzzer.cc
+  fuzz/ocsp_parse_ocsp_response_fuzzer.cc
+  fuzz/ocsp_parse_ocsp_single_response_fuzzer.cc
+  fuzz/parse_authority_key_identifier_fuzzer.cc
+  fuzz/parse_certificate_fuzzer.cc
+  fuzz/parse_crldp_fuzzer.cc
+  fuzz/pkcs12.cc
+  fuzz/pkcs8.cc
+  fuzz/privkey.cc
+  fuzz/read_pem.cc
+  fuzz/server.cc
+  fuzz/session.cc
+  fuzz/spki.cc
+  fuzz/ssl_ctx_api.cc
+  fuzz/verify_name_match_fuzzer.cc
+  fuzz/verify_name_match_normalizename_fuzzer.cc
+  fuzz/verify_name_match_verifynameinsubtree_fuzzer.cc
+)
+
+set(
   PKI_SOURCES
 
   pki/cert_error_id.cc
diff --git a/gen/sources.json b/gen/sources.json
index 795c3ff..c2a97d6 100644
--- a/gen/sources.json
+++ b/gen/sources.json
@@ -1033,6 +1033,42 @@
       "decrepit/xts/xts_test.cc"
     ]
   },
+  "fuzz": {
+    "srcs": [
+      "fuzz/arm_cpuinfo.cc",
+      "fuzz/bn_div.cc",
+      "fuzz/bn_mod_exp.cc",
+      "fuzz/cert.cc",
+      "fuzz/client.cc",
+      "fuzz/conf.cc",
+      "fuzz/crl_getcrlstatusforcert_fuzzer.cc",
+      "fuzz/crl_parse_crl_certificatelist_fuzzer.cc",
+      "fuzz/crl_parse_crl_tbscertlist_fuzzer.cc",
+      "fuzz/crl_parse_issuing_distribution_point_fuzzer.cc",
+      "fuzz/decode_client_hello_inner.cc",
+      "fuzz/der_roundtrip.cc",
+      "fuzz/dtls_client.cc",
+      "fuzz/dtls_server.cc",
+      "fuzz/ocsp_parse_ocsp_cert_id_fuzzer.cc",
+      "fuzz/ocsp_parse_ocsp_response_data_fuzzer.cc",
+      "fuzz/ocsp_parse_ocsp_response_fuzzer.cc",
+      "fuzz/ocsp_parse_ocsp_single_response_fuzzer.cc",
+      "fuzz/parse_authority_key_identifier_fuzzer.cc",
+      "fuzz/parse_certificate_fuzzer.cc",
+      "fuzz/parse_crldp_fuzzer.cc",
+      "fuzz/pkcs12.cc",
+      "fuzz/pkcs8.cc",
+      "fuzz/privkey.cc",
+      "fuzz/read_pem.cc",
+      "fuzz/server.cc",
+      "fuzz/session.cc",
+      "fuzz/spki.cc",
+      "fuzz/ssl_ctx_api.cc",
+      "fuzz/verify_name_match_fuzzer.cc",
+      "fuzz/verify_name_match_normalizename_fuzzer.cc",
+      "fuzz/verify_name_match_verifynameinsubtree_fuzzer.cc"
+    ]
+  },
   "pki": {
     "srcs": [
       "pki/cert_error_id.cc",
diff --git a/util/generate_build_files.py b/util/generate_build_files.py
index fd9ca6c..2c601df 100644
--- a/util/generate_build_files.py
+++ b/util/generate_build_files.py
@@ -629,8 +629,6 @@
   bssl_sys_files = FindRustFiles(os.path.join('src', 'rust', 'bssl-sys', 'src'))
   bssl_crypto_files = FindRustFiles(os.path.join('src', 'rust', 'bssl-crypto', 'src'))
 
-  fuzz_c_files = FindCFiles(os.path.join('src', 'fuzz'), NoTests)
-
   # 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.
@@ -658,7 +656,7 @@
       'crypto_test': PrefixWithSrc(sources['crypto_test']['srcs']),
       'crypto_test_data': PrefixWithSrc(sources['crypto_test']['data']),
       'fips_fragments': PrefixWithSrc(sources['bcm']['internal_hdrs']),
-      'fuzz': fuzz_c_files,
+      'fuzz': PrefixWithSrc(sources['fuzz']['srcs']),
       'pki': PrefixWithSrc(sources['pki']['srcs']),
       'pki_headers': PrefixWithSrc(sources['pki']['hdrs']),
       'pki_internal_headers': PrefixWithSrc(sources['pki']['internal_hdrs']),