# Copyright 2016 The Chromium Authors
# 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
}