From 2a1f9fe07a0a16e35fbe344103767c9da37665bb Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 15 Dec 2005 13:01:25 +0000 Subject: [PATCH] Rewrote KernelAddon. We were using Addon before, with the undesired side effect that we were linking not only against the complete glue code, but also against libroot.so. Now we explicitly link against crtbegin.o/crtend.o only. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15545 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- build/jam/BuildSetup | 2 ++ build/jam/KernelRules | 42 +++++++++++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index 01a860f999..2b2ae367f2 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -219,6 +219,8 @@ HAIKU_EXECUTABLE_BEGIN_GLUE_CODE = init_term_dyn.o ; HAIKU_EXECUTABLE_END_GLUE_CODE = $(HAIKU_LIBRARY_END_GLUE_CODE) ; +HAIKU_KERNEL_ADDON_BEGIN_GLUE_CODE = crtbegin.o ; +HAIKU_KERNEL_ADDON_END_GLUE_CODE = crtend.o ; SEARCH on crtbegin.o crtend.o = $(HAIKU_GCC_LIB_DIR) ; diff --git a/build/jam/KernelRules b/build/jam/KernelRules index e879845ecd..34e32472ca 100644 --- a/build/jam/KernelRules +++ b/build/jam/KernelRules @@ -64,30 +64,42 @@ actions KernelLd rule KernelAddon { # KernelAddon : : : ; - + # +# TODO: no longer needed! + local target = $(1) ; local sources = $(3) ; + local libs = $(4) ; - # platform supported? - on $(1) { + local kernel ; + local beginGlue ; + local endGlue ; + on $(target) { + # platform supported? if ! $(PLATFORM) in $(SUPPORTED_PLATFORMS) { return ; } + + # determine which kernel and glue code to link against + if $(PLATFORM) = haiku { + kernel = kernel.so ; + beginGlue = $(HAIKU_KERNEL_ADDON_BEGIN_GLUE_CODE) ; + endGlue = $(HAIKU_KERNEL_ADDON_END_GLUE_CODE) ; + } else { + kernel = /boot/develop/lib/x86/_KERNEL_ ; + } } - # When building for Haiku, we link against kernel.so, otherwise - # against the system kernel. - local kernel ; - if [ on $(1) return $(PLATFORM) ] = haiku { - kernel = kernel.so ; - } else { - kernel = /boot/develop/lib/x86/_KERNEL_ ; - } + # add glue code + LINK_BEGIN_GLUE on $(target) = $(beginGlue) ; + LINK_END_GLUE on $(target) = $(endGlue) ; + Depends $(target) : $(beginGlue) $(endGlue) ; + # compile and link SetupKernel $(sources) : -fno-pic ; - - Addon $(1) : $(2) : $(sources) ; - LINKFLAGS on $(1) = [ on $(1) return $(LINKFLAGS) ] -nostdlib ; - LinkAgainst $(1) : $(4) $(kernel) ; + local linkFlags = -nostdlib -Xlinker -soname=\"$(target)\" ; + LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] $(linkFlags) ; + Main $(target) : $(sources) ; + LinkAgainst $(target) : $(libs) $(kernel) ; } rule KernelMergeObject