xref: /freebsd/sys/tools/syscalls/main.lua (revision ec86d763d1c94648419aeb931683dcb37bf72656)
1*9ded074eSagge3#!/usr/libexec/flua
2*9ded074eSagge3--
3*9ded074eSagge3-- SPDX-License-Identifier: BSD-2-Clause
4*9ded074eSagge3--
5*9ded074eSagge3-- Copyright (c) 2024 Tyler Baxter <agge@FreeBSD.org>
6*9ded074eSagge3-- Copyright (c) 2023 Warner Losh <imp@bsdimp.com>
7*9ded074eSagge3-- Copyright (c) 2019 Kyle Evans <kevans@FreeBSD.org>
8*9ded074eSagge3--
9*9ded074eSagge3-- Thanks to Kyle Evans for his makesyscall.lua in FreeBSD which served as
10*9ded074eSagge3-- inspiration for this, and as a source of code at times.
11*9ded074eSagge3--
12*9ded074eSagge3
13*9ded074eSagge3-- When we have a path, add it to the package.path (. is already in the list).
14*9ded074eSagge3if arg[0]:match("/") then
15*9ded074eSagge3	local path = arg[0]:gsub("/[^/]+.lua$", "")
16*9ded074eSagge3	package.path = package.path .. ";" .. path .. "/?.lua"
17*9ded074eSagge3end
18*9ded074eSagge3
19*9ded074eSagge3-- Common config file management.
20*9ded074eSagge3local config = require("config")
21*9ded074eSagge3-- FreeBSDSyscall generates a table of system calls from syscalls.master.
22*9ded074eSagge3local FreeBSDSyscall = require("core.freebsd-syscall")
23*9ded074eSagge3
24*9ded074eSagge3-- Modules for each file:
25*9ded074eSagge3local init_sysent = require("scripts.init_sysent")
26*9ded074eSagge3local libsys_h = require("scripts.libsys_h")
27*9ded074eSagge3local syscall_h = require("scripts.syscall_h")
28*9ded074eSagge3local syscall_mk = require("scripts.syscall_mk")
29*9ded074eSagge3local syscalls = require("scripts.syscalls")
30*9ded074eSagge3local syscalls_map = require("scripts.syscalls_map")
31*9ded074eSagge3local sysproto_h = require("scripts.sysproto_h")
32*9ded074eSagge3local systrace_args = require("scripts.systrace_args")
33*9ded074eSagge3
34*9ded074eSagge3-- Entry:
35*9ded074eSagge3if #arg < 1 or #arg > 2 then
36*9ded074eSagge3	error("usage: " .. arg[0] .. " syscall.master")
37*9ded074eSagge3end
38*9ded074eSagge3
39*9ded074eSagge3local sysfile, configfile = arg[1], arg[2]
40*9ded074eSagge3
41*9ded074eSagge3config.merge(configfile)
42*9ded074eSagge3config.mergeCompat()
43*9ded074eSagge3
44*9ded074eSagge3local tbl = FreeBSDSyscall:new{sysfile = sysfile, config = config}
45*9ded074eSagge3
46*9ded074eSagge3-- Output files:
47*9ded074eSagge3init_sysent.file = config.syssw
48*9ded074eSagge3libsys_h.file = config.libsys_h
49*9ded074eSagge3syscall_h.file = config.syshdr
50*9ded074eSagge3syscall_mk.file = config.sysmk
51*9ded074eSagge3syscalls.file = config.sysnames
52*9ded074eSagge3syscalls_map.file = config.libsysmap
53*9ded074eSagge3sysproto_h.file = config.sysproto
54*9ded074eSagge3systrace_args.file = config.systrace
55*9ded074eSagge3
56*9ded074eSagge3init_sysent.generate(tbl, config, init_sysent.file)
57*9ded074eSagge3libsys_h.generate(tbl, config, libsys_h.file)
58*9ded074eSagge3syscall_h.generate(tbl, config, syscall_h.file)
59*9ded074eSagge3syscall_mk.generate(tbl, config, syscall_mk.file)
60*9ded074eSagge3syscalls.generate(tbl, config, syscalls.file)
61*9ded074eSagge3syscalls_map.generate(tbl, config, syscalls_map.file)
62*9ded074eSagge3sysproto_h.generate(tbl, config, sysproto_h.file)
63*9ded074eSagge3systrace_args.generate(tbl, config, systrace_args.file)
64