| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| group("afl") { |
| deps = [ |
| ":afl-cmin", |
| ":afl-fuzz", |
| ":afl-showmap", |
| ":afl-tmin", |
| ":afl_docs", |
| ":afl_runtime", |
| ] |
| } |
| |
| source_set("afl_runtime") { |
| # AFL needs this flag to be built with -Werror. This is because it uses u8* |
| # and char* types interchangeably in its source code. The AFL Makefiles use |
| # this flag. |
| cflags = [ "-Wno-pointer-sign" ] |
| |
| configs -= [ |
| # These functions should not be compiled with sanitizers since they |
| # are used by the sanitizers. |
| "//build/config/sanitizers:default_sanitizer_flags", |
| |
| # Every function in this library should have "default" visibility. |
| # Thus we turn off flags which make visibility "hidden" for functions |
| # that do not specify visibility. |
| # The functions in this library will not conflict with others elsewhere |
| # because they begin with a double underscore and/or are static. |
| "//build/config/gcc:symbol_visibility_hidden", |
| ] |
| |
| sources = [ |
| "src/llvm_mode/afl-llvm-rt.o.c", |
| ] |
| } |
| |
| afl_headers = [ |
| "src/alloc-inl.h", |
| "src/config.h", |
| "src/debug.h", |
| "src/types.h", |
| "src/hash.h", |
| ] |
| |
| config("afl-tool") { |
| cflags = [ |
| # Include flags from afl's Makefile. |
| "-O3", |
| "-funroll-loops", |
| "-D_FORTIFY_SOURCE=2", |
| |
| # These flags are necessary to build with -Werror. |
| "-Wno-sign-compare", |
| "-Wno-pointer-sign", |
| |
| # afl_docs copies docs/ to this location. |
| "-DDOC_PATH=\"$root_build_dir/afl/docs/\"", |
| |
| # This flag is needed for compilation but is only used for QEMU mode which |
| # we do not use. Therefore its value is unimportant. |
| "-DBIN_PATH=\"$root_build_dir\"", |
| ] |
| } |
| |
| copy("afl-cmin") { |
| # afl-cmin is a bash script used to minimize the corpus, therefore we can just |
| # copy it over. |
| sources = [ |
| "src/afl-cmin", |
| ] |
| outputs = [ |
| "$root_build_dir/{{source_file_part}}", |
| ] |
| deps = [ |
| ":afl-showmap", |
| ] |
| } |
| |
| copy("afl_docs") { |
| # Copy the docs folder. This is so that we can use a real value for for |
| # -DDOC_PATH when compiling. |
| sources = [ |
| "src/docs", |
| ] |
| outputs = [ |
| "$root_build_dir/afl/{{source_file_part}}", |
| ] |
| } |
| |
| executable("afl-fuzz") { |
| # Used to fuzz programs. |
| configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] |
| configs += [ ":afl-tool" ] |
| |
| no_default_deps = true |
| |
| sources = [ |
| "src/afl-fuzz.c", |
| ] |
| sources += afl_headers |
| } |
| |
| executable("afl-tmin") { |
| configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] |
| configs += [ ":afl-tool" ] |
| |
| no_default_deps = true |
| |
| sources = [ |
| "src/afl-tmin.c", |
| ] |
| sources += afl_headers |
| } |
| |
| executable("afl-showmap") { |
| configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] |
| configs += [ ":afl-tool" ] |
| |
| no_default_deps = true |
| |
| sources = [ |
| "src/afl-showmap.c", |
| ] |
| sources += afl_headers |
| } |