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
This commit is contained in:
Ingo Weinhold
2005-12-15 13:01:25 +00:00
parent 09116ce3bc
commit 2a1f9fe07a
2 changed files with 29 additions and 15 deletions
+2
View File
@@ -219,6 +219,8 @@ HAIKU_EXECUTABLE_BEGIN_GLUE_CODE =
<src!system!glue>init_term_dyn.o <src!system!glue>init_term_dyn.o
; ;
HAIKU_EXECUTABLE_END_GLUE_CODE = $(HAIKU_LIBRARY_END_GLUE_CODE) ; 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) ; SEARCH on crtbegin.o crtend.o = $(HAIKU_GCC_LIB_DIR) ;
+23 -11
View File
@@ -64,30 +64,42 @@ actions KernelLd
rule KernelAddon rule KernelAddon
{ {
# KernelAddon <name> : <relpath> : <sources> : <static-libraries> ; # KernelAddon <name> : <relpath> : <sources> : <static-libraries> ;
#
# TODO: <relpath> no longer needed!
local target = $(1) ;
local sources = $(3) ; local sources = $(3) ;
local libs = $(4) ;
local kernel ;
local beginGlue ;
local endGlue ;
on $(target) {
# platform supported? # platform supported?
on $(1) {
if ! $(PLATFORM) in $(SUPPORTED_PLATFORMS) { if ! $(PLATFORM) in $(SUPPORTED_PLATFORMS) {
return ; return ;
} }
}
# When building for Haiku, we link against kernel.so, otherwise # determine which kernel and glue code to link against
# against the system kernel. if $(PLATFORM) = haiku {
local kernel ;
if [ on $(1) return $(PLATFORM) ] = haiku {
kernel = <nogrist>kernel.so ; kernel = <nogrist>kernel.so ;
beginGlue = $(HAIKU_KERNEL_ADDON_BEGIN_GLUE_CODE) ;
endGlue = $(HAIKU_KERNEL_ADDON_END_GLUE_CODE) ;
} else { } else {
kernel = /boot/develop/lib/x86/_KERNEL_ ; 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 ; SetupKernel $(sources) : -fno-pic ;
local linkFlags = -nostdlib -Xlinker -soname=\"$(target)\" ;
Addon $(1) : $(2) : $(sources) ; LINKFLAGS on $(target) = [ on $(target) return $(LINKFLAGS) ] $(linkFlags) ;
LINKFLAGS on $(1) = [ on $(1) return $(LINKFLAGS) ] -nostdlib ; Main $(target) : $(sources) ;
LinkAgainst $(1) : $(4) $(kernel) ; LinkAgainst $(target) : $(libs) $(kernel) ;
} }
rule KernelMergeObject rule KernelMergeObject