@@ -279,14 +279,16 @@ else()
279279endif ()
280280
281281set (CURL_STATIC_LIB ${CURL_INSTALL_DIR} /lib/libcurl.a)
282+ set (CURL_DEPS
283+     nghttp2_external
284+     ${OPENSSL_DEP} 
285+     zlib_external
286+     zstd_external
287+     libidn2_external
288+ )
282289
283290# Add dependencies for curl 
284- add_dependencies (curl_external
285-                  nghttp2_external
286-                  ${OPENSSL_DEP} 
287-                  zlib_external
288-                  zstd_external
289-                  libidn2_external)
291+ add_dependencies (curl_external ${CURL_DEPS} )
290292
291293# Now it's time for the main targets! 
292294# 
@@ -338,23 +340,21 @@ set(COMMON_LINK_LIBS
338340)
339341set (COMMON_LINK_OPTIONS ${LIB_FUZZING_ENGINE_FLAG} )
340342
343+ # Ensure that curl and its dependencies are built before the fuzzers 
344+ set (FUZZ_DEPS curl_external ${CURL_DEPS}  ${LIB_FUZZING_ENGINE_DEP} )
345+ 
341346# Helper macro to define a fuzzer target 
342347macro (add_curl_fuzzer name  proto)
343348    add_executable (${name}  ${COMMON_SOURCES} )
344349    target_compile_options (${name}  PRIVATE  ${COMMON_FLAGS}  -DFUZZ_PROTOCOLS_${proto} )
345350    target_include_directories (${name}  PRIVATE  ${CURL_INCLUDE_DIRS} )
346-     target_link_libraries (${name}  PRIVATE  ${COMMON_LINK_LIBS}   ${LIB_FUZZING_ENGINE} )
351+     target_link_libraries (${name}  PRIVATE  ${COMMON_LINK_LIBS} )
347352    target_link_options (${name}  PRIVATE  ${COMMON_LINK_OPTIONS} )
353+     add_dependencies (${name}  ${FUZZ_DEPS} )
348354endmacro ()
349355
350- # Main fuzzer (all protocols) 
351- add_executable (curl_fuzzer ${COMMON_SOURCES} )
352- target_compile_options (curl_fuzzer PRIVATE  ${COMMON_FLAGS}  -DFUZZ_PROTOCOLS_ALL)
353- target_include_directories (curl_fuzzer PRIVATE  ${CURL_INCLUDE_DIRS} )
354- target_link_libraries (curl_fuzzer PRIVATE  ${COMMON_LINK_LIBS}  ${LIB_FUZZING_ENGINE} )
355- target_link_options (curl_fuzzer PRIVATE  ${COMMON_LINK_OPTIONS} )
356- 
357- # Protocol-specific fuzzers 
356+ # Main fuzzer and protocol-specific fuzzers 
357+ add_curl_fuzzer(curl_fuzzer           ALL )
358358add_curl_fuzzer(curl_fuzzer_dict      DICT)
359359add_curl_fuzzer(curl_fuzzer_file      FILE)
360360add_curl_fuzzer(curl_fuzzer_ftp       FTP)
@@ -376,39 +376,22 @@ target_compile_options(curl_fuzzer_bufq PRIVATE ${COMMON_FLAGS})
376376target_include_directories (curl_fuzzer_bufq PRIVATE  ${CURL_INCLUDE_DIRS} )
377377target_link_libraries (curl_fuzzer_bufq PRIVATE  ${COMMON_LINK_LIBS} )
378378target_link_options (curl_fuzzer_bufq PRIVATE  ${COMMON_LINK_OPTIONS} )
379+ add_dependencies (curl_fuzzer_bufq ${FUZZ_DEPS} )
379380
380381# URL fuzzer 
381382add_executable (fuzz_url fuzz_url.cc)
382383target_compile_options (fuzz_url PRIVATE  ${COMMON_FLAGS} )
383384target_include_directories (fuzz_url PRIVATE  ${CURL_INCLUDE_DIRS} )
384385target_link_libraries (fuzz_url PRIVATE  ${COMMON_LINK_LIBS} )
385386target_link_options (fuzz_url PRIVATE  ${COMMON_LINK_OPTIONS} )
387+ add_dependencies (fuzz_url ${FUZZ_DEPS} )
386388
387389# Unit test fuzzer 
388390add_executable (curl_fuzzer_fnmatch fuzz_fnmatch.cc)
389391target_compile_options (curl_fuzzer_fnmatch PRIVATE  ${COMMON_FLAGS} )
390392target_include_directories (curl_fuzzer_fnmatch PRIVATE  ${CURL_INCLUDE_DIRS} )
391393target_link_libraries (curl_fuzzer_fnmatch PRIVATE  ${COMMON_LINK_LIBS} )
392394target_link_options (curl_fuzzer_fnmatch PRIVATE  ${COMMON_LINK_OPTIONS} )
393- 
394- set (FUZZ_DEPS curl_external ${LIB_FUZZING_ENGINE_DEP}  zlib_external nghttp2_external ${OPENSSL_DEP} )
395- add_dependencies (curl_fuzzer ${FUZZ_DEPS} )
396- add_dependencies (curl_fuzzer_dict ${FUZZ_DEPS} )
397- add_dependencies (curl_fuzzer_file ${FUZZ_DEPS} )
398- add_dependencies (curl_fuzzer_ftp ${FUZZ_DEPS} )
399- add_dependencies (curl_fuzzer_gopher ${FUZZ_DEPS} )
400- add_dependencies (curl_fuzzer_http ${FUZZ_DEPS} )
401- add_dependencies (curl_fuzzer_https ${FUZZ_DEPS} )
402- add_dependencies (curl_fuzzer_imap ${FUZZ_DEPS} )
403- add_dependencies (curl_fuzzer_mqtt ${FUZZ_DEPS} )
404- add_dependencies (curl_fuzzer_pop3 ${FUZZ_DEPS} )
405- add_dependencies (curl_fuzzer_rtsp ${FUZZ_DEPS} )
406- add_dependencies (curl_fuzzer_smb ${FUZZ_DEPS} )
407- add_dependencies (curl_fuzzer_smtp ${FUZZ_DEPS} )
408- add_dependencies (curl_fuzzer_tftp ${FUZZ_DEPS} )
409- add_dependencies (curl_fuzzer_ws ${FUZZ_DEPS} )
410- add_dependencies (curl_fuzzer_bufq ${FUZZ_DEPS} )
411- add_dependencies (fuzz_url ${FUZZ_DEPS} )
412395add_dependencies (curl_fuzzer_fnmatch ${FUZZ_DEPS} )
413396
414397# Create a custom target for all fuzzers 
0 commit comments