1# Copyright 2017 The Fuchsia Authors
2#
3# Use of this source code is governed by a MIT-style
4# license that can be found in the LICENSE file or at
5# https://opensource.org/licenses/MIT
6
7SYSCALLS_SRC := system/public/zircon/syscalls.abigen
8
9GEN_DIR := $(BUILDDIR)/gen
10
11STAMPY := $(GEN_DIR)/abigen-stamp
12# This gets STAMPY built (and generation complete) early in the build.
13TARGET_MODDEPS += $(STAMPY)
14
15AG_ZIRCON := $(GENERATED_INCLUDES)/zircon
16
17AG_KERNEL_HEADER := $(AG_ZIRCON)/syscall-definitions.h
18AG_KERNEL_TRACE := $(AG_ZIRCON)/syscall-ktrace-info.inc
19AG_KERNEL_CATEGORY := $(AG_ZIRCON)/syscall-category.inc
20AG_KERNEL_WRAPPERS := $(AG_ZIRCON)/syscall-kernel-wrappers.inc
21AG_KERNEL_BRANCHES := $(AG_ZIRCON)/syscall-kernel-branches.S
22
23AG_ULIB_VDSO_HEADER := $(AG_ZIRCON)/syscall-vdso-definitions.h
24AG_ULIB_VDSO_WRAPPERS := $(AG_ZIRCON)/syscall-vdso-wrappers.inc
25AG_ULIB_SYSCALL_NUMBER := $(AG_ZIRCON)/zx-syscall-numbers.h
26AG_ULIB_ARM := $(AG_ZIRCON)/syscalls-arm64.S
27AG_ULIB_X86 := $(AG_ZIRCON)/syscalls-x86-64.S
28
29AG_SYSCALLS := $(AG_ZIRCON)/syscalls
30AG_PUBLIC_HEADER := $(AG_SYSCALLS)/definitions.h
31AG_PUBLIC_RUST := $(AG_SYSCALLS)/definitions.rs
32
33AG_SYSROOT_ZIRCON := $(BUILDSYSROOT)/include/zircon
34AG_SYSROOT_HEADER := $(AG_SYSROOT_ZIRCON)/syscalls/definitions.h
35AG_SYSROOT_RUST := $(AG_SYSROOT_ZIRCON)/syscalls/definitions.rs
36
37# STAMPY ultimately generates most of the files and paths here.
38$(STAMPY): $(ABIGEN) $(SYSCALLS_SRC)
39	$(call BUILDECHO,generating syscall files from $(SYSCALLS_SRC))
40	$(NOECHO) mkdir -p $(AG_SYSCALLS)
41	$(NOECHO) $(ABIGEN) \
42		-trace $(AG_KERNEL_TRACE) \
43		-category $(AG_KERNEL_CATEGORY) \
44		-kernel-header $(AG_KERNEL_HEADER) \
45		-kernel-wrappers $(AG_KERNEL_WRAPPERS) \
46		-kernel-branch $(AG_KERNEL_BRANCHES) \
47		-arm-asm $(AG_ULIB_ARM) \
48		-x86-asm $(AG_ULIB_X86) \
49		-vdso-header $(AG_ULIB_VDSO_HEADER) \
50		-vdso-wrappers $(AG_ULIB_VDSO_WRAPPERS) \
51		-numbers $(AG_ULIB_SYSCALL_NUMBER) \
52		-user-header $(AG_PUBLIC_HEADER) \
53		-rust $(AG_PUBLIC_RUST) \
54		$(SYSCALLS_SRC)
55	$(NOECHO) touch $(STAMPY)
56
57run-abigen $(AG_PUBLIC_HEADER) $(AG_PUBLIC_RUST) $(AG_SYSROOT_HEADER) $(AG_SYSROOT_RUST): $(STAMPY)
58
59GENERATED += $(AG_KERNEL_HEADER) $(AG_KERNEL_TRACE) \
60	$(AG_KERNEL_CATEGORY) $(AG_ULIB_X86) $(AG_ULIB_ARM) \
61	$(AG_KERNEL_WRAPPERS) $(AG_KERNEL_BRANCHES) \
62	$(AG_ULIB_SYSCALL_NUMBERS) \
63	$(AG_ULIB_VDSO_HEADER) $(AG_ULIB_VDSO_WRAPPERS) \
64	$(AG_PUBLIC_HEADER) $(AG_SYSROOT_HEADER) \
65	$(AG_PUBLIC_RUST) $(AG_SYSROOT_RUST) \
66	$(STAMPY)
67
68$(call copy-dst-src,$(AG_SYSROOT_HEADER),$(AG_PUBLIC_HEADER))
69$(call copy-dst-src,$(AG_SYSROOT_RUST),$(AG_PUBLIC_RUST))
70
71# needed to create c.pkg (see: module-userlib.mk)
72ABIGEN_BUILDDIR := $(GENERATED_INCLUDES)
73ABIGEN_PUBLIC_HEADERS := $(AG_PUBLIC_HEADER) $(AG_PUBLIC_RUST)
74
75SYSROOT_DEPS += $(AG_SYSROOT_HEADER) $(AG_SYSROOT_RUST)
76