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