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