[K42-discussion] Alternative K42 Build System

Amos Waterland apw at us.ibm.com
Wed Feb 1 23:42:12 EST 2006


The K42 development branch has a fast non-recursive build system.  Some
people have expressed interest in using it for mainline K42 development,
so I am attaching it here.  Just drop it in kitchsrc, do a full build
with the existing machinery, and then use `make -f Makefile.new' to do
rebuilds.

I wrote it mostly because I could not afford rebuild times of 2 minutes
or more just from making a simple change to the boot logic, so it is
mainly good at rebuilds right now.  I haven't tackled header file
generation, but I believe that is the only hard thing stopping this from
being able to build K42 from scratch.  Easy things still needed are AIX
support, proper -MD dependency generation etc.

The machinery is highly parallized, so distcc is able to help a lot.
More importantly though is the final link time; the new machinery uses
parallel incremental linking to reduce the time to do a rebuild:

 $ time make
 [massive spew]

 real    1m20.683s
 user    1m8.897s
 sys     0m9.912s

 $ time make -f Makefile.new
 CXX      powerpc/partDeb/os/kernel/init/kinit.o
 LD       powerpc/partDeb/os/kinitobjs.o
 LD       powerpc/partDeb/os/boot_image.dbg
 STRIP    powerpc/partDeb/os/boot_image
 OBJCOPY  powerpc/partDeb/os/mambo_elf.o
 LD       powerpc/partDeb/os/mambo_boot_image
 STRIP    powerpc/partDeb/os/mamboboot.tok
 ADDNOTE  powerpc/partDeb/os/mamboboot.tok
 GZIP     powerpc/partDeb/os/boot_image.gz
 OBJCOPY  powerpc/partDeb/os/chrp_elf.o
 LD       powerpc/partDeb/os/chrp_boot_image
 STRIP    powerpc/partDeb/os/chrpboot.tok
 ADDNOTE  powerpc/partDeb/os/chrpboot.tok

 real    0m34.589s
 user    0m32.959s
 sys     0m1.314s

To see all the commands echoed, instead of the above pretty-printing,
supply V=1.  If you want to know why something is being rebuilt, supply
V=2, and you will see the reason in brackets:

  CXX      powerpc/partDeb/os/kernel/init/kinit.o [kinit.C]
  LD       powerpc/partDeb/os/kinitobjs.o [kinit.o]

If you know the Linux 2.6 build system interface, this should be easy to
use.  Please send me patches to fill in the earlier parts of the build,
eventually I will propose that it become the default.  Until then, use
it if its useful to you, ignore it if it's not.

For the Ozlabs site, put this in a file named `.config' in kitchsrc:
 U=/home/k42
 BUILD=x86_64

--- Begin Makefile.new ---

# ##########################-*-makefile-*- ###################################
# Recursive make considered harmful.
# ############################################################################

# Basic build configuration.
D = part
OS = $(shell uname -s)
BUILD = i686
ARCH = powerpc

# Build our source and output paths from above.
O = ..
H = .
S = $(O)/$(ARCH)/$(D)Deb
B = $(S)/os/kexec
U = /u/kitchawa/k42-packages
L = $(U)/src-cvs/linux-029

# 64-bit cross-compile tools.
CROSS_COMPILE = powerpc64-linux-
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
AR = $(CROSS_COMPILE)ar
LD = $(CROSS_COMPILE)ld
STRIP = $(CROSS_COMPILE)strip
NM = $(CROSS_COMPILE)nm
AR = $(CROSS_COMPILE)ar

# 32-bit cross-compile tools.
CROSS32_COMPILE = powerpc-linux-
CC32 = $(CROSS32_COMPILE)gcc
LD32 = $(CROSS32_COMPILE)ld
OBJCOPY32 = $(CROSS32_COMPILE)objcopy
STRIP32 = $(CROSS32_COMPILE)strip

# Build machine native-compile tools.
HOSTCC = gcc
HOSTCFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
MKDIR = mkdir
GZIP = gzip

# If V=1, we echo the commands as normal, if V=2, show out-of-date depends.
V = 0
ifeq "$(V)" "0"
.SILENT:
status = printf " %-7s %s\n" $(1) "$(subst $(O)/,,$(2))"
else
ifeq "$(V)" "2"
.SILENT:
status = printf " %-7s %s [%s]\n" $(1) \
           "$(subst $(O)/,,$(2))" $(notdir $(firstword $?))
endif
endif

# Our non-file targets.
.PHONY: all dirs config clean

# Pull in the configuration if it exists.
-include .config

# Default target is just the directory skeleton and our bootable kernel.
ifeq "$(NEW)" "1"
all: dirs $(S)/os/k42-vmlinux
else
all: dirs $(S)/os/mamboboot.tok $(S)/os/chrpboot.tok
endif

# Just print some debug information and exit.
config:
	@echo build $(D)-debug K42 on $(BUILD) $(OS) for $(ARCH) from $(OBJS)

# Delete everything we built.
clean:
	$(call status, RM, $(wildcard $(OBJS)))
	$(RM) $(wildcard $(OBJS))


# The old-style kernel we boot on simulator
OBJS += $(S)/os/mamboboot.tok
$(S)/os/mamboboot.tok: $(S)/os/mambo_boot_image
	$(call status, STRIP, $@)
	$(STRIP32) -g $< -o $@
	$(call status, ADDNOTE, $@)
	$(O)/install/tools/$(OS)_$(BUILD)/$(ARCH)/addnote $@

OBJS += $(S)/os/mambo_boot_image
$(S)/os/mambo_boot_image: $(H)/os/arch/$(ARCH)/chrp_boot_elf.scp \
                          $(S)/os/mambo_elf.o
	$(call status, LD, $@)
	$(LD32) -Ttext 0x700000 -static -e 0x700000		\
                -defsym kernVirtStart=0xC000000002000000	\
                --script=$< $(filter-out $<, $^) -o $@

OBJS += $(S)/os/mambo_elf.o
$(S)/os/mambo_elf.o: $(S)/os/boot_image $(S)/os/boot/boot.o
	$(call status, OBJCOPY, $@)
	$(OBJCOPY32) --add-section=.k42_boot_image=$(S)/os/boot_image	     \
                --set-section-flags=.k42_boot_image=contents,alloc,load,data \
                $(S)/os/boot/boot.o $@


# The old-style kernel we boot on hardware.
OBJS += $(S)/os/chrpboot.tok
$(S)/os/chrpboot.tok: $(S)/os/chrp_boot_image
	$(call status, STRIP, $@)
	$(STRIP32) -g $< -o $@
	$(call status, ADDNOTE, $@)
	$(O)/install/tools/$(OS)_$(BUILD)/$(ARCH)/addnote $@

OBJS += $(S)/os/chrp_boot_image
$(S)/os/chrp_boot_image:  $(H)/os/arch/$(ARCH)/chrp_boot_elf.scp \
                          $(S)/os/chrp_elf.o
	$(call status, LD, $@)
	$(LD32) -Ttext 0x700000 -static -e 0x700000		\
                -defsym kernVirtStart=0xC000000002000000	\
                --script=$< $(filter-out $<, $^) -o $@

OBJS += $(S)/os/chrp_elf.o
$(S)/os/chrp_elf.o: $(S)/os/boot_image.gz $(S)/os/boot/boot.o
	$(call status, OBJCOPY, $@)
	$(OBJCOPY32) --add-section=.k42_boot_image=$(S)/os/boot_image.gz     \
                --set-section-flags=.k42_boot_image=contents,alloc,load,data \
                $(S)/os/boot/boot.o $@

OBJS += $(S)/os/boot_image.gz
$(S)/os/boot_image.gz: $(S)/os/boot_image
	$(call status, GZIP, $@)
	gzip -9 -c $< > $@

OBJS += $(S)/os/boot_image
$(S)/os/boot_image: $(S)/os/boot_image.dbg
	$(call status, STRIP, $@)
	$(STRIP) -g $< -o $@

# The old-style 64-bit K42 kernel, with debug symbols.
OBJS += $(S)/os/boot_image.dbg
$(S)/os/boot_image.dbg: $(H)/os/arch/powerpc/boot_image.scp		\
			$(S)/os/kexceptobjs.o				\
                        $(L)/core.k42lib.o				\
			$(S)/os/ktraceobjs.o				\
			$(S)/os/ksysobjs.o				\
			$(S)/os/kstubobjs.o				\
			$(S)/os/kbilgeobjs.o				\
			$(S)/os/kinitobjs.o				\
			$(S)/os/kmemobjs.o				\
			$(S)/os/kprocobjs.o				\
			$(S)/os/klinobjs.o				\
                        $(S)/os/servers/bootServers.o			\
                        $(O)/install/lib/powerpc/$(D)Deb/libsrv.a	\
		        $(O)/install/lib/powerpc/$(D)Deb/liblk26.a	\
                        $(O)/install/lib/powerpc/$(D)Deb/libk.a
	$(call status, LD, $@)
	$(LD) -defsym kernVirtStart=0xC000000002000000 \
	      -Ttext 0xC000000002000000 \
	      -T $< \
	      -Bstatic -e start -Map $(S)/os/boot_image.map \
	      $(filter-out $<, $^) -o $@


# This is the 32-bit boot program that leads off both of the above kernels.
OBJS += $(S)/os/boot/boot.o
bobjs = $(S)/os/boot/first.o $(S)/os/boot/main.o			\
        $(S)/os/boot/cl_in_services.o $(S)/os/boot/prom.o		\
        $(S)/os/boot/lmb.o $(S)/os/boot/misc.o $(S)/os/boot/printf.o	\
        $(S)/os/boot/zlib.o $(S)/os/boot/asm_utils.o
$(S)/os/boot/boot.o: $(bobjs)
	$(call status, LD, $@)
	$(CC32) -Wl,-r -nostdlib $^ \
                $(shell $(CC32) -print-libgcc-file-name) -o $@


# The new-style kernel, wrapped by a 32-bit boot program.
OBJS  = $(S)/os/k42-zImage
zobjs = $(S)/os/boot2/crt0.o $(S)/os/boot2/string.o $(S)/os/boot2/prom.o \
	$(S)/os/boot2/main.o $(S)/os/boot2/zlib.o $(S)/os/boot2/div64.o \
	$(S)/os/boot2/imagesize.o
OBJS += $(zobjs)
$(S)/os/k42-zImage: $(S)/os/boot/kernel-vmlinux.strip.o	\
		    $(L)/arch/ppc64/boot/zImage.lds	\
		    $(zobjs)				\
		    $(S)/os/boot2/addnote
	$(call status, LD, $@)
	$(LD32) -Ttext 0x00400000 -e _start \
                -T $(L)/arch/ppc64/boot/zImage.lds \
                $(zobjs) $(S)/os/boot/kernel-vmlinux.strip.o -o $@
	$(call status, ADDNOTE, $@)
	$(S)/os/boot2/addnote $@

# A dummy object that we wrap the K42 kernel in.
sflags = .kernel:vmlinux.strip=contents,alloc,load,readonly,data
kimage = $(S)/os/k42-vmlinux
kimagez = $(kimage).gz
$(S)/os/boot/kernel-vmlinux.strip.o: $(S)/os/boot/kernel-vmlinux.strip.c \
				     $(kimagez)
	$(call status, CC, $@)
	$(CC32) $(HOSTCFLAGS) -fno-builtin -c $< -o $@
	$(call status, OBJCOPY, $@)
	$(OBJCOPY32) $@ --add-section=.kernel:vmlinux.strip=$(kimagez) \
		 	--set-section-flags=$(sflags)

OBJS += $(S)/os/boot/kernel-vmlinux.strip.c
$(S)/os/boot/kernel-vmlinux.strip.c:
	$(call status, TOUCH, $@)
	touch $@

OBJS += $(S)/os/k42-vmlinux.gz
$(S)/os/k42-vmlinux.gz: $(S)/os/k42-vmlinux.strip
	$(call status, GZIP, $@)
	$(GZIP) -f -9 < $^ > $@

OBJS += $(S)/os/k42-vmlinux.strip
$(S)/os/k42-vmlinux.strip: $(S)/os/k42-vmlinux
	$(call status, STRIP, $@)
	$(STRIP) -s $< -o $@

# A tool that adds a note to the final 32-bit kernel.
OBJS += $(S)/os/boot2/addnote
$(S)/os/boot2/addnote: $(L)/arch/ppc64/boot/addnote.c
	$(call status, HOSTCC, $@)
	$(HOSTCC) -Wp,-MD,$(S)/os/boot2/.$(notdir $@).d $(HOSTCFLAGS) $< -o $@

# A small object that will tell Linux what our kernel size is.
$(S)/os/boot2/imagesize.o: $(S)/os/boot2/imagesize.c
	$(call status, CC, $@)
	$(CC32) -Wp,-MD,$(S)/os/boot2/.$(notdir $@).d $(HOSTCFLAGS) \
                -I$(L)/include -fno-builtin -c $< -o $@

# Sanity check: kimage=vmlinux kimagez=arch/ppc64/boot/kernel-vmlinux.strip.gz
OBJS += $(S)/os/boot2/imagesize.c
$(S)/os/boot2/imagesize.c: $(kimage)
	$(call status, LS, $@)
	ls -l $< | awk \
          '{printf "unsigned long vmlinux_filesize = %d;\n", $$5}' > $@
	$(call status, NM, $@)
	$(NM) -n $< | tail -n 1 | awk \
          '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' \
            >> $@

# These are the rules for the new 32-bit Linux zImage boot program.
$(S)/os/boot2/%.o: $(L)/arch/ppc64/boot/%.S
	$(call status, AS, $@)
	$(CC32) -Wp,-MD,$(S)/os/boot2/.$(notdir $@).d \
		-D__ASSEMBLY__ $(HOSTCFLAGS) \
                -I$(L)/include -fno-builtin -traditional -c $< -o $@

$(S)/os/boot2/%.o: $(L)/arch/ppc64/boot/%.c
	$(call status, CC, $@)
	$(CC32) -Wp,-MD,$(S)/os/boot2/.$(notdir $@).d $(HOSTCFLAGS) \
                -I$(L)/include -fno-builtin -c $< -o $@

# The new-style 64-bit K42 kernel proper, with debug symbols.
OBJS += $(S)/os/k42-vmlinux
$(S)/os/k42-vmlinux: $(B)/vmlinux.lds				\
		     $(B)/head.o				\
		     $(B)/entry.o				\
		     $(B)/prom_init.o				\
                     $(B)/pSeries_setup.o			\
                     $(B)/maple_time.o				\
                     $(B)/maple_pci.o				\
                     $(B)/rtas_pci.o				\
                     $(B)/setup.o				\
                     $(B)/lmb.o					\
                     $(B)/prom.o				\
                     $(B)/hash_utils.o				\
                     $(B)/u3_iommu.o				\
                     $(B)/hash_low.o				\
                     $(B)/hash_native.o				\
                     $(B)/stab.o				\
                     $(B)/slb.o					\
                     $(B)/pacaData.o				\
                     $(B)/slb_low.o				\
                     $(B)/udbg.o				\
		     $(B)/unimplemented.o			\
		     $(S)/os/kexceptobjs.o			\
		     $(L)/core.k42lib.o				\
		     $(L)/util.k42lib.o				\
		     $(S)/os/ktraceobjs.o			\
		     $(S)/os/ksysobjs.o				\
		     $(S)/os/kstubobjs.o			\
		     $(S)/os/kbilgeobjs.o			\
		     $(S)/os/kinitobjs.o			\
		     $(S)/os/kmemobjs.o				\
		     $(S)/os/kprocobjs.o			\
		     $(S)/os/klinobjs.o				\
		     $(S)/os/servers/bootServers.o		\
		     $(O)/install/lib/powerpc/$(D)Deb/libsrv.a	\
		     $(O)/install/lib/powerpc/$(D)Deb/liblk26.a	\
		     $(O)/install/lib/powerpc/$(D)Deb/libk.a
	$(call status, LD, $@)
	$(LD) -m elf64ppc -T $< \
	      -Bstatic -e 0xc000000000000000 -Ttext 0xc000000000000000 \
	      -defsym kernVirtStart=0xC000000000000000 \
	      $(filter-out $<, $^) -o $@

OBJS += $(B)/vmlinux.lds
$(B)/vmlinux.lds: $(L)/arch/ppc64/kernel/vmlinux.lds.S
	$(call status, CC, $@)
	$(CC) -m64 -E -nostdinc -D__KERNEL__ -I$(L)/include -P -C \
	      -isystem $(shell $(CC) -print-file-name=include) \
	      -Uppc64 -D__ASSEMBLY__ $< -o $@

OBJS += $(B)/head.o $(B)/entry.o $(B)/pSeries_setup.o $(B)/rtas_pci.o \
        $(B)/setup.o $(B)/lmb.o $(B)/prom.o $(B)/mpic.o $(B)/u3_iommu.o \
	$(B)/udbg.o $(B)/maple_time.o $(B)/maple_pci.o
$(B)/%.o: $(L)/arch/ppc64/kernel/%.S
	$(call status, CC, $@)
	$(CC) -m64 -nostdinc  -D__KERNEL__ -I$(L)/include \
	      -gdwarf2 -D__ASSEMBLY__ \
	      -isystem $(shell $(CC) -print-file-name=include) -c $< -o $@

OBJS += $(B)/prom_init.o
$(B)/%.o: $(L)/arch/ppc64/kernel/%.c
	$(call status, CC, $@)
	$(CC) -m64 -nostdinc \
	      -isystem $(shell $(CC) -print-file-name=include) \
	      -D__KERNEL__ -I$(L)/include -Wall -Wstrict-prototypes \
	      -Wno-trigraphs -fno-strict-aliasing -fno-common \
	      -ffreestanding -fomit-frame-pointer -g -msoft-float -pipe \
	      -mminimal-toc -mtraceback=none -mcall-aixdesc \
	      -Wdeclaration-after-statement -mno-minimal-toc -c $< -o $@

OBJS += $(B)/hash_utils.o $(B)/hash_native.o $(B)/stab.o $(B)/slb.o \
        $(B)/pacaData.o
$(B)/%.o: $(L)/arch/ppc64/mm/%.c
	$(call status, CC, $@)
	$(CC) -m64 -nostdinc \
	      -isystem $(shell $(CC) -print-file-name=include) \
	      -D__KERNEL__ -I$(L)/include -Wall -Wstrict-prototypes \
	      -Wno-trigraphs -fno-strict-aliasing -fno-common \
	      -ffreestanding -fomit-frame-pointer -g -msoft-float -pipe \
	      -mminimal-toc -mtraceback=none -mcall-aixdesc \
	      -Wdeclaration-after-statement -mno-minimal-toc -c $< -o $@

OBJS += $(B)/hash_low.o $(B)/slb_low.o
$(B)/%.o: $(L)/arch/ppc64/mm/%.S
	$(call status, CC, $@)
	$(CC) -m64 -nostdinc  -D__KERNEL__ -I$(L)/include \
	      -gdwarf2 -D__ASSEMBLY__ \
	      -isystem $(shell $(CC) -print-file-name=include) -c $< -o $@

OBJS += $(B)/unimplemented.o
$(B)/unimplemented.o: $(H)/os/boot/arch/powerpc/unimplemented.c
	$(call status, CC, $@)
	$(CC) -g -nostdinc -Wall -Wstrict-prototypes \
	      -Wno-trigraphs -fno-strict-aliasing -fno-common \
	      -ffreestanding -fomit-frame-pointer -c $< -o $@


# Rule for how to incrementally link our kernel objects.
$(S)/os/k%objs.o:
	$(call status, LD, $@)
	$(LD) -r $^ -o $@

OBJS += $(S)/os/kinitobjs.o
kinitobjs = StubAsyncTester.o StubServerState.o StubInitServer.o	\
            XAsyncTester.o locore.o MPinit.o KernelInit.o		\
            AsyncTester.o SysFacts.o idt.o memoryMapKern.o kinit.o	\
            initKernelMappings.o KernelExit.o XServerState.o		\
            XInitServer.o ServerState.o InitServer.o
$(S)/os/kinitobjs.o: $(addprefix $(S)/os/kernel/init/, $(kinitobjs))

OBJS += $(S)/os/kexceptobjs.o
kexceptobjs = StubCPUContainer.o lolita.o ExceptionLocalAsm.o		\
              DispatchQueue.o IPCTargetTable.o CPUDomainAnnex.o		\
              ProcessAnnex.o ProcessAnnexArch.o ExceptionLocal.o	\
              ExceptionExp.o MPMsgMgrException.o HWInterrupt.o		\
              KernelTimer.o HWIOCommon.o KernelInfoMgr.o		\
              IPCRetryManager.o FaultNotificationMgr.o XCPUContainer.o
$(S)/os/kexceptobjs.o: $(addprefix $(S)/os/kernel/exception/, $(kexceptobjs))

OBJS += $(S)/os/kmemobjs.o
kmemobjs = StubRegionDefault.o StubFR.o StubRegionPerProcessor.o	\
           StubRegionRedZone.o StubFRComputation.o			\
           StubFRKernelPinned.o StubFRPA.o StubFRVA.o			\
           StubRegionFSComm.o StubRegionReplicated.o StubFRCRW.o	\
           StubFRLTransTable.o StubKernelPagingTransport.o		\
           StubKernelPagingTransportPA.o StubKernelPagingTransportVA.o	\
           StubSyncService.o XFR.o InvertedPageTable.o CopyPage.o	\
           PageAllocatorKernPinned.o PageAllocatorKernUnpinned.o	\
           RegionDefault.o RegionReplicated.o RegionPerProcessor.o	\
           PageFaultTest.o FR.o FRPlaceHolder.o FCMStartup.o FCM.o	\
           FCMDefault.o FCMFile.o FCMDefaultRoot.o FCMReal.o		\
           FCMComputation.o FCMPrimitiveKernel.o FCMFixed.o		\
           FCMPrimitive.o FCMSharedTrivial.o FCMPartitionedTrivial.o	\
           FCMCommon.o FCMCommonMultiRep.o FCMCommonMultiRepRoot.o	\
           FCMDefaultMultiRep.o FCMDefaultMultiRepRoot.o		\
           FCMPrimitiveKernelMultiRep.o	FCMPartitioned.o		\
           FCMPrimitiveKernelMultiRepRoot.o PageDescData.o PageList.o	\
           SegmentTable.o PageSet.o PageSetDense.o SegmentHATPrivate.o	\
           HATDefault.o HATKernel.o FRVA.o FRPA.o FRPANonPageable.o	\
           FRPANonPageableRamOnly.o FRCRW.o RegionRedZone.o		\
           PageFaultNotification.o FRComputation.o FRCommon.o		\
           FRKernelPinned.o PMRoot.o FreeFrameList.o PMLeaf.o PMKern.o	\
           RegionFSComm.o VAllocServicesKern.o MemDescKern.o		\
           AllocRegionManagerKern.o PMallocKern.o PageCopy.o Pin.o	\
           FRLTransTable.o FCMLTransTable.o RegionList.o		\
           SharedBufferProducerKernel.o SharedBufferConsumerKernel.o	\
           KernelPagingTransport.o KernelPagingTransportPA.o		\
           KernelPagingTransportVA.o PMLeafExp.o PMLeafChunk.o		\
           FreeFrameListChunk.o SyncService.o XRegionDefault.o		\
           XRegionPerProcessor.o XRegionRedZone.o XFRComputation.o	\
           XFRComputationDefault.o XFRComputationPart.o \
           FRComputationDefault.o FRComputationPart.o \
           XFRKernelPinned.o XFRPA.o XFRVA.o XRegionFSComm.o		\
           XRegionReplicated.o XFRCRW.o XFRLTransTable.o		\
           XKernelPagingTransport.o XKernelPagingTransportPA.o		\
           XKernelPagingTransportVA.o XSyncService.o
$(S)/os/kmemobjs.o: $(addprefix $(S)/os/kernel/mem/, $(kmemobjs))

OBJS += $(S)/os/kprocobjs.o
kprocobjs = StubProcessSetKern.o StubProcessServer.o			\
            ProcessReplicated.o ProcessShared.o Process.o		\
            kernRunProcess.o ProgExec.o ProcessDefaultKern.o		\
            ProcessVPList.o ProcessVPListArch.o ProcessSetKern.o	\
            ProcessServer.o SysCallInitKern.o XProcessSetKern.o		\
            XProcessServer.o
$(S)/os/kprocobjs.o: $(addprefix $(S)/os/kernel/proc/, $(kprocobjs))

OBJS += $(S)/os/kstubobjs.o
kstubobjs = StubBonnie.o client.o Bonnie.o XBonnie.o
$(S)/os/kstubobjs.o: $(addprefix $(S)/os/kernel/stubtest/, $(kstubobjs))

OBJS += $(S)/os/kbilgeobjs.o
kbilgeobjs = StubWire.o StubTestSwitch.o StubTestScheduler.o		\
             StubKernSimDisk.o StubKernToyDisk.o StubKernBogusDisk.o	\
             StubNetDev.o StubPrivilegedService.o StubSystemMisc.o	\
             StubFSFRSwap.o StubDiskSwap.o StubIPSock.o			\
             StubKBootParms.o StubBuildDate.o openfirm.o		\
             openfirmnote.o simos.o thinwireArch.o PerfMon.o		\
             SocketCreate.o HWPerfMon.o HWPerfMonPulsar.o		\
             HWPerfMon630.o HWPerfMonGPUL.o libksup.o thinwire.o	\
             Wire.o ThinIP.o resourcePrint.o ThinWireMgr.o		\
             SocketWire.o FSRamSwap.o FSSwap.o FSFRSwap.o DiskSwap.o	\
             TestSwitch.o TestScheduler.o KernToyDisk.o			\
             KernBogusDisk.o ToyBlockDev.o SystemMisc.o			\
             PrivilegedService.o LocalConsole.o StreamServerConsole.o	\
             NetDev.o BlockDevBase.o COSMgrObjectKernObject.o		\
             LazyState.o SystemControl.o MIPKernelMethods.o KParms.o	\
             KBootParms.o BuildDate.o SysEnviron.o ZilogPort.o		\
             UARTPort.o HVChan.o XWire.o XTestSwitch.o			\
             XTestScheduler.o XKernSimDisk.o XKernToyDisk.o		\
             XKernBogusDisk.o XNetDev.o XPrivilegedService.o		\
             XSystemMisc.o XFSFRSwap.o XDiskSwap.o XIPSock.o		\
             XKBootParms.o XBuildDate.o
$(S)/os/kbilgeobjs.o: $(addprefix $(S)/os/kernel/bilge/, $(kbilgeobjs))

OBJS += $(S)/os/ktraceobjs.o
ktraceobjs = trace.o tracePrint.o traceUtils.o
$(S)/os/ktraceobjs.o: $(addprefix $(S)/os/kernel/trace/, $(ktraceobjs))

OBJS += $(S)/os/ksysobjs.o
ksysobjs = KernelInfo.o hcall.o
$(S)/os/ksysobjs.o: $(addprefix $(S)/os/kernel/sys/, $(ksysobjs))

OBJS += $(S)/os/klinobjs.o
klinobjs = BootInit.o MemoryArch.o ConfigureArch.o LinuxPIC.o		\
           StdIOKern.o MemoryK.o Configure.o Interrupt.o LinuxSock.o	\
           LinuxBlockDev.o LinuxCharDev.o
$(S)/os/klinobjs.o: $(addprefix $(S)/os/kernel/linux/, $(klinobjs))



libkobjs = $(S)/lib/libc/alloc/AllocCell.o $(S)/lib/libc/alloc/AllocPool.o \
           $(S)/lib/libc/alloc/AllocRegionManager.o			   \
           $(S)/lib/libc/alloc/AllocStats.o				   \
           $(S)/lib/libc/alloc/DataChunk.o				   \
           $(S)/lib/libc/alloc/GMalloc.o $(S)/lib/libc/alloc/LMalloc.o	   \
           $(S)/lib/libc/alloc/LMallocOpt.o				   \
           $(S)/lib/libc/alloc/LeakProof.o				   \
           $(S)/lib/libc/alloc/MemDesc.o				   \
           $(S)/lib/libc/alloc/MemoryMgrPrimitive.o			   \
           $(S)/lib/libc/alloc/ObjCache.o				   \
           $(S)/lib/libc/alloc/PMalloc.o				   \
           $(S)/lib/libc/alloc/PageAllocatorDefault.o			   \
           $(S)/lib/libc/alloc/PageAllocatorUser.o			   \
           $(S)/lib/libc/alloc/VAllocServices.o				   \
           $(S)/lib/libc/alloc/alloctst.o $(S)/lib/libc/cobj/BaseObj.o	   \
           $(S)/lib/libc/cobj/COList.o					   \
           $(S)/lib/libc/cobj/COListServer.o				   \
           $(S)/lib/libc/cobj/CObjRep.o					   \
           $(S)/lib/libc/cobj/CObjRepArbiter.o				   \
           $(S)/lib/libc/cobj/CObjRepArbiterCallCounter.o		   \
           $(S)/lib/libc/cobj/CObjRepArbiterTarget.o			   \
           $(S)/lib/libc/cobj/CObjRepMediator.o				   \
           $(S)/lib/libc/cobj/CObjRoot.o				   \
           $(S)/lib/libc/cobj/CObjRootArbiter.o				   \
           $(S)/lib/libc/cobj/CObjRootMediator.o			   \
           $(S)/lib/libc/cobj/CObjRootMultiRep.o			   \
           $(S)/lib/libc/cobj/CObjRootSingleRep.o			   \
           $(S)/lib/libc/cobj/DataTransfer.o				   \
           $(S)/lib/libc/cobj/Factory.o					   \
           $(S)/lib/libc/cobj/MediatedThreadTable.o			   \
           $(S)/lib/libc/cobj/Obj.o $(S)/lib/libc/cobj/ObjectHandle.o	   \
           $(S)/lib/libc/cobj/StubCOListServer.o			   \
           $(S)/lib/libc/cobj/StubObj.o					   \
           $(S)/lib/libc/cobj/StubTypeMgrServer.o			   \
           $(S)/lib/libc/cobj/TypeMgr.o					   \
           $(S)/lib/libc/cobj/TypeMgrServer.o				   \
           $(S)/lib/libc/cobj/XCOListServer.o				   \
           $(S)/lib/libc/cobj/XHandleTrans.o $(S)/lib/libc/cobj/XObj.o	   \
           $(S)/lib/libc/cobj/XObjectList.o				   \
           $(S)/lib/libc/cobj/XTypeMgrServer.o				   \
           $(S)/lib/libc/cobj/arbiterMethods.o				   \
           $(S)/lib/libc/cobj/missHandlingtest.o			   \
           $(S)/lib/libc/cobj/sys/ActiveThrdCnt.o			   \
           $(S)/lib/libc/cobj/sys/COSDefaultObject.o			   \
           $(S)/lib/libc/cobj/sys/COSMgrObject.o			   \
           $(S)/lib/libc/cobj/sys/TransPageDesc.o			   \
           $(S)/lib/libc/cobj/sys/TransPageDescHash.o			   \
           $(S)/lib/libc/cobj/sys/TransPageDescList.o			   \
           $(S)/lib/libc/cobj/sys/defaultFuncs.o			   \
           $(S)/lib/libc/cobj/sys/mediateMethods.o			   \
           $(S)/lib/libc/fslib/FSNode.o					   \
           $(S)/lib/libc/fslib/StubFSNode.o				   \
           $(S)/lib/libc/fslib/XFSNode.o $(S)/lib/libc/io/DirBuf.o	   \
           $(S)/lib/libc/io/IO.o $(S)/lib/libc/io/IOForkManager.o	   \
           $(S)/lib/libc/io/IORingBuffer.o $(S)/lib/libc/io/MemTrans.o	   \
           $(S)/lib/libc/io/PathName.o $(S)/lib/libc/io/StubBlockDev.o	   \
           $(S)/lib/libc/io/StubCallBackObj.o				   \
           $(S)/lib/libc/io/StubFileLinuxClientStream.o			   \
           $(S)/lib/libc/io/StubFileLinuxServer.o			   \
           $(S)/lib/libc/io/StubMemTrans.o				   \
           $(S)/lib/libc/io/StubNameTreeLinux.o				   \
           $(S)/lib/libc/io/StubPAPageServer.o				   \
           $(S)/lib/libc/io/StubPacketServer.o				   \
           $(S)/lib/libc/io/StubSocketServer.o				   \
           $(S)/lib/libc/io/StubStreamServer.o				   \
           $(S)/lib/libc/io/StubStreamServerTTY.o			   \
           $(S)/lib/libc/io/StubSysVMessagesClient.o			   \
           $(S)/lib/libc/io/StubVAPageServer.o				   \
           $(S)/lib/libc/io/StubVirtFile.o				   \
           $(S)/lib/libc/io/XBlockDev.o					   \
           $(S)/lib/libc/io/XCallBackObj.o				   \
           $(S)/lib/libc/io/XFileLinuxClientStream.o			   \
           $(S)/lib/libc/io/XFileLinuxServer.o				   \
           $(S)/lib/libc/io/XMemTrans.o					   \
           $(S)/lib/libc/io/XNameTreeLinux.o				   \
           $(S)/lib/libc/io/XPAPageServer.o				   \
           $(S)/lib/libc/io/XStreamServer.o				   \
           $(S)/lib/libc/io/XStreamServerTTY.o				   \
           $(S)/lib/libc/io/XSysVMessagesClient.o			   \
           $(S)/lib/libc/io/XVAPageServer.o				   \
           $(S)/lib/libc/io/XVirtFile.o $(S)/lib/libc/io/cprintf.o	   \
           $(S)/lib/libc/io/printfBuf.o					   \
           $(S)/lib/libc/misc/BaseRandom.o				   \
           $(S)/lib/libc/misc/BlockSet.o				   \
           $(S)/lib/libc/misc/DiskMountInfoList.o			   \
           $(S)/lib/libc/misc/HashSimple.o				   \
           $(S)/lib/libc/misc/ListSimple.o				   \
           $(S)/lib/libc/misc/ListSimpleKey.o				   \
           $(S)/lib/libc/misc/SharedBufferConsumer.o			   \
           $(S)/lib/libc/misc/SharedBufferProducer.o			   \
           $(S)/lib/libc/misc/SharedBufferProducerUser.o		   \
           $(S)/lib/libc/misc/expedient.o				   \
           $(S)/lib/libc/misc/fpr_save_restore.o			   \
           $(S)/lib/libc/misc/hardware.o $(S)/lib/libc/misc/linkage.o	   \
           $(S)/lib/libc/misc/simSupport.o				   \
           $(S)/lib/libc/misc/testSupport.o				   \
           $(S)/lib/libc/misc/volatileFrame.o				   \
           $(S)/lib/libc/scheduler/DispatcherDefault.o			   \
           $(S)/lib/libc/scheduler/DispatcherDefaultAsm.o		   \
           $(S)/lib/libc/scheduler/DispatcherDefaultExp.o		   \
           $(S)/lib/libc/scheduler/DispatcherMgr.o			   \
           $(S)/lib/libc/scheduler/Scheduler.o				   \
           $(S)/lib/libc/scheduler/SchedulerService.o			   \
           $(S)/lib/libc/scheduler/SchedulerTimer.o			   \
           $(S)/lib/libc/scheduler/StubSchedulerService.o		   \
           $(S)/lib/libc/scheduler/Thread.o				   \
           $(S)/lib/libc/scheduler/TimerEvent.o				   \
           $(S)/lib/libc/scheduler/TimerRequest.o			   \
           $(S)/lib/libc/scheduler/XSchedulerService.o			   \
           $(S)/lib/libc/stdlib/baseAtoi.o				   \
           $(S)/lib/libc/stdlib/baseFgets.o				   \
           $(S)/lib/libc/stdlib/baseSprintf.o				   \
           $(S)/lib/libc/stdlib/baseStrtol.o				   \
           $(S)/lib/libc/stdlib/isctype.o				   \
           $(S)/lib/libc/stdlib/memccpy.o				   \
           $(S)/lib/libc/stdlib/memcmp.o $(S)/lib/libc/stdlib/string.o	   \
           $(S)/lib/libc/sync/BLockAsm.o				   \
           $(S)/lib/libc/sync/BLockGeneric.o				   \
           $(S)/lib/libc/sync/BLockImp.o $(S)/lib/libc/sync/Barrier.o	   \
           $(S)/lib/libc/sync/BlockedThreadQueues.o			   \
           $(S)/lib/libc/sync/FairBLock.o				   \
           $(S)/lib/libc/sync/MPMsgMgr.o				   \
           $(S)/lib/libc/sync/MPMsgMgrDisabled.o			   \
           $(S)/lib/libc/sync/MPMsgMgrEnabled.o				   \
           $(S)/lib/libc/sync/RequestCount.o				   \
           $(S)/lib/libc/sync/SLock.o $(S)/lib/libc/sync/atomic.o	   \
           $(S)/lib/libc/sys/InitStep.o $(S)/lib/libc/sys/LinuxCreds.o	   \
           $(S)/lib/libc/sys/ProcessClient.o				   \
           $(S)/lib/libc/sys/ProcessSet.o				   \
           $(S)/lib/libc/sys/ResMgrWrapper.o				   \
           $(S)/lib/libc/sys/SMTMgr.o $(S)/lib/libc/sys/StubInitStep.o	   \
           $(S)/lib/libc/sys/StubProcessClient.o			   \
           $(S)/lib/libc/sys/StubProcessLinuxClient.o			   \
           $(S)/lib/libc/sys/StubShMemBuf.o				   \
           $(S)/lib/libc/sys/SystemMiscWrapper.o			   \
           $(S)/lib/libc/sys/TAssert.o $(S)/lib/libc/sys/XInitStep.o	   \
           $(S)/lib/libc/sys/XProcessClient.o				   \
           $(S)/lib/libc/sys/XProcessLinuxClient.o			   \
           $(S)/lib/libc/sys/XShMemBuf.o $(S)/lib/libc/sys/g++sup.o	   \
           $(S)/lib/libc/sys/ppccore.o $(S)/lib/libc/trace/traceLib.o	   \
           $(S)/lib/libc/usr/GDBIOKern.o				   \
           $(S)/lib/libc/usr/ProgExecArch.o				   \
           $(S)/lib/libc/usr/ProgExecCommon.o				   \
           $(S)/lib/libc/usr/align.o $(S)/lib/libc/usr/gdb-stub.o	   \
           $(S)/lib/libc/usr/memoryMap.o				   \
           $(S)/lib/libc/usr/runProcessCommon.o				   \
           $(S)/os/kernel/bilge/StubBuildDate.o				   \
           $(S)/os/kernel/bilge/StubDiskSwap.o				   \
           $(S)/os/kernel/bilge/StubFSFRSwap.o				   \
           $(S)/os/kernel/bilge/StubIPSock.o				   \
           $(S)/os/kernel/bilge/StubKBootParms.o			   \
           $(S)/os/kernel/bilge/StubKernBogusDisk.o			   \
           $(S)/os/kernel/bilge/StubKernSimDisk.o			   \
           $(S)/os/kernel/bilge/StubKernToyDisk.o			   \
           $(S)/os/kernel/bilge/StubNetDev.o				   \
           $(S)/os/kernel/bilge/StubPrivilegedService.o			   \
           $(S)/os/kernel/bilge/StubSystemMisc.o			   \
           $(S)/os/kernel/bilge/StubTestScheduler.o			   \
           $(S)/os/kernel/bilge/StubTestSwitch.o			   \
           $(S)/os/kernel/bilge/StubWire.o				   \
           $(S)/os/kernel/exception/StubCPUContainer.o			   \
           $(S)/os/kernel/init/StubAsyncTester.o			   \
           $(S)/os/kernel/init/StubInitServer.o				   \
           $(S)/os/kernel/init/StubServerState.o			   \
           $(S)/os/kernel/init/XAsyncTester.o				   \
           $(S)/os/kernel/mem/StubFR.o $(S)/os/kernel/mem/StubFRCRW.o	   \
           $(S)/os/kernel/mem/StubFRComputation.o			   \
           $(S)/os/kernel/mem/StubFRKernelPinned.o			   \
           $(S)/os/kernel/mem/StubFRLTransTable.o			   \
           $(S)/os/kernel/mem/StubFRPA.o $(S)/os/kernel/mem/StubFRVA.o	   \
           $(S)/os/kernel/mem/StubKernelPagingTransport.o		   \
           $(S)/os/kernel/mem/StubKernelPagingTransportPA.o		   \
           $(S)/os/kernel/mem/StubKernelPagingTransportVA.o		   \
           $(S)/os/kernel/mem/StubRegionDefault.o			   \
           $(S)/os/kernel/mem/StubRegionFSComm.o			   \
           $(S)/os/kernel/mem/StubRegionPerProcessor.o			   \
           $(S)/os/kernel/mem/StubRegionRedZone.o			   \
           $(S)/os/kernel/mem/StubRegionReplicated.o			   \
           $(S)/os/kernel/mem/StubSyncService.o				   \
           $(S)/os/kernel/mem/XFR.o					   \
           $(S)/os/kernel/proc/StubProcessServer.o			   \
           $(S)/os/kernel/proc/StubProcessSetKern.o			   \
           $(S)/os/kernel/stubtest/StubBonnie.o				   \
           $(S)/os/kernel/sys/symdefsKern.o				   \
           $(S)/os/servers/baseServers/StubBaseServers.o		   \
           $(S)/os/servers/baseServers/StubDevFSBlk.o			   \
           $(S)/os/servers/baseServers/StubDevFSDir.o			   \
           $(S)/os/servers/baseServers/StubDevFSRemote.o		   \
           $(S)/os/servers/baseServers/StubDevOpener.o			   \
           $(S)/os/servers/baseServers/StubFRProvider.o			   \
           $(S)/os/servers/baseServers/StubFileSystemDev.o		   \
           $(S)/os/servers/baseServers/StubProcessLinuxServer.o		   \
           $(S)/os/servers/baseServers/StubResMgr.o			   \
           $(S)/os/servers/baseServers/StubStreamServerSocket.o		   \
           $(S)/os/servers/baseServers/StubSysFSAttrFile.o		   \
           $(S)/os/servers/baseServers/XBaseServers.o			   \
           $(S)/os/servers/baseServers/XDevOpener.o			   \
           $(S)/os/servers/baseServers/XFRProvider.o			   \
           $(S)/os/servers/k42Ramfs/StubFileSystemK42RamFS.o		   \
           $(S)/os/servers/kfs/StubFileSystemKFS.o			   \
           $(S)/os/servers/mountPoint/StubMountPointMgr.o		   \
           $(S)/os/servers/nfs/StubFileSystemNFS.o			   \
           $(S)/os/servers/pipe/StubStreamServerPipe.o			   \
           $(S)/os/servers/pty/StubLogin.o				   \
           $(S)/os/servers/pty/StubSysVMessages.o			   \
           $(S)/os/servers/pty/StubSysVSharedMem.o			   \
           $(S)/os/servers/sample/StubSampleService.o			   \
           $(S)/os/servers/unionfs/StubFileSystemUnion.o		   \
           $(S)/usr/StubRemoteIPCTst.o $(S)/usr/StubUsrTst.o		   \
           $(S)/usr/XUsrTst.o

OBJS += $(O)/install/lib/$(ARCH)/$(D)Deb/libk.a
$(O)/install/lib/$(ARCH)/$(D)Deb/libk.a: $(libkobjs)
	$(call status, AR, $@)
	$(AR) crs $@ $?


OBJS += $(S)/os/kernel/bilge/simos.o $(S)/os/kernel/bilge/openfirm.o
$(S)/os/kernel/bilge/%.o: $(H)/os/kernel/bilge/arch/powerpc/%.C
	$(call status, CXX, $@)
	$(CXX) -c -fno-rtti -nostdinc++ -fno-exceptions \
               -DTARGET_MACHINE="powerpc" -D__GNU_AS__ -Upowerpc -DGCC3 \
               -MD -Wa,-strip-local-absolute -fPIC -mminimal-toc  -DKERNEL \
               -Wall -Werror -O1 -g -DKFS_ENABLED -DK42 -D_REENTRANT \
               -D__BIG_ENDIAN__ -nostdinc -I. \
               -I$(H)/os/kernel/bilge \
               -I$(O)/install/include \
               -I$(U)/$(D)Deb.Img.4/usr/powerpc64-linux/include \
               -I$(L)/include \
               -I$(O)/install/gcc-include/arch/powerpc \
               -I$(O)/install/include/stubgen/arch/powerpc  \
               -I$(H)/os/kernel $< -o $@

$(S)/os/kernel/init/%.o: $(H)/os/kernel/init/arch/powerpc/%.C
	$(call status, CXX, $@)
	$(CXX) -c -fno-rtti -nostdinc++ -fno-exceptions \
               -DTARGET_MACHINE="powerpc" -D__GNU_AS__ -Upowerpc -DGCC3 \
               -MD -Wa,-strip-local-absolute -fPIC -mminimal-toc  -DKERNEL \
               -Wall -Werror -O0 -g -DKFS_ENABLED -DK42 -D_REENTRANT \
               -D__BIG_ENDIAN__ -nostdinc -I. \
               -I$(H)/os/kernel/init \
               -I$(O)/install/include \
               -I$(U)/$(D)Deb.Img.4/usr/powerpc64-linux/include \
               -I$(L)/include \
               -I$(O)/install/gcc-include/arch/powerpc \
               -I$(O)/install/include/stubgen/arch/powerpc  \
               -I$(H)/os/kernel $< -o $@

lflags = -fno-rtti -nostdinc++ -fno-exceptions -DTARGET_MACHINE="powerpc" \
        -D__GNU_AS__ -Upowerpc -DGCC3 -MD -Wa,-strip-local-absolute	  \
        -fPIC -mminimal-toc -Wall -Werror -O0 -g			  \
        -DKFS_ENABLED -DK42 -D_REENTRANT -D__BIG_ENDIAN__ -nostdinc
kflags = $(lflags) -DKERNEL
iflags = -I$(L)/include						\
         -I$(O)/install/include					\
         -I$(O)/install/gcc-include/arch/powerpc		\
         -I$(O)/install/include/stubgen/arch/powerpc		\
         -I$(U)/$(D)Deb.Img.4/usr/powerpc64-linux/include
jflags = -I$(L)/arch/k42/include $(iflags)


os_kernel_linux_flags = -I$(H)/os/kernel \
                        -I$(H)/os/kernel/linux
$(S)/os/kernel/linux/%.o: $(H)/os/kernel/linux/arch/powerpc/%.C
	$(call status, CXX, $@)
	$(CXX) -c $(kflags) $(jflags) $(os_kernel_linux_flags) $< -o $@

lib_libc_alloc_flags = -I$(S)/lib/libc/alloc	\
                       -I$(H)/lib/libc		\
                       -I$(H)/lib/libc/alloc
$(S)/lib/libc/alloc/%.o: $(H)/lib/libc/alloc/%.C
	$(call status, CXX, $@)
	$(CXX) -c $(lflags) $(iflags) $(lib_libc_alloc_flags) $< -o $@


# Now that OBJS is totally expanded, generate our directory list from it.
DIRS = $(sort $(foreach obj, $(OBJS), $(dir $(obj))))
dirs: $(DIRS)

# This is always the last rule: it needs OBJS to be totally expanded.
$(DIRS):
	$(call status, MKDIR, $@)
	$(MKDIR) -p $@

--- End Makefile.new ---




More information about the K42-discussion mailing list