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

View File

@ -219,6 +219,8 @@ HAIKU_EXECUTABLE_BEGIN_GLUE_CODE =
<src!system!glue>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) ;

View File

@ -64,30 +64,42 @@ actions KernelLd
rule KernelAddon
{
# KernelAddon <name> : <relpath> : <sources> : <static-libraries> ;
#
# TODO: <relpath> 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 = <nogrist>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 = <nogrist>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