| # 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_akaros.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_akaros.h", |
| "${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/80334): 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/akaros.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_akaros.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_akaros.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/akaros.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/akaros.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/akaros/init.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/akaros.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" ] |
| } |
| } |