SubDir HAIKU_TOP src bin debug strace ; UsePrivateHeaders device ; UsePrivateHeaders drivers ; UsePrivateHeaders libroot ; UsePrivateHeaders shared ; UsePrivateHeaders net ; UsePrivateSystemHeaders ; SubDirHdrs [ FDirName $(SUBDIR) $(DOTDOT) ] ; # find headers generated by gensyscalls SubDirHdrs $(TARGET_COMMON_DEBUG_LOCATE_TARGET) ; local straceSources = strace.cpp Context.cpp TypeHandler.cpp NetworkTypes.cpp MemoryReader.cpp area.cpp fcntl.cpp ioctl.cpp network.cpp ; # Our compiler badly chokes when compiling the generated file. So will # split up the job into 20 pieces. local straceSyscallsIndices = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; local straceSyscallsSource = [ FGristFiles strace_syscalls.cpp ] ; local straceSyscallsObjects ; local i ; for i in $(straceSyscallsIndices) { local object = [ FGristFiles strace_syscalls$(i).o ] ; straceSyscallsObjects += $(object) ; # Whatever our compiler (gcc 2.95.3) thinks it is doing when compiling the # generated files, it really takes it time when optimization is enabled. # A lot with -O1, even more with -O2. Also the object sizes are amazing. # -O0 fares significantly better; at least speed-wise. I would almost think # about reverting to compiling all in one object file again. Almost... OPTIM on $(object) = -O0 ; Object $(object) : $(straceSyscallsSource) ; ObjectDefines $(object) : GET_SYSCALLS=get_syscalls$(i) SYSCALLS_CHUNK_$(i) ; } BinCommand strace : $(straceSources) : $(straceSyscallsObjects) debug_utils.a [ TargetLibstdc++ ] ; # We need to specify the dependency on the generated syscalls file explicitly. Includes $(straceSyscallsSource) : strace_syscalls.h ;