haiku/build/jam/packages/HaikuCrossDevel
Augustin Cavalier 47320dd0ab configure & build: Rework legacy GCC detection to parse versions outside of Jam.
Jam comparison logic is string-based, and so was detecting GCC >= 10
as being < 2. This rectifies that by removing the GCC version parsing
from Jam logic entirely, and setting various BuildConfig variables
instead.

Change-Id: I0c0ae3b9002fb5e77f9ca7a78600c91871657f03
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3293
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
2020-10-09 01:20:02 +00:00

122 lines
4.1 KiB
Plaintext

# This package is like the HaikuDevel package, but it is meant for cross
# development, i.e. it assumes that a specific cross compiler is installed
# on the Haiku system where this package is being used.
# The main use of this package is to provide HaikuPorter with a development
# environment for a cross-build Haiku platform.
local primaryArchitecture = $(HAIKU_PACKAGING_ARCHS[1]) ;
local architecture = $(TARGET_PACKAGING_ARCH) ;
local isPrimaryArchitecture = [ MultiArchIfPrimary 1 : ] ;
local packageNameSuffix = $(primaryArchitecture) ;
local architectureSubDir ;
if ! $(isPrimaryArchitecture) {
packageNameSuffix = $(primaryArchitecture)_$(architecture) ;
architectureSubDir = $(architecture) ;
}
local additionalLibraries_stage1 ;
local additionalLibraries
= [ MultiArchDefaultGristFiles libbe.so libnetwork.so libpackage.so ] ;
local stage ;
for stage in _stage0 _stage1 "" {
# first create the actual cross development package
local haikuCrossDevelSysrootPackage
= haiku_cross_devel_sysroot$(stage)_$(packageNameSuffix).hpkg ;
HaikuPackage $(haikuCrossDevelSysrootPackage) ;
local developCrossLibDirTokens = develop lib $(architectureSubDir) ;
if $(stage) = _stage0 {
# glue code
AddFilesToPackage $(developCrossLibDirTokens) :
<bootstrap!src!system!glue!arch!$(TARGET_ARCH)!$(architecture)>crti.o
<bootstrap!src!system!glue!arch!$(TARGET_ARCH)!$(architecture)>crtn.o
<bootstrap!src!system!glue!$(architecture)>init_term_dyn.o
<bootstrap!src!system!glue!$(architecture)>start_dyn.o
<bootstrap!src!system!glue!$(architecture)>haiku_version_glue.o
;
# libraries
AddLibrariesToPackage $(developCrossLibDirTokens) :
[ MultiArchDefaultGristFiles libroot.so : stubbed ]
;
} else {
# glue code
AddFilesToPackage $(developCrossLibDirTokens) :
<src!system!glue!arch!$(TARGET_ARCH)!$(architecture)>crti.o
<src!system!glue!arch!$(TARGET_ARCH)!$(architecture)>crtn.o
<src!system!glue!$(architecture)>init_term_dyn.o
<src!system!glue!$(architecture)>start_dyn.o
<src!system!glue!$(architecture)>haiku_version_glue.o
;
# kernel
if $(isPrimaryArchitecture) {
AddFilesToPackage $(developCrossLibDirTokens) : kernel.so : _KERNEL_ ;
}
# libraries
AddLibrariesToPackage $(developCrossLibDirTokens) :
[ MultiArchDefaultGristFiles libbsd.so ]
[ MultiArchDefaultGristFiles libroot.so : revisioned ]
[ MultiArchDefaultGristFiles libnetwork.so ]
[ TargetLibstdc++ ]
[ TargetLibsupc++ ]
$(additionalLibraries$(stage))
;
# static libraries
AddFilesToPackage $(developCrossLibDirTokens)
: <$(architecture)>liblocalestub.a ;
# the POSIX error code mapper library
AddFilesToPackage $(developCrossLibDirTokens)
: [ MultiArchDefaultGristFiles libposix_error_mapper.a ] ;
}
# headers
local developCrossHeadersDirTokens = develop headers ;
local headerDir ;
for headerDir in config glibc os posix {
CopyDirectoryToPackage $(developCrossHeadersDirTokens)
: [ FDirName $(HAIKU_TOP) headers $(headerDir) ] ;
}
# BSD and GNU compatibility headers
for headerDir in bsd gnu {
CopyDirectoryToPackage $(developCrossHeadersDirTokens)
: [ FDirName $(HAIKU_TOP) headers compatibility $(headerDir) ] ;
}
if $(stage) != _stage0 {
# cpp headers
if $(HAIKU_CC_IS_LEGACY_GCC_$(architecture)) = 1 {
# GCC 2 only -- for GCC 4 they come with the DevelopmentBase package
CopyDirectoryToPackage $(developCrossHeadersDirTokens) c++
: [ FDirName $(HAIKU_TOP) headers cpp ] : 2.95.3 ;
}
}
BuildHaikuPackage $(haikuCrossDevelSysrootPackage)
: haiku_cross_devel_sysroot ;
# Now create a wrapper package which just contains the actual cross
# development package. This wrapper package can safely be installed into the
# system hierarchy of the target system, from where haikuporter will fetch
# it when needed.
local haikuCrossDevelPackage
= haiku_cross_devel$(stage)_$(packageNameSuffix).hpkg ;
HaikuPackage $(haikuCrossDevelPackage) ;
# add the wrapped package
local developCrossDirTokens = develop cross ;
AddFilesToPackage $(developCrossDirTokens)
: $(haikuCrossDevelSysrootPackage) ;
BuildHaikuPackage $(haikuCrossDevelPackage) : haiku_cross_devel ;
}