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