# Copyright 2017 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

# There are 3 OS/arch pairs:
#  - HOSTOS/HOSTARCH: pair where syz-manager will run.
#  - TARGETOS/TARGETVMARCH: pair of the target OS under test.
#  - TARGETOS/TARGETARCH: pair of the target test process.
#
# The last 2 differ for e.g. amd64 OS and 386 test processes (compat syscall testing).
# All pairs default to the current machine. All but BUILD can be overriden.
#
# For example, to test linux/amd64 on linux/amd64, you just run:
#    make
# To test linux/arm64 from darwin/amd64 host, run:
#    make HOSTOS=darwin HOSTARCH=amd64 TARGETOS=linux TARGETARCH=arm64
# To test x86 compat syscalls, run:
#    make TARGETVMARCH=amd64 TARGETARCH=386
#
# There is one special case for extracting constants for Android
# (you don't need this unless you update system call descriptions):
#    make extract TARGETOS=android SOURCEDIR=/path/to/android/checkout

define newline


endef
ENV := $(subst \n,$(newline),$(shell \
	SOURCEDIR=$(SOURCEDIR) HOSTOS=$(HOSTOS) HOSTARCH=$(HOSTARCH) \
	TARGETOS=$(TARGETOS) TARGETARCH=$(TARGETARCH) TARGETVMARCH=$(TARGETVMARCH) \
	go run tools/syz-env/env.go))
$(info $(ENV))
$(eval $(ENV))
ifeq ("$(NCORES)", "")
$(error syz-env failed)
endif
MAKEFLAGS += " -j$(NCORES) "
export MAKEFLAGS

GO := go
HOSTGO := go
# By default, build all Go binaries as static. We don't need cgo and it is
# known to cause problems at least on Android emulator.
export CGO_ENABLED=0
TARGETGOOS := $(TARGETOS)
TARGETGOARCH := $(TARGETVMARCH)

ifeq ("$(TARGETOS)", "fuchsia")
	# SOURCEDIR should point to fuchsia checkout.
	GO = "$(SOURCEDIR)/scripts/devshell/go"
endif

GITREV=$(shell git rev-parse HEAD)
ifeq ("$(shell git diff --shortstat)", "")
	REV=$(GITREV)
else
	REV=$(GITREV)+
endif

# Don't generate symbol table and DWARF debug info.
# Reduces build time and binary sizes considerably.
# That's only needed if you use gdb or nm.
# If you need that, build manually without these flags.
GOFLAGS := "-ldflags=-s -w -X github.com/google/syzkaller/sys.GitRevision=$(REV)"
GOHOSTFLAGS := $(GOFLAGS)
GOTARGETFLAGS := $(GOFLAGS)
ifneq ("$(GOTAGS)", "")
	GOHOSTFLAGS += "-tags=$(GOTAGS)"
endif
GOTARGETFLAGS += "-tags=syz_target syz_os_$(TARGETOS) syz_arch_$(TARGETVMARCH) $(GOTAGS)"

ifeq ("$(TARGETOS)", "test")
	TARGETGOOS := $(HOSTOS)
	TARGETGOARCH := $(HOSTARCH)
endif

ifeq ("$(TARGETOS)", "akaros")
	TARGETGOOS := $(HOSTOS)
	TARGETGOARCH := $(HOSTARCH)
endif

.PHONY: all host target \
	manager runtest fuzzer executor \
	ci hub \
	execprog mutate prog2c stress repro upgrade db \
	bin/syz-sysgen bin/syz-extract bin/syz-fmt \
	extract generate generate_go generate_sys \
	format format_go format_cpp format_sys \
	tidy test test_race check_links check_diff \
	arch arch_darwin_amd64_host arch_linux_amd64_host \
	arch_freebsd_amd64_host arch_netbsd_amd64_host \
	arch_linux_amd64_target arch_linux_386_target \
	arch_linux_arm64_target arch_linux_arm_target arch_linux_ppc64le_target \
	arch_freebsd_amd64_target arch_netbsd_amd64_target arch_windows_amd64_target \
	arch_test presubmit presubmit_parallel clean

all: host target

host:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) install ./syz-manager
	$(MAKE) manager runtest repro mutate prog2c db upgrade

target:
	GOOS=$(TARGETGOOS) GOARCH=$(TARGETGOARCH) $(GO) install ./syz-fuzzer
	$(MAKE) fuzzer execprog stress executor

# executor uses stacks of limited size, so no jumbo frames.
executor:
	mkdir -p ./bin/$(TARGETOS)_$(TARGETARCH)
	$(CC) -o ./bin/$(TARGETOS)_$(TARGETARCH)/syz-executor$(EXE) executor/executor.cc \
		-pthread -Wall -Wframe-larger-than=8192 -Wparentheses -Werror -O2 $(ADDCFLAGS) $(CFLAGS) \
		-DGOOS_$(TARGETOS)=1 -DGOARCH_$(TARGETARCH)=1  -DGIT_REVISION=\"$(REV)\"

manager:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-manager github.com/google/syzkaller/syz-manager

runtest:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-runtest github.com/google/syzkaller/tools/syz-runtest

fuzzer:
	GOOS=$(TARGETGOOS) GOARCH=$(TARGETGOARCH) $(GO) build $(GOTARGETFLAGS) -o ./bin/$(TARGETOS)_$(TARGETVMARCH)/syz-fuzzer$(EXE) github.com/google/syzkaller/syz-fuzzer

execprog:
	GOOS=$(TARGETGOOS) GOARCH=$(TARGETGOARCH) $(GO) build $(GOTARGETFLAGS) -o ./bin/$(TARGETOS)_$(TARGETVMARCH)/syz-execprog$(EXE) github.com/google/syzkaller/tools/syz-execprog

ci:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-ci github.com/google/syzkaller/syz-ci

hub:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-hub github.com/google/syzkaller/syz-hub

repro:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-repro github.com/google/syzkaller/tools/syz-repro

mutate:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-mutate github.com/google/syzkaller/tools/syz-mutate

prog2c:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-prog2c github.com/google/syzkaller/tools/syz-prog2c

stress:
	GOOS=$(TARGETGOOS) GOARCH=$(TARGETGOARCH) $(GO) build $(GOTARGETFLAGS) -o ./bin/$(TARGETOS)_$(TARGETVMARCH)/syz-stress$(EXE) github.com/google/syzkaller/tools/syz-stress

db:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-db github.com/google/syzkaller/tools/syz-db

upgrade:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o ./bin/syz-upgrade github.com/google/syzkaller/tools/syz-upgrade

extract: bin/syz-extract
	bin/syz-extract -build -os=$(TARGETOS) -sourcedir=$(SOURCEDIR) $(FILES)
bin/syz-extract:
	GOOS=$(HOSTOS) GOARCH=$(HOSTARCH) $(HOSTGO) build $(GOHOSTFLAGS) -o $@ ./sys/syz-extract

generate: generate_go generate_sys
	$(MAKE) format

generate_go: bin/syz-sysgen format_cpp
	$(GO) generate ./pkg/csource ./executor ./pkg/ifuzz ./pkg/build

generate_sys: bin/syz-sysgen
	bin/syz-sysgen

bin/syz-sysgen:
	$(GO) build $(GOHOSTFLAGS) -o $@ ./sys/syz-sysgen

format: format_go format_cpp format_sys

format_go:
	$(GO) fmt ./...

format_cpp:
	clang-format --style=file -i executor/*.cc executor/*.h tools/kcovtrace/*.c

format_sys: bin/syz-fmt
	bin/syz-fmt sys/test
	bin/syz-fmt sys/akaros
	bin/syz-fmt sys/freebsd
	bin/syz-fmt sys/netbsd
	bin/syz-fmt sys/linux
	bin/syz-fmt sys/fuchsia
	bin/syz-fmt sys/windows

bin/syz-fmt:
	$(GO) build $(GOHOSTFLAGS) -o $@ ./tools/syz-fmt

tidy:
	# A single check is enabled for now. But it's always fixable and proved to be useful.
	clang-tidy -quiet -header-filter=.* -checks=-*,misc-definitions-in-headers -warnings-as-errors=* executor/*.cc
	# Just check for compiler warnings.
	$(CC) executor/test_executor.cc -c -o /dev/null -Wparentheses -Wno-unused -Wall

gometalinter:
	env CGO_ENABLED=1 gometalinter.v2 ./...

arch: arch_darwin_amd64_host arch_linux_amd64_host arch_freebsd_amd64_host arch_netbsd_amd64_host \
	arch_linux_amd64_target arch_linux_386_target \
	arch_linux_arm64_target arch_linux_arm_target arch_linux_ppc64le_target \
	arch_freebsd_amd64_target arch_netbsd_amd64_target arch_windows_amd64_target \
	arch_test

arch_darwin_amd64_host:
	env HOSTOS=darwin HOSTARCH=amd64 $(MAKE) host

arch_linux_amd64_host:
	env HOSTOS=linux HOSTARCH=amd64 $(MAKE) host

arch_linux_amd64_target:
	env TARGETOS=linux TARGETARCH=amd64 $(MAKE) target

arch_linux_386_target:
	# executor build on 386 on travis fails with:
	# fatal error: asm/errno.h: No such file or directory
	# We install a bunch of additional packages in .travis.yml,
	# but I can't guess the right one.
	env TARGETOS=linux TARGETARCH=amd64 TARGETVMARCH=386 $(MAKE) target

arch_linux_arm64_target:
	env TARGETOS=linux TARGETARCH=arm64 $(MAKE) target

arch_linux_arm_target:
	# executor build on arm fails with:
	# Error: alignment too large: 15 assumed
	env TARGETOS=linux TARGETARCH=arm64 TARGETVMARCH=arm $(MAKE) target

arch_linux_ppc64le_target:
	env TARGETOS=linux TARGETARCH=ppc64le $(MAKE) target

arch_freebsd_amd64_host:
	env HOSTOS=freebsd HOSTARCH=amd64 $(MAKE) host

arch_freebsd_amd64_target:
	env TARGETOS=freebsd TARGETARCH=amd64 $(MAKE) target

arch_netbsd_amd64_host:
	env HOSTOS=netbsd HOSTARCH=amd64 $(MAKE) host

arch_netbsd_amd64_target:
	env TARGETOS=netbsd TARGETARCH=amd64 $(MAKE) target

arch_windows_amd64_target:
	env GOOG=windows GOARCH=amd64 $(GO) install ./syz-fuzzer
	env TARGETOS=windows TARGETARCH=amd64 $(MAKE) fuzzer execprog stress

arch_test:
	env TARGETOS=test TARGETARCH=64 $(MAKE) executor
	env TARGETOS=test TARGETARCH=64_fork $(MAKE) executor
	# 32-bit build fails on travis with:
	# /usr/include/c++/4.8/utility:68:28: fatal error: bits/c++config.h: No such file or directory
	# #include <bits/c++config.h>
	# env TARGETOS=test TARGETARCH=32_shmem $(MAKE) executor
	# env TARGETOS=test TARGETARCH=32_fork_shmem $(MAKE) executor

presubmit:
	$(MAKE) generate
	$(MAKE) check_diff
	$(GO) install ./...
	$(MAKE) presubmit_parallel
	$(MAKE) gometalinter
	echo LGTM

presubmit_parallel: test test_race arch check_links

test:
	# Executor tests use cgo.
	env CGO_ENABLED=1 $(GO) test -short ./...

test_race:
	env CGO_ENABLED=1 $(GO) test -short -race -bench=.* -benchtime=.2s ./...

clean:
	rm -rf ./bin/

# For a tupical Ubuntu/Debian distribution.
# We use "|| true" for apt-get install because packages are all different on different distros,
# and we want to install at least gometalinter on Travis CI.
install_prerequisites:
	uname -a
	sudo apt-get update
	sudo apt-get install -y -q libc6-dev-i386 linux-libc-dev \
		gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-powerpc64le-linux-gnu || true
	sudo apt-get install -y -q g++-aarch64-linux-gnu || true
	sudo apt-get install -y -q g++-powerpc64le-linux-gnu || true
	sudo apt-get install -y -q g++-arm-linux-gnueabihf || true
	go get -u gopkg.in/alecthomas/gometalinter.v2
	gometalinter.v2 --install

check_links:
	python ./tools/check_links.py $$(pwd) $$(ls ./*.md; find ./docs/ -name '*.md')

# Check that the diff is empty. This is meant to be executed after generating
# and formatting the code to make sure that everything is committed.
check_diff:
	DIFF="$(shell git diff --name-only)"; test -z "$$DIFF"
