github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/Makefile (about)

     1  # Copyright 2017 syzkaller project authors. All rights reserved.
     2  # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  # There are 3 OS/arch pairs:
     5  #  - HOSTOS/HOSTARCH: pair where syz-manager will run.
     6  #  - TARGETOS/TARGETVMARCH: pair of the target OS under test.
     7  #  - TARGETOS/TARGETARCH: pair of the target test process.
     8  #
     9  # The last 2 differ for e.g. amd64 OS and 386 test processes (compat syscall testing).
    10  # All pairs default to the current machine. All but BUILD can be overriden.
    11  #
    12  # For example, to test linux/amd64 on linux/amd64, you just run:
    13  #    make
    14  # To test linux/arm64 from darwin/amd64 host, run:
    15  #    make HOSTOS=darwin HOSTARCH=amd64 TARGETOS=linux TARGETARCH=arm64
    16  # To test x86 compat syscalls, run:
    17  #    make TARGETVMARCH=amd64 TARGETARCH=386
    18  #
    19  # There is one special case for extracting constants for Android
    20  # (you don't need this unless you update system call descriptions):
    21  #    make extract TARGETOS=android SOURCEDIR=/path/to/android/checkout
    22  
    23  define newline
    24  
    25  
    26  endef
    27  
    28  RED := $(shell tput setaf 1)
    29  RESET := $(shell tput sgr0)
    30  ifndef SYZ_ENV
    31  $(warning $(RED)run command via tools/syz-env for best compatibility, see:$(RESET))
    32  $(warning $(RED)https://github.com/google/syzkaller/blob/master/docs/contributing.md#using-syz-env$(RESET))
    33  endif
    34  
    35  GITREV=$(shell git rev-parse HEAD)
    36  ifeq ("$(shell git diff --shortstat)", "")
    37  	REV=$(GITREV)
    38  else
    39  	REV=$(GITREV)+
    40  endif
    41  GITREVDATE=$(shell git log -n 1 --format="%cd" --date=format:%Y%m%d-%H%M%S)
    42  
    43  # Don't generate symbol table and DWARF debug info.
    44  # Reduces build time and binary sizes considerably.
    45  # That's only needed if you use gdb or nm.
    46  # If you need that, build manually with DEBUG=true env.
    47  GLFLAGS :=
    48  GGFLAGS :=
    49  ifeq ("$(DEBUG)", "true")
    50  	GGFLAGS := -gcflags="all=-N -l"
    51  else
    52  	GLFLAGS := -s -w
    53  endif
    54  GOFLAGS := -ldflags="$(GLFLAGS) -X github.com/google/syzkaller/prog.GitRevision=$(REV) -X github.com/google/syzkaller/prog.gitRevisionDate=$(GITREVDATE)" $(GGFLAGS)
    55  ifneq ("$(GOTAGS)", "")
    56  	GOFLAGS += " -tags=$(GOTAGS)"
    57  endif
    58  
    59  GOHOSTFLAGS ?= $(GOFLAGS)
    60  GOTARGETFLAGS ?= $(GOFLAGS)
    61  
    62  ENV := $(subst \n,$(newline),$(shell CI=$(CI)\
    63  	SOURCEDIR=$(SOURCEDIR) HOSTOS=$(HOSTOS) HOSTARCH=$(HOSTARCH) \
    64  	TARGETOS=$(TARGETOS) TARGETARCH=$(TARGETARCH) TARGETVMARCH=$(TARGETVMARCH) \
    65  	SYZ_CLANG=$(SYZ_CLANG) \
    66  	go run $(GOHOSTFLAGS) tools/syz-make/make.go))
    67  # Uncomment in case of emergency.
    68  # $(info $(ENV))
    69  $(eval $(ENV))
    70  ifneq ("$(SYZERROR)", "")
    71  $(error $(SYZERROR))
    72  endif
    73  ifeq ("$(NCORES)", "")
    74  $(error syz-make failed)
    75  endif
    76  ifeq ("$(MAKELEVEL)", "0")
    77  	MAKEFLAGS += -j$(NCORES) --no-print-directory
    78  endif
    79  
    80  GO := go
    81  HOSTGO := go
    82  # By default, build all Go binaries as static. We don't need cgo and it is
    83  # known to cause problems at least on Android emulator.
    84  CGO_ENABLED ?= 0
    85  export CGO_ENABLED
    86  TARGETGOOS := $(TARGETOS)
    87  TARGETGOARCH := $(TARGETVMARCH)
    88  export GO111MODULE=on
    89  export GOBIN=$(shell pwd -P)/bin
    90  
    91  ifeq ("$(TARGETOS)", "test")
    92  	TARGETGOOS := $(HOSTOS)
    93  	TARGETGOARCH := $(HOSTARCH)
    94  endif
    95  
    96  ifeq ("$(TARGETOS)", "fuchsia")
    97  	TARGETGOOS := $(HOSTOS)
    98  	TARGETGOARCH := $(HOSTARCH)
    99  endif
   100  
   101  ifeq ("$(TARGETOS)", "trusty")
   102  	TARGETGOOS := $(HOSTOS)
   103  	TARGETGOARCH := $(HOSTARCH)
   104  endif
   105  
   106  .PHONY: all clean host target \
   107  	manager executor kfuzztest ci hub \
   108  	execprog mutate prog2c trace2syz repro upgrade db \
   109  	usbgen symbolize cover kconf syz-build crush \
   110  	bin/syz-extract bin/syz-fmt \
   111  	extract generate generate_go generate_rpc generate_sys \
   112  	format format_go format_cpp format_sys \
   113  	tidy test test_race \
   114  	check_copyright check_language check_whitespace check_links check_diff check_commits check_shebang check_html \
   115  	presubmit presubmit_aux presubmit_build presubmit_arch_linux presubmit_arch_freebsd \
   116  	presubmit_arch_netbsd presubmit_arch_openbsd presubmit_arch_darwin presubmit_arch_windows \
   117  	presubmit_arch_executor presubmit_dashboard presubmit_race presubmit_race_dashboard presubmit_old
   118  
   119  all: host target
   120  host: manager repro mutate prog2c db upgrade
   121  target: execprog executor check_syzos
   122  
   123  executor: descriptions
   124  ifeq ($(TARGETOS),fuchsia)
   125  	# Dont build syz-executor for fuchsia.
   126  else
   127  ifneq ("$(BUILDOS)", "$(NATIVEBUILDOS)")
   128  	$(info ************************************************************************************)
   129  	$(info Executor will not be built)
   130  	$(info Building executor for ${TARGETOS} is not supported on ${BUILDOS})
   131  	$(info ************************************************************************************)
   132  else
   133  ifneq ("$(NO_CROSS_COMPILER)", "")
   134  	$(info ************************************************************************************)
   135  	$(info Executor will not be built)
   136  	$(info Native cross-compiler is missing/broken:)
   137  	$(info $(NO_CROSS_COMPILER))
   138  	$(info ************************************************************************************)
   139  else
   140  	mkdir -p ./bin/$(TARGETOS)_$(TARGETARCH)
   141  	$(CXX) -o ./bin/$(TARGETOS)_$(TARGETARCH)/syz-executor$(EXE) executor/executor.cc \
   142  		$(ADDCXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -DGOOS_$(TARGETOS)=1 -DGOARCH_$(TARGETARCH)=1 \
   143  		-DHOSTGOOS_$(HOSTOS)=1 -DGIT_REVISION=\"$(REV)\"
   144  endif
   145  endif
   146  endif
   147  
   148  # .descriptions is a stub file that serves as a substitute for all files generated by syz-sysgen:
   149  # sys/*/gen/*.go, executor/defs.h, executor/syscalls.h
   150  # syz-sysgen generates them all at once, so we can't make each of them an independent target.
   151  .PHONY: descriptions
   152  descriptions:
   153  	go list -f '{{.Stale}}' $(GOHOSTFLAGS) ./sys/syz-sysgen | grep -q false || go install $(GOHOSTFLAGS) ./sys/syz-sysgen
   154  	$(MAKE) .descriptions
   155  
   156  .descriptions: sys/*/*.txt sys/*/*.const bin/syz-sysgen
   157  	bin/syz-sysgen
   158  	touch .descriptions
   159  
   160  go-flags:
   161  	@echo "${GOHOSTFLAGS}"
   162  
   163  manager: descriptions
   164  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-manager github.com/google/syzkaller/syz-manager
   165  
   166  execprog: descriptions
   167  	GOOS=$(TARGETGOOS) GOARCH=$(TARGETGOARCH) $(GO) build $(GOTARGETFLAGS) -o ./bin/$(TARGETOS)_$(TARGETVMARCH)/syz-execprog$(EXE) github.com/google/syzkaller/tools/syz-execprog
   168  
   169  ci: descriptions
   170  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-ci github.com/google/syzkaller/syz-ci
   171  
   172  hub: descriptions
   173  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-hub github.com/google/syzkaller/syz-hub
   174  
   175  repro: descriptions
   176  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-repro github.com/google/syzkaller/tools/syz-repro
   177  
   178  mutate: descriptions
   179  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-mutate github.com/google/syzkaller/tools/syz-mutate
   180  
   181  diff: descriptions target
   182  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-diff github.com/google/syzkaller/tools/syz-diff
   183  
   184  prog2c: descriptions
   185  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-prog2c github.com/google/syzkaller/tools/syz-prog2c
   186  
   187  crush: descriptions
   188  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-crush github.com/google/syzkaller/tools/syz-crush
   189  
   190  reporter: descriptions
   191  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-reporter github.com/google/syzkaller/tools/syz-reporter
   192  
   193  db: descriptions
   194  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-db github.com/google/syzkaller/tools/syz-db
   195  
   196  upgrade: descriptions
   197  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-upgrade github.com/google/syzkaller/tools/syz-upgrade
   198  
   199  trace2syz: descriptions
   200  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-trace2syz github.com/google/syzkaller/tools/syz-trace2syz
   201  
   202  expand: descriptions
   203  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-expand github.com/google/syzkaller/tools/syz-expand
   204  
   205  usbgen:
   206  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-usbgen github.com/google/syzkaller/tools/syz-usbgen
   207  
   208  symbolize:
   209  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-symbolize github.com/google/syzkaller/tools/syz-symbolize
   210  cover:
   211  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-cover github.com/google/syzkaller/tools/syz-cover
   212  kconf:
   213  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-kconf github.com/google/syzkaller/tools/syz-kconf
   214  syz-build:
   215  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-build github.com/google/syzkaller/tools/syz-build
   216  
   217  bisect: descriptions
   218  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-bisect github.com/google/syzkaller/tools/syz-bisect
   219  
   220  ifeq ($(HOSTOS), linux)
   221  kfuzztest: descriptions
   222  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-kfuzztest github.com/google/syzkaller/syz-kfuzztest
   223  else
   224  kfuzztest:
   225  	@echo "Skipping kfuzztest build (it's Linux-only)"
   226  endif
   227  
   228  verifier: descriptions
   229  	# TODO: switch syz-verifier to use syz-executor.
   230  	# GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-verifier github.com/google/syzkaller/syz-verifier
   231  
   232  # `extract` extracts const files from various kernel sources, and may only
   233  # re-generate parts of files.
   234  extract: bin/syz-extract
   235  	bin/syz-extract -build -os=$(TARGETOS) -sourcedir=$(SOURCEDIR) $(FILES)
   236  
   237  bin/syz-extract:
   238  	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o $@ ./sys/syz-extract
   239  
   240  # `generate` does *not* depend on any kernel sources, and generates everything
   241  # in one pass, for all arches. It can be run on a bare syzkaller checkout.
   242  generate:
   243  	$(MAKE) descriptions
   244  	$(MAKE) generate_go
   245  	$(MAKE) generate_rpc
   246  	$(MAKE) format
   247  
   248  generate_go: format_cpp
   249  	$(GO) generate ./...
   250  	$(GO) tool mockery --log-level="error"
   251  
   252  generate_rpc:
   253  	flatc -o pkg/flatrpc --warnings-as-errors --gen-object-api --filename-suffix "" --go --gen-onefile --go-namespace flatrpc pkg/flatrpc/flatrpc.fbs
   254  	flatc -o pkg/flatrpc --warnings-as-errors --gen-object-api --filename-suffix "" --cpp --scoped-enums pkg/flatrpc/flatrpc.fbs
   255  	$(GO) fmt ./pkg/flatrpc/flatrpc.go
   256  
   257  generate_trace2syz:
   258  	(cd tools/syz-trace2syz/parser; ragel -Z -G2 -o lex.go straceLex.rl)
   259  	(cd tools/syz-trace2syz/parser; goyacc -o strace.go -p Strace -v="" strace.y)
   260  
   261  format: format_go format_cpp format_sys format_keep_sorted
   262  
   263  format_go:
   264  	$(GO) fmt ./...
   265  
   266  format_keep_sorted:
   267  	$(HOSTGO) install github.com/google/keep-sorted
   268  	find . -name "*.go" -exec bin/keep-sorted {} \;
   269  	find . -name "*.yml" -exec bin/keep-sorted {} \;
   270  
   271  format_cpp:
   272  	clang-format --style=file -i executor/*.cc executor/*.h \
   273  		executor/android/android_seccomp.h \
   274  		tools/kcovtrace/*.c tools/kcovfuzzer/*.c tools/fops_probe/*.cc \
   275  		tools/clang/*.h \
   276  		tools/clang/declextract/*.h tools/clang/declextract/*.cpp \
   277  		tools/clang/codesearch/*.h tools/clang/codesearch/*.cpp
   278  
   279  format_sys: bin/syz-fmt
   280  	bin/syz-fmt all
   281  
   282  bin/syz-fmt:
   283  	$(HOSTGO) build $(GOHOSTFLAGS) -o $@ ./tools/syz-fmt
   284  
   285  configs: kconf
   286  	bin/syz-kconf -config dashboard/config/linux/main.yml -sourcedir $(SOURCEDIR) -instance=$(INSTANCE)
   287  
   288  tidy: descriptions
   289  	clang-tidy -quiet -header-filter=executor/[^_].* -warnings-as-errors=* \
   290  		-checks=-*,misc-definitions-in-headers,bugprone-macro-parentheses,clang-analyzer-*,-clang-analyzer-security.insecureAPI*,-clang-analyzer-optin.performance*,-clang-analyzer-optin.core.EnumCastOutOfRange \
   291  		-extra-arg=-DGOOS_$(TARGETOS)=1 -extra-arg=-DGOARCH_$(TARGETARCH)=1 \
   292  		-extra-arg=-DHOSTGOOS_$(HOSTOS)=1 -extra-arg=-DGIT_REVISION=\"$(REV)\" \
   293  		--extra-arg=-I. --extra-arg=-Iexecutor/_include \
   294  		--extra-arg=-std=c++17 \
   295  		executor/*.cc
   296  
   297  lint:
   298  	CGO_ENABLED=1 $(HOSTGO) install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.6.2
   299  	CGO_ENABLED=1 $(HOSTGO) build -buildmode=plugin -o bin/syz-linter.so ./tools/syz-linter
   300  	bin/golangci-lint run ./...
   301  
   302  presubmit:
   303  	$(MAKE) presubmit_aux
   304  	$(MAKE) presubmit_build
   305  	$(MAKE) presubmit_arch_linux
   306  	$(MAKE) presubmit_arch_freebsd
   307  	$(MAKE) presubmit_arch_netbsd
   308  	$(MAKE) presubmit_arch_openbsd
   309  	$(MAKE) presubmit_arch_darwin
   310  	$(MAKE) presubmit_arch_windows
   311  	$(MAKE) presubmit_arch_executor
   312  	$(MAKE) presubmit_race
   313  	$(MAKE) presubmit_race_dashboard
   314  
   315  presubmit_aux:
   316  	$(MAKE) generate
   317  	$(MAKE) -j100 check_commits check_diff check_copyright check_language check_whitespace check_links check_html check_shebang tidy
   318  	$(GO) mod tidy
   319  
   320  presubmit_build: descriptions
   321  	# Run go build before lint for better error messages if build is broken.
   322  	# This does not check build of test files, but running go test takes too long (even for building).
   323  	$(GO) build ./...
   324  	$(MAKE) lint
   325  	SYZ_SKIP_DEV_APPSERVER_TESTS=1 $(MAKE) test
   326  
   327  presubmit_arch_linux: descriptions
   328  	HOSTOS=linux HOSTARCH=amd64 $(MAKE) host
   329  	TARGETOS=linux TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   330  	TARGETOS=linux TARGETARCH=386 TARGETVMARCH=386 $(MAKE) target
   331  	TARGETOS=linux TARGETARCH=arm64 TARGETVMARCH=arm64 $(MAKE) target
   332  	TARGETOS=linux TARGETARCH=arm TARGETVMARCH=arm $(MAKE) target
   333  	TARGETOS=linux TARGETARCH=mips64le TARGETVMARCH=mips64le $(MAKE) target
   334  	TARGETOS=linux TARGETARCH=ppc64le TARGETVMARCH=ppc64le $(MAKE) target
   335  	TARGETOS=linux TARGETARCH=riscv64 TARGETVMARCH=riscv64 $(MAKE) target
   336  	TARGETOS=linux TARGETARCH=s390x TARGETVMARCH=s390x $(MAKE) target
   337  
   338  presubmit_arch_freebsd: descriptions
   339  	HOSTOS=freebsd HOSTARCH=amd64 $(MAKE) host
   340  	TARGETOS=freebsd TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   341  	TARGETOS=freebsd TARGETARCH=386 TARGETVMARCH=386 $(MAKE) target
   342  	TARGETOS=freebsd TARGETARCH=arm64 TARGETVMARCH=arm64 $(MAKE) target
   343  	TARGETOS=freebsd TARGETARCH=riscv64 TARGETVMARCH=riscv64 $(MAKE) target
   344  
   345  presubmit_arch_netbsd: descriptions
   346  	HOSTOS=netbsd HOSTARCH=amd64 $(MAKE) host
   347  	TARGETOS=netbsd TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   348  
   349  presubmit_arch_openbsd: descriptions
   350  	HOSTOS=openbsd HOSTARCH=amd64 $(MAKE) host
   351  	TARGETOS=openbsd TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   352  
   353  presubmit_arch_darwin: descriptions
   354  	HOSTOS=darwin HOSTARCH=amd64 $(MAKE) host
   355  
   356  presubmit_arch_windows: descriptions
   357  	TARGETOS=windows TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   358  
   359  presubmit_arch_executor: descriptions
   360  	TARGETOS=linux TARGETARCH=amd64 TARGETVMARCH=amd64 SYZ_CLANG=yes $(MAKE) executor
   361  	TARGETOS=fuchsia TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) executor
   362  	TARGETOS=fuchsia TARGETARCH=arm64 TARGETVMARCH=arm64 $(MAKE) executor
   363  	TARGETOS=test TARGETARCH=64 TARGETVMARCH=64 $(MAKE) executor
   364  	TARGETOS=test TARGETARCH=64_fork TARGETVMARCH=64_fork $(MAKE) executor
   365  	TARGETOS=test TARGETARCH=32 TARGETVMARCH=32 $(MAKE) executor
   366  	TARGETOS=test TARGETARCH=32_fork TARGETVMARCH=32_fork $(MAKE) executor
   367  
   368  presubmit_dashboard: descriptions
   369  	SYZ_CLANG=yes $(GO) test -short -vet=off -coverprofile=.coverage.txt ./dashboard/app
   370  
   371  presubmit_race: descriptions
   372  	# -race requires cgo
   373  	CGO_ENABLED=1 $(GO) test -race; if test $$? -ne 2; then \
   374  	CGO_ENABLED=1 SYZ_SKIP_DEV_APPSERVER_TESTS=1 $(GO) test -race -short -vet=off -bench=.* -benchtime=.2s ./... ;\
   375  	fi
   376  
   377  presubmit_race_dashboard: descriptions
   378  	# -race requires cgo
   379  	CGO_ENABLED=1 $(GO) test -race; if test $$? -ne 2; then \
   380  	CGO_ENABLED=1 $(GO) test -race -short -vet=off -bench=.* -benchtime=.2s ./dashboard/app/... ;\
   381  	fi
   382  
   383  presubmit_old: descriptions
   384  	# Binaries we can compile in syz-old-env. 386 is broken, riscv64 is missing.
   385  	TARGETARCH=amd64 TARGETVMARCH=amd64 $(MAKE) target
   386  	TARGETARCH=arm64 TARGETVMARCH=arm64 $(MAKE) target
   387  	TARGETARCH=arm TARGETVMARCH=arm $(MAKE) target
   388  	TARGETARCH=ppc64le TARGETVMARCH=ppc64le $(MAKE) target
   389  	TARGETARCH=mips64le TARGETVMARCH=mips64le $(MAKE) target
   390  	TARGETARCH=s390x TARGETVMARCH=s390x $(MAKE) target
   391  
   392  presubmit_gvisor: host target
   393  	./tools/gvisor-smoke-test.sh
   394  
   395  test: descriptions
   396  	$(GO) test -short -coverprofile=.coverage.txt ./...
   397  
   398  clean:
   399  	rm -rf ./bin .descriptions executor/defs.h executor/syscalls.h sys/gen sys/register.go
   400  
   401  # For a tupical Ubuntu/Debian distribution.
   402  # We use "|| true" for apt-get install because packages are all different on different distros.
   403  # Also see tools/syz-env for container approach.
   404  install_prerequisites: act
   405  	uname -a
   406  	sudo apt-get update
   407  	sudo apt-get install -y -q libc6-dev-i386 linux-libc-dev \
   408  		gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi gcc-powerpc64le-linux-gnu gcc-mips64el-linux-gnuabi64 || true
   409  	sudo apt-get install -y -q g++-aarch64-linux-gnu || true
   410  	sudo apt-get install -y -q g++-powerpc64le-linux-gnu || true
   411  	sudo apt-get install -y -q g++-arm-linux-gnueabi || true
   412  	sudo apt-get install -y -q g++-mips64el-linux-gnuabi64 || true
   413  	sudo apt-get install -y -q g++-s390x-linux-gnu || true
   414  	sudo apt-get install -y -q g++-riscv64-linux-gnu || true
   415  	sudo apt-get install -y -q g++ || true
   416  	[ -z "$(shell which python)" -a -n "$(shell which python3)" ] && sudo apt-get install -y -q python-is-python3 || true
   417  	sudo apt-get install -y -q clang-tidy || true
   418  	sudo apt-get install -y -q clang clang-format ragel
   419  	sudo apt-get install -y -q flatbuffers-compiler libflatbuffers-dev
   420  	GO111MODULE=off go get -u golang.org/x/tools/cmd/goyacc
   421  
   422  check_copyright:
   423  	./tools/check-copyright.sh
   424  
   425  check_language:
   426  	./tools/check-language.sh
   427  
   428  check_whitespace:
   429  	./tools/check-whitespace.sh
   430  
   431  check_commits:
   432  	./tools/check-commits.sh
   433  
   434  check_links:
   435  	python ./tools/check_links.py $$(pwd) $$(find . -name '*.md')
   436  
   437  check_html:
   438  	./tools/check-html.sh
   439  
   440  check_syzos: executor
   441  	./tools/check-syzos.sh 2>/dev/null
   442  
   443  # Check that the diff is empty. This is meant to be executed after generating
   444  # and formatting the code to make sure that everything is committed.
   445  check_diff:
   446  	@if [ "$(shell git --no-pager diff --name-only)" != "" ]; then \
   447  		git --no-pager diff; \
   448  		git --no-pager diff --name-only | \
   449  			sed "s#.*#&:1:1: The file is not formatted/regenerated. Run 'make generate' and include it into the commit.#g"; \
   450  		false; \
   451  	fi
   452  
   453  check_shebang:
   454  	./tools/check-shebang.sh
   455  
   456  act:
   457  	curl https://raw.githubusercontent.com/nektos/act/master/install.sh | bash