2015-11-09 21:57:26 +00:00
|
|
|
include_directories(../include)
|
|
|
|
|
2017-07-14 20:54:42 +01:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-prototypes")
|
|
|
|
|
2018-08-24 18:46:01 +01:00
|
|
|
macro(fuzzer name)
|
|
|
|
add_executable(${name} ${name}.cc)
|
Support symbol prefixes
- In base.h, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols.h
- In all .S files, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols_asm.h
- In base.h, BSSL_NAMESPACE_BEGIN and BSSL_NAMESPACE_END are
defined with appropriate values depending on whether
BORINGSSL_PREFIX is defined; these macros are used in place
of 'namespace bssl {' and '}'
- Add util/make_prefix_headers.go, which takes a list of symbols
and auto-generates the header files mentioned above
- In CMakeLists.txt, if BORINGSSL_PREFIX and BORINGSSL_PREFIX_SYMBOLS
are defined, run util/make_prefix_headers.go to generate header
files
- In various CMakeLists.txt files, add "global_target" that all
targets depend on to give us a place to hook logic that must run
before all other targets (in particular, the header file generation
logic)
- Document this in BUILDING.md, including the fact that it is
the caller's responsibility to provide the symbol list and keep it
up to date
- Note that this scheme has not been tested on Windows, and likely
does not work on it; Windows support will need to be added in a
future commit
Change-Id: If66a7157f46b5b66230ef91e15826b910cf979a2
Reviewed-on: https://boringssl-review.googlesource.com/31364
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: David Benjamin <davidben@google.com>
2018-08-27 02:53:36 +01:00
|
|
|
add_dependencies(${name} global_target)
|
2018-08-24 18:46:01 +01:00
|
|
|
target_link_libraries(${name} crypto ${ARGN})
|
Update tools.
Unfortunately, this requires partially reverting
https://boringssl-review.googlesource.com/31324. This is a mess.
While clang proper includes a fuzzer driver, Chromium doesn't use it.
Chromium builds exclusively with fuzzer-no-link and links to its own
copy of the fuzzer runtime[1]. As of [2], Chromium's clang (which we use
on bots) no longer includes the driver, so we must mimic them.
However, Chromium's setup is somewhat questionable because
fuzzer-no-link pulls in libclang_rt.fuzzer_no_main which still includes
most of libclang_rt.fuzzer, just not the one main function[3]. It
appears Chromium is actually linking two copies of
libclang_rt.fuzzer_no_main. Hopefully this mostly works out as Chromium's
clang and libFuzzer should be relatively aligned, but it's not a good
assumption for our build, which can take other Clangs too.
Thus, if you pass -DFUZZ=1 as-is, we will assume you are using a
"normal" Clang with all its relevant runtimes intact. If, however, you
are using Chromium clang, you must drop the matching libFuzzer where the
bots expected it and build with -DLIBFUZZER_FROM_DEPS=1.
This involves no changes to the bots because we never actually unwound
all the LIBFUZZER_FROM_DEPS bits before.
[1] https://cs.chromium.org/chromium/src/testing/libfuzzer/BUILD.gn?rcl=d21c49585f262e851e2984f96f52905782706325&l=14
[2] https://chromium.googlesource.com/chromium/src/+/c79bf2ea4cf65431dccb57cb2a44528c284645a1
[3] https://github.com/llvm-mirror/compiler-rt/blob/8ebc3668b07fc5cca6010265cd4795443f1c1bea/lib/fuzzer/CMakeLists.txt#L93-L107
https://github.com/llvm-mirror/compiler-rt/blob/8ebc3668b07fc5cca6010265cd4795443f1c1bea/lib/fuzzer/FuzzerMain.cpp
Change-Id: I946b3c821c3d7e6def7e07f1381f58241611ba3d
Reviewed-on: https://boringssl-review.googlesource.com/c/34184
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
2019-01-07 21:13:04 +00:00
|
|
|
if(LIBFUZZER_FROM_DEPS)
|
|
|
|
set_target_properties(${name} PROPERTIES LINK_FLAGS "-fsanitize=fuzzer-no-link")
|
|
|
|
target_link_libraries(${name} Fuzzer)
|
|
|
|
else()
|
|
|
|
set_target_properties(${name} PROPERTIES LINK_FLAGS "-fsanitize=fuzzer")
|
|
|
|
endif()
|
2018-08-24 18:46:01 +01:00
|
|
|
endmacro()
|
|
|
|
|
2018-08-31 21:37:56 +01:00
|
|
|
fuzzer(arm_cpuinfo)
|
2018-08-24 18:46:01 +01:00
|
|
|
fuzzer(bn_mod_exp)
|
|
|
|
fuzzer(privkey)
|
|
|
|
fuzzer(cert)
|
|
|
|
fuzzer(spki)
|
|
|
|
fuzzer(pkcs8)
|
|
|
|
fuzzer(pkcs12)
|
|
|
|
fuzzer(read_pem)
|
|
|
|
fuzzer(server ssl)
|
|
|
|
fuzzer(client ssl)
|
|
|
|
fuzzer(dtls_server ssl)
|
|
|
|
fuzzer(dtls_client ssl)
|
|
|
|
fuzzer(ssl_ctx_api ssl)
|
|
|
|
fuzzer(session ssl)
|