blob: 01e4ce14315e0dee2c6d04cf782f9f081f2be805 [file] [log] [blame]
# 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
}