xref: /haiku/src/tools/gensyscalls/Jamfile (revision fef6144999c2fa611f59ee6ffe6dd7999501385c)
1SubDir OBOS_TOP src tools gensyscalls ;
2
3# build gensyscallinfos
4
5BuildPlatformMain gensyscallinfos : gensyscallinfos.cpp ;
6LinkSharedOSLibs gensyscallinfos : $(BUILD_LIBSTDC++) ;
7
8
9# generate the syscall infos source file
10
11SetupObjectsDir ;
12
13local syscallsHeader = [ FGristFiles syscalls.h ] ;
14SEARCH on $(syscallsHeader) = [ FDirName $(OBOS_TOP) headers private kernel ] ;
15
16local syscallsHeaderPP = [ FGristFiles syscalls.h.pp ] ;
17LOCATE on $(syscallsHeaderPP) = $(LOCATE_SOURCE) ;
18
19local syscallInfos = [ FGristFiles gensyscalls_infos.c ] ;
20LOCATE on $(syscallInfos) = $(LOCATE_SOURCE) ;
21
22rule GenSyscallInfos {
23	Depends $(1) : gensyscallinfos $(2) ;
24	GenSyscallInfos1 $(1) : gensyscallinfos $(2) ;
25}
26
27actions GenSyscallInfos1 {
28	$(2[1]) $(2[2]) $(1)
29}
30
31GenSyscallInfos $(syscallInfos) : $(syscallsHeaderPP) ;
32
33
34# build gensyscalls
35
36BuildPlatformMain gensyscalls : gensyscalls.cpp $(syscallInfos:S=$(SUFOBJ)) ;
37LinkSharedOSLibs gensyscalls : $(BUILD_LIBSTDC++) ;
38UsePrivateObjectHeaders gensyscalls.cpp : kernel ;
39UseArchObjectHeaders gensyscalls.cpp : $(OBOS_ARCH) ;
40
41
42# generate the output files
43
44# place them where there are needed
45MakeLocate <syscalls>syscalls.S.inc : [ FObjectsDir src system libroot os ] ;
46MakeLocate <syscalls>syscall_dispatcher.h : [ FObjectsDir src system kernel ] ;
47MakeLocate <syscalls>syscall_numbers.h : [ FObjectsDir src system kernel ] ;
48MakeLocate <syscalls>syscall_table.h : [ FObjectsDir src system kernel ] ;
49MakeLocate <syscalls>strace_syscalls.h : [ FObjectsDir src bin strace ] ;
50
51Depends <dir>objects/$(OBOS_TARGET)/kernel/core : <dir>objects/$(OBOS_TARGET)/kernel ;
52
53rule GenSyscallsFile {
54	Depends $(1) : gensyscalls ;
55	GenSyscallsFile1 $(1) : gensyscalls ;
56}
57
58actions GenSyscallsFile1 {
59	$(2[1]) -c $(1)
60}
61
62rule GenSyscallsDispatcher {
63	Depends $(1) : gensyscalls ;
64	GenSyscallsDispatcher1 $(1) : gensyscalls ;
65}
66
67actions GenSyscallsDispatcher1 {
68	$(2[1]) -d $(1)
69}
70
71rule GenSyscallsNumbers {
72	Depends $(1) : gensyscalls ;
73	GenSyscallsNumbers1 $(1) : gensyscalls ;
74}
75
76actions GenSyscallsNumbers1 {
77	$(2[1]) -n $(1)
78}
79
80rule GenSyscallsTable {
81	Depends $(1) : gensyscalls ;
82	GenSyscallsTable1 $(1) : gensyscalls ;
83}
84
85actions GenSyscallsTable1 {
86	$(2[1]) -t $(1)
87}
88
89rule GenSyscallsSTrace {
90	Depends $(1) : gensyscalls ;
91	GenSyscallsSTrace1 $(1) : gensyscalls ;
92}
93
94actions GenSyscallsSTrace1 {
95	$(2[1]) -s $(1)
96}
97
98GenSyscallsFile <syscalls>syscalls.S.inc ;
99GenSyscallsDispatcher <syscalls>syscall_dispatcher.h ;
100GenSyscallsNumbers <syscalls>syscall_numbers.h ;
101GenSyscallsTable <syscalls>syscall_table.h ;
102GenSyscallsSTrace <syscalls>strace_syscalls.h ;
103
104
105# preprocess the syscalls header
106
107SetupIncludes ;
108UsePrivateHeaders kernel ;
109UseArchHeaders $(OBOS_ARCH) ;
110
111rule Preprocess
112{
113	Depends $(<) : $(>) ;
114
115	HDRS on $(<) = $(SEARCH_SOURCE) $(SUBDIRHDRS) $(HDRS) ;
116	HDRRULE on $(>) = HdrRule ;
117	HDRSCAN on $(>) = $(HDRPATTERN) ;
118	HDRSEARCH on $(>) =
119		$(SEARCH_SOURCE:E) $(SUBDIRHDRS) $(HDRS) $(STDHDRS) ;
120
121	HDRGRIST on $(>) = $(HDRGRIST) ;
122
123	DEFINES on $(<) += $(DEFINES) ;
124
125	CCFLAGS on $(<) += $(CCFLAGS) $(SUBDIRCCFLAGS) $(OPTIM)
126					   [ FDefines GEN_SYSCALL_INFOS_PROCESSING ] ;
127
128	CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ;
129	CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ;
130}
131
132actions Preprocess
133{
134	$(C++) -xc++ -E "$(2)" $(CCFLAGS) $(CCDEFS) $(CCHDRS) -o "$(1)" ;
135}
136
137Preprocess $(syscallsHeaderPP) : $(syscallsHeader) ;
138
139
140# compile the syscall infos source file
141
142Object $(syscallInfos:S=$(SUFOBJ)) : $(syscallInfos) ;
143