blob: 6954880f02cf123934cdcb1ee7f080c4b0cea8cf [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/compiled_action.gni")
import("//build/components.gni")
import("//build/go/go_binary.gni")
import("//build/go/go_library.gni")
_default_syzkaller_dir = "//third_party/syzkaller"
declare_args() {
# Used by syz-ci to build with own syz-executor source.
syzkaller_dir = _default_syzkaller_dir
}
group("syzkaller") {
testonly = true
deps = [ ":tests" ]
}
group("tests") {
testonly = true
deps = [ ":syz-executor-pkg" ]
}
fuchsia_shell_package("syz-executor-pkg") {
deps = [ ":syz-executor" ]
}
src = rebase_path(syzkaller_dir)
if (target_cpu == "x64") {
GOARCH = "amd64"
} else {
GOARCH = target_cpu
}
GOOS = "fuchsia"
HOSTGOOS = "linux"
# Like "git rev-parse HEAD", but without needing a Python script wrapper.
GIT_REVISION = read_file("${src}/.git/HEAD", "trim string")
GIT_BRANCH = string_replace(GIT_REVISION, "ref: ", "", 1)
if (GIT_BRANCH != GIT_REVISION) {
GIT_REVISION = read_file("${src}/.git/${GIT_BRANCH}", "trim string")
}
compiled_action("generate-syscall-definitions") {
tool = ":syz-sysgen"
outputs = [
"$target_gen_dir/sysgen/executor/defs.h",
"$target_gen_dir/sysgen/executor/syscalls.h",
]
args = [
"--src",
src,
"--out",
rebase_path("$target_gen_dir/sysgen", root_build_dir),
]
}
executable("syz-executor") {
sources = [
"${src}/executor/common.h",
"${src}/executor/common_bsd.h",
"${src}/executor/common_fuchsia.h",
"${src}/executor/common_kvm_amd64.h",
"${src}/executor/common_kvm_arm64.h",
"${src}/executor/common_linux.h",
"${src}/executor/common_test.h",
"${src}/executor/common_usb.h",
"${src}/executor/common_windows.h",
"${src}/executor/executor.cc",
"${src}/executor/executor_bsd.h",
"${src}/executor/executor_fuchsia.h",
"${src}/executor/executor_linux.h",
"${src}/executor/executor_test.h",
"${src}/executor/executor_windows.h",
"${src}/executor/kvm.h",
"${src}/executor/kvm_amd64.S.h",
"${src}/executor/nocover.h",
"${src}/executor/test.h",
"${src}/executor/test_linux.h",
]
sources += get_target_outputs(":generate-syscall-definitions")
defines = [
"GOOS_${GOOS}=1",
"GOARCH_${GOARCH}=1",
"HOSTGOOS_${HOSTGOOS}=1",
"GIT_REVISION=\"${GIT_REVISION}\"",
]
generated_syscalls_dir =
rebase_path(
get_label_info(":generate-syscall-definitions", "target_gen_dir"),
root_build_dir)
cflags = [ "-I$generated_syscalls_dir/sysgen/executor" ]
configs -= [ "//build/config:default_warnings" ]
configs += [ ":warnings" ]
deps = [
":generate-syscall-definitions",
"//sdk/lib/fdio",
"//src/devices/lib/driver",
"//src/lib/ddk",
]
}
# Match the warnings enabled for Fuchsia builds in syzkaller/sys/targets/targets.go.
config("warnings") {
cflags = [
"-Wall",
"-Werror",
"-Wparentheses",
"-Wunused-const-variable",
"-Wframe-larger-than=16384",
"-Wunused-const-variable",
"-Wno-deprecated",
]
}
if (is_host) {
go_library("syzkaller-go") {
name = "github.com/google/syzkaller/..."
source_dir = syzkaller_dir
if (source_dir != _default_syzkaller_dir) {
# TODO(https://fxbug.dev/42160667): Figure out a way to support building
# syzkaller-go without globbing.
allow_globbing = true
} else {
sources = [
"dashboard/app/access.go",
"dashboard/app/admin.go",
"dashboard/app/api.go",
"dashboard/app/config.go",
"dashboard/app/dashboard.go",
"dashboard/app/entities.go",
"dashboard/app/handler.go",
"dashboard/app/jobs.go",
"dashboard/app/main.go",
"dashboard/app/reporting.go",
"dashboard/app/reporting_email.go",
"dashboard/app/reporting_external.go",
"dashboard/dashapi/dashapi.go",
"executor/gen.go",
"executor/stub.go",
"pkg/ast/ast.go",
"pkg/ast/clone.go",
"pkg/ast/filter.go",
"pkg/ast/format.go",
"pkg/ast/parser.go",
"pkg/ast/scanner.go",
"pkg/ast/test_util.go",
"pkg/ast/walk.go",
"pkg/bisect/bisect.go",
"pkg/build/build.go",
"pkg/build/freebsd.go",
"pkg/build/fuchsia.go",
"pkg/build/gvisor.go",
"pkg/build/linux.go",
"pkg/build/linux_generated.go",
"pkg/build/netbsd.go",
"pkg/build/openbsd.go",
"pkg/build/test.go",
"pkg/cmdprof/cmdprof.go",
"pkg/compiler/attrs.go",
"pkg/compiler/check.go",
"pkg/compiler/compiler.go",
"pkg/compiler/consts.go",
"pkg/compiler/fuzz.go",
"pkg/compiler/gen.go",
"pkg/compiler/types.go",
"pkg/config/config.go",
"pkg/cover/cover.go",
"pkg/cover/report.go",
"pkg/csource/build.go",
"pkg/csource/common.go",
"pkg/csource/csource.go",
"pkg/csource/gen.go",
"pkg/csource/generated.go",
"pkg/csource/options.go",
"pkg/db/db.go",
"pkg/email/parser.go",
"pkg/email/patch.go",
"pkg/email/reply.go",
"pkg/gce/gce.go",
"pkg/gcs/gcs.go",
"pkg/hash/hash.go",
"pkg/host/features.go",
"pkg/host/features_linux.go",
"pkg/host/host_darwin.go",
"pkg/host/host_freebsd.go",
"pkg/host/host_fuchsia.go",
"pkg/host/host_netbsd.go",
"pkg/host/host_openbsd.go",
"pkg/host/host_windows.go",
"pkg/host/syscalls.go",
"pkg/host/syscalls_linux.go",
"pkg/html/generated.go",
"pkg/html/html.go",
"pkg/ifuzz/decode.go",
"pkg/ifuzz/encode.go",
"pkg/ifuzz/gen/gen.go",
"pkg/ifuzz/generated/empty.go",
"pkg/ifuzz/generated/insns.go",
"pkg/ifuzz/ifuzz.go",
"pkg/ifuzz/pseudo.go",
"pkg/ifuzz/xed.go",
"pkg/instance/instance.go",
"pkg/ipc/gate.go",
"pkg/ipc/ipc.go",
"pkg/ipc/ipcconfig/ipcconfig.go",
"pkg/kd/kd.go",
"pkg/log/log.go",
"pkg/mgrconfig/config.go",
"pkg/mgrconfig/load.go",
"pkg/osutil/fileutil.go",
"pkg/osutil/osutil.go",
"pkg/osutil/osutil_appengine.go",
"pkg/osutil/osutil_bsd.go",
"pkg/osutil/osutil_darwin.go",
"pkg/osutil/osutil_fuchsia.go",
"pkg/osutil/osutil_linux.go",
"pkg/osutil/osutil_unix.go",
"pkg/osutil/osutil_windows.go",
"pkg/report/freebsd.go",
"pkg/report/fuchsia.go",
"pkg/report/fuzz.go",
"pkg/report/gvisor.go",
"pkg/report/linux.go",
"pkg/report/netbsd.go",
"pkg/report/openbsd.go",
"pkg/report/report.go",
"pkg/report/stub.go",
"pkg/repro/repro.go",
"pkg/rpctype/rpc.go",
"pkg/rpctype/rpctype.go",
"pkg/runtest/run.go",
"pkg/serializer/serializer.go",
"pkg/signal/signal.go",
"pkg/symbolizer/nm.go",
"pkg/symbolizer/symbolizer.go",
"pkg/vcs/freebsd.go",
"pkg/vcs/fuchsia.go",
"pkg/vcs/git.go",
"pkg/vcs/git_test_util.go",
"pkg/vcs/linux.go",
"pkg/vcs/netbsd.go",
"pkg/vcs/openbsd.go",
"pkg/vcs/testos.go",
"pkg/vcs/vcs.go",
"prog/alloc.go",
"prog/analysis.go",
"prog/any.go",
"prog/checksum.go",
"prog/clone.go",
"prog/decodeexec.go",
"prog/encoding.go",
"prog/encodingexec.go",
"prog/generation.go",
"prog/hints.go",
"prog/meta.go",
"prog/minimization.go",
"prog/mutation.go",
"prog/parse.go",
"prog/prio.go",
"prog/prog.go",
"prog/rand.go",
"prog/resources.go",
"prog/rotation.go",
"prog/size.go",
"prog/target.go",
"prog/test/fuzz.go",
"prog/test_util.go",
"prog/types.go",
"prog/validation.go",
"sys/freebsd/init.go",
"sys/fuchsia/fidlgen/main.go",
"sys/fuchsia/init.go",
"sys/fuchsia/layout/fidl_mappings.go",
"sys/linux/init.go",
"sys/linux/init_alg.go",
"sys/linux/init_iptables.go",
"sys/linux/init_vusb.go",
"sys/linux/init_vusb_ids.go",
"sys/netbsd/init.go",
"sys/openbsd/init.go",
"sys/sys.go",
"sys/syz-extract/extract.go",
"sys/syz-extract/fetch.go",
"sys/syz-extract/freebsd.go",
"sys/syz-extract/fuchsia.go",
"sys/syz-extract/linux.go",
"sys/syz-extract/netbsd.go",
"sys/syz-extract/openbsd.go",
"sys/syz-extract/trusty.go",
"sys/syz-extract/windows.go",
"sys/syz-sysgen/sysgen.go",
"sys/targets/common.go",
"sys/targets/targets.go",
"sys/test/init.go",
"sys/trusty/init.go",
"sys/windows/init.go",
"syz-ci/jobs.go",
"syz-ci/manager.go",
"syz-ci/managercmd.go",
"syz-ci/syz-ci.go",
"syz-ci/updater.go",
"syz-fuzzer/fuzzer.go",
"syz-fuzzer/proc.go",
"syz-fuzzer/testing.go",
"syz-fuzzer/workqueue.go",
"syz-hub/http.go",
"syz-hub/hub.go",
"syz-hub/state/state.go",
"syz-manager/cover.go",
"syz-manager/html.go",
"syz-manager/hub.go",
"syz-manager/manager.go",
"syz-manager/rpc.go",
"syz-manager/stats.go",
"tools/syz-benchcmp/benchcmp.go",
"tools/syz-bisect/bisect.go",
"tools/syz-check/check.go",
"tools/syz-check/dwarf.go",
"tools/syz-cover/syz-cover.go",
"tools/syz-crush/crush.go",
"tools/syz-db/syz-db.go",
"tools/syz-execprog/execprog.go",
"tools/syz-expand/expand.go",
"tools/syz-fmt/syz-fmt.go",
"tools/syz-imagegen/imagegen.go",
"tools/syz-make/make.go",
"tools/syz-mutate/mutate.go",
"tools/syz-prog2c/prog2c.go",
"tools/syz-repro/repro.go",
"tools/syz-reprolist/reprolist.go",
"tools/syz-runtest/runtest.go",
"tools/syz-showprio/showprio.go",
"tools/syz-stress/stress.go",
"tools/syz-symbolize/symbolize.go",
"tools/syz-testbuild/testbuild.go",
"tools/syz-trace2syz/parser/intermediate_types.go",
"tools/syz-trace2syz/parser/lex.go",
"tools/syz-trace2syz/parser/parser.go",
"tools/syz-trace2syz/parser/strace.go",
"tools/syz-trace2syz/proggen/call_selector.go",
"tools/syz-trace2syz/proggen/fuzz.go",
"tools/syz-trace2syz/proggen/generate_unions.go",
"tools/syz-trace2syz/proggen/proggen.go",
"tools/syz-trace2syz/proggen/return_cache.go",
"tools/syz-trace2syz/proggen/unsupported_calls.go",
"tools/syz-trace2syz/trace2syz.go",
"tools/syz-tty/syz-tty.go",
"tools/syz-upgrade/upgrade.go",
"tools/syz-usbgen/usbgen.go",
"vm/adb/adb.go",
"vm/adb/adb_ppc64le.go",
"vm/bhyve/bhyve.go",
"vm/gce/gce.go",
"vm/gce/tar_go1.10.go",
"vm/gce/tar_go1.9.go",
"vm/gvisor/gvisor.go",
"vm/isolated/isolated.go",
"vm/kvm/kvm.go",
"vm/odroid/empty.go",
"vm/odroid/odroid.go",
"vm/qemu/qemu.go",
"vm/vm.go",
"vm/vmimpl/console.go",
"vm/vmimpl/console_darwin.go",
"vm/vmimpl/console_freebsd.go",
"vm/vmimpl/console_linux_386.go",
"vm/vmimpl/console_linux_amd64.go",
"vm/vmimpl/console_linux_arm.go",
"vm/vmimpl/console_linux_arm64.go",
"vm/vmimpl/console_linux_ppc64le.go",
"vm/vmimpl/console_netbsd.go",
"vm/vmimpl/console_openbsd.go",
"vm/vmimpl/freebsd.go",
"vm/vmimpl/merger.go",
"vm/vmimpl/openbsd.go",
"vm/vmimpl/util.go",
"vm/vmimpl/vmimpl.go",
"vm/vmm/vmm.go",
]
}
deps = [ "//third_party/golibs:golang.org/x/sys" ]
}
syz_ldflags = [
"-s",
"-w",
"-X github.com/google/syzkaller/sys.GitRevision=${GIT_REVISION}",
"-X 'github.com/google/syzkaller/sys.gitRevisionDate=Sun Jan 10 11:00:00 1970 -0700'",
]
go_binary("syz-sysgen") {
gopackage = "github.com/google/syzkaller/sys/syz-sysgen"
ldflags = syz_ldflags
deps = [ ":syzkaller-go" ]
}
}