mirror of
https://review.haiku-os.org/haiku
synced 2024-11-23 07:18:40 +01:00
Support for adding libraries compiled with the alternative gcc (2 vs.
4). One has to have a (fully configured) "generated" directory for the alternative gcc and specify it using the new option "--alternative-gcc-output-dir" when configuring the main build. Additionally the build variable HAIKU_ADD_ALTERNATIVE_GCC_LIBS has to be set to "1". If that has been done, when building the image a sub-jam is invoked that generates the alternative libs and zips them. The main-jam unzips them into the correct directory in the image. Note that the JAM build variable has to be set when using a jam executable not invoked by "jam". Tested with gcc 2 NetPositive, Pe, and FireFox under gcc 4 Haiku, and with a few of the standard gcc 4 Haiku apps under gcc 2 Haiku. Seems to work fine so far. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25536 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
3c504a317e
commit
9b0dd52858
@ -425,6 +425,91 @@ CopyDirectoryToHaikuImage beos etc
|
||||
: licenses : -x .svn ;
|
||||
|
||||
|
||||
#pragma mark - Alternative GCC Libraries
|
||||
|
||||
|
||||
# build a zip file with the system libs
|
||||
# (used by another jam that wants to build a Haiku with alternative GCC
|
||||
# libraries included)
|
||||
|
||||
rule ZipTargets zipFile : targets
|
||||
{
|
||||
Depends $(zipFile) : <build>zip $(targets) ;
|
||||
ZipTargets1 $(zipFile) : <build>zip $(targets) ;
|
||||
}
|
||||
|
||||
actions ZipTargets1
|
||||
{
|
||||
$(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR)
|
||||
$(RM) "$(1)"
|
||||
$(2[1]) -jy "$(1)" $(2[2-])
|
||||
}
|
||||
|
||||
local alternativeSystemLibsZip = <image>alternative_system_libs.zip ;
|
||||
MakeLocate $(alternativeSystemLibsZip) : $(HAIKU_OUTPUT_DIR) ;
|
||||
|
||||
# collect the targets we would install in the lib directory
|
||||
local alternativeSystemLibs ;
|
||||
local libTargets = [ FFilesInHaikuImageDirectory beos system lib ] ;
|
||||
local libTarget ;
|
||||
for libTarget in $(libTargets) {
|
||||
alternativeSystemLibs += [ on $(libTarget) return $(TARGET) ] ;
|
||||
}
|
||||
|
||||
# collect the symlinks we would install in the lib directory
|
||||
libTargets = [ FSymlinksInHaikuImageDirectory beos system lib ] ;
|
||||
local tmpAlternativeLibDir
|
||||
= [ FDirName $(HAIKU_OUTPUT_DIR) tmp alternativeLibs ] ;
|
||||
for libTarget in $(libTargets) {
|
||||
# We need to create actual symlinks, we can zip later.
|
||||
local symlinkTarget = <alternative-system-lib>$(libTarget:BS) ;
|
||||
MakeLocate $(symlinkTarget) : $(tmpAlternativeLibDir) ;
|
||||
SymLink $(symlinkTarget) : [ on $(libTarget) return $(SYMLINK_TARGET) ] ;
|
||||
alternativeSystemLibs += $(symlinkTarget) ;
|
||||
}
|
||||
|
||||
ZipTargets $(alternativeSystemLibsZip) : $(alternativeSystemLibs) ;
|
||||
|
||||
|
||||
if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) && $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) {
|
||||
# let another jam build a zip with the system libraries
|
||||
rule InvokeSubJam target : directory : jamLine
|
||||
{
|
||||
DIRECTORY on $(target) = $(directory) ;
|
||||
COMMAND_LINE on $(target) = $(jamLine) ;
|
||||
Always $(target) ;
|
||||
InvokeSubJam1 $(target) ;
|
||||
}
|
||||
|
||||
actions InvokeSubJam1
|
||||
{
|
||||
cd $(DIRECTORY)
|
||||
$(JAM:E=jam) -q $(COMMAND_LINE) ;
|
||||
}
|
||||
|
||||
local otherAlternativeSystemLibsZip
|
||||
= <other-image>alternative_system_libs.zip ;
|
||||
MakeLocate $(otherAlternativeSystemLibsZip)
|
||||
: $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR) ;
|
||||
|
||||
InvokeSubJam $(otherAlternativeSystemLibsZip)
|
||||
: $(HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR)
|
||||
: "'<image>alternative_system_libs.zip'" ;
|
||||
|
||||
local libSubDir ;
|
||||
|
||||
if $(HAIKU_GCC_VERSION[1]) = 2 {
|
||||
libSubDir = gcc4 ;
|
||||
} else {
|
||||
libSubDir = gcc2 ;
|
||||
}
|
||||
|
||||
# install the alternative libs in the right directory
|
||||
UnzipArchiveToHaikuImage beos system lib $(libSubDir)
|
||||
: $(otherAlternativeSystemLibsZip) ;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Optional Packages
|
||||
|
||||
|
||||
|
@ -128,6 +128,13 @@ AddOptionalHaikuImagePackages WonderBrush ;
|
||||
# Add all available optional packages.
|
||||
HAIKU_ADD_ALL_OPTIONAL_PACKAGES = 1 ;
|
||||
|
||||
# Add the libraries built with the alternative gcc version. The alternative
|
||||
# gcc generated directory must have specified via the configure option
|
||||
# --alternative-gcc-output-dir. Note, that a sub-jam will be executed. When
|
||||
# using a jam that is not simply invoked by "jam", set the JAM build variable
|
||||
# accordingly.
|
||||
HAIKU_ADD_ALTERNATIVE_GCC_LIBS = 1 ;
|
||||
|
||||
# Specify scripts that shall be run when populating the image/installation
|
||||
# directory. The "early" script is run before anything has been copied onto
|
||||
# the image/into the installation directory. The "late" script is run after
|
||||
|
@ -32,3 +32,6 @@
|
||||
|
||||
# Add all available optional packages.
|
||||
#HAIKU_ADD_ALL_OPTIONAL_PACKAGES = 1 ;
|
||||
|
||||
# Add the libraries built with the alternative gcc version.
|
||||
#HAIKU_ADD_ALTERNATIVE_GCC_LIBS = 1 ;
|
||||
|
93
configure
vendored
93
configure
vendored
@ -27,6 +27,13 @@ options:
|
||||
will not be binary compatible with BeOS R5.
|
||||
<arch> specifies the target architecture, either
|
||||
"x86" or "ppc".
|
||||
--alternative-gcc-output-dir <dir>
|
||||
Build a Haiku installation that supports running
|
||||
executables built with a gcc version incompatible
|
||||
with the primary gcc (e.g. gcc 2 executables under
|
||||
a gcc 4 Haiku or vice versa). <dir> specifies the
|
||||
output directory of the other gcc. The directory
|
||||
must already be fully configured.
|
||||
--cross-tools-prefix <prefix>
|
||||
Assume cross compilation. <prefix> should be a
|
||||
path to the directory where the cross
|
||||
@ -231,6 +238,7 @@ crossToolsPrefix=
|
||||
buildCrossTools=
|
||||
buildCrossToolsScript="$sourceDir/build/scripts/build_cross_tools"
|
||||
buildCrossToolsMachine=
|
||||
alternativeGCCOutputDir=
|
||||
|
||||
haikuRequiredLegacyGCCVersion="2.95.3-haiku-080323"
|
||||
export haikuRequiredLegacyGCCVersion
|
||||
@ -254,33 +262,49 @@ while [ $# -gt 0 ] ; do
|
||||
case "$1" in
|
||||
--bochs-debug) bochs_debug=1; shift 1;;
|
||||
--build-cross-tools) assertparam "$1" $#; buildCrossTools=$2; shift 2;;
|
||||
--build-cross-tools-gcc4) assertparams "$1" 2 $#; buildCrossTools=$3;
|
||||
buildCrossToolsScript="${buildCrossToolsScript}_gcc4";
|
||||
case "$2" in
|
||||
x86) haikuGCCMachine=i586-pc-haiku;;
|
||||
ppc) haikuGCCMachine=powerpc-apple-haiku;;
|
||||
m68k) haikuGCCMachine=m68k-unknown-haiku;;
|
||||
*) echo "Unsupported target architecture: $2"
|
||||
exit 1;;
|
||||
esac
|
||||
buildCrossToolsMachine=$haikuGCCMachine
|
||||
shift 3;;
|
||||
--cross-tools-prefix) assertparam "$1" $#; crossToolsPrefix=$2; shift 2;;
|
||||
--build-cross-tools-gcc4)
|
||||
assertparams "$1" 2 $#
|
||||
buildCrossTools=$3
|
||||
buildCrossToolsScript="${buildCrossToolsScript}_gcc4"
|
||||
case "$2" in
|
||||
x86) haikuGCCMachine=i586-pc-haiku;;
|
||||
ppc) haikuGCCMachine=powerpc-apple-haiku;;
|
||||
m68k) haikuGCCMachine=m68k-unknown-haiku;;
|
||||
*) echo "Unsupported target architecture: $2"
|
||||
exit 1;;
|
||||
esac
|
||||
buildCrossToolsMachine=$haikuGCCMachine
|
||||
shift 3
|
||||
;;
|
||||
--alternative-gcc-output-dir)
|
||||
assertparam "$1" $#
|
||||
cd $2 || exit 1
|
||||
alternativeGCCOutputDir=`pwd`
|
||||
cd $currentDir
|
||||
shift 2
|
||||
;;
|
||||
--cross-tools-prefix)
|
||||
assertparam "$1" $#
|
||||
crossToolsPrefix=$2
|
||||
shift 2
|
||||
;;
|
||||
--help | -h) usage; exit 0;;
|
||||
--include-gpl-addons) include_gpl_addons=1; shift 1;;
|
||||
--include-3rdparty) include_3rdparty=1; shift 1;;
|
||||
--enable-multiuser) enable_multiuser=1; shift 1;;
|
||||
--distro-compatibility)
|
||||
assertparam "$1" $#; distroCompatibility=$2;
|
||||
case "$distroCompatibility" in
|
||||
official) ;;
|
||||
compatible) ;;
|
||||
default) ;;
|
||||
*) echo "Invalid distro compatibility" \
|
||||
"level: $distroCompatibility"
|
||||
exit 1;;
|
||||
esac
|
||||
shift 2;;
|
||||
assertparam "$1" $#
|
||||
distroCompatibility=$2
|
||||
case "$distroCompatibility" in
|
||||
official) ;;
|
||||
compatible) ;;
|
||||
default) ;;
|
||||
*) echo "Invalid distro compatibility" \
|
||||
"level: $distroCompatibility"
|
||||
exit 1;;
|
||||
esac
|
||||
shift 2
|
||||
;;
|
||||
--target=*) target=`echo $1 | cut -d'=' -f2-`; shift 1;;
|
||||
--use-gcc-pipe) use_gcc_pipe=1; shift 1;;
|
||||
--use-32bit) use_32bit=1; shift 1;;
|
||||
@ -358,14 +382,15 @@ cat << EOF > "$buildOutputDir/BuildConfig"
|
||||
TARGET_PLATFORM ?= "${target}" ;
|
||||
HOST_PLATFORM ?= "${buildPlatform}" ;
|
||||
|
||||
BOCHS_DEBUG_HACK ?= "${bochs_debug}" ;
|
||||
INCLUDE_GPL_ADDONS ?= "${include_gpl_addons}" ;
|
||||
HAIKU_INCLUDE_3RDPARTY ?= "${include_3rdparty}" ;
|
||||
HAIKU_ENABLE_MULTIUSER ?= "${enable_multiuser}" ;
|
||||
HAIKU_DISTRO_COMPATIBILITY ?= "${distroCompatibility}" ;
|
||||
HAIKU_USE_GCC_PIPE ?= "${use_gcc_pipe}" ;
|
||||
HAIKU_HOST_USE_32BIT ?= "${use_32bit}" ;
|
||||
HAIKU_HOST_USE_XATTR ?= "${use_xattr}" ;
|
||||
BOCHS_DEBUG_HACK ?= "${bochs_debug}" ;
|
||||
INCLUDE_GPL_ADDONS ?= "${include_gpl_addons}" ;
|
||||
HAIKU_INCLUDE_3RDPARTY ?= "${include_3rdparty}" ;
|
||||
HAIKU_ENABLE_MULTIUSER ?= "${enable_multiuser}" ;
|
||||
HAIKU_DISTRO_COMPATIBILITY ?= "${distroCompatibility}" ;
|
||||
HAIKU_USE_GCC_PIPE ?= "${use_gcc_pipe}" ;
|
||||
HAIKU_HOST_USE_32BIT ?= "${use_32bit}" ;
|
||||
HAIKU_HOST_USE_XATTR ?= "${use_xattr}" ;
|
||||
HAIKU_ALTERNATIVE_GCC_OUTPUT_DIR ?= ${alternativeGCCOutputDir} ;
|
||||
|
||||
HAIKU_GCC_RAW_VERSION ?= ${haikuGCCVersion} ;
|
||||
HAIKU_GCC_MACHINE ?= ${haikuGCCMachine} ;
|
||||
@ -429,10 +454,7 @@ TZ_OBJECTS on <timezone-source>${source} ?= $TZOBJECTS ;
|
||||
EOF
|
||||
done
|
||||
|
||||
# Generate a boot strap Jamfile in the output directory, if it is not in
|
||||
# the source dir.
|
||||
|
||||
if [ "$currentDir" != "$sourceDir" ]; then
|
||||
# Generate a boot strap Jamfile in the output directory.
|
||||
|
||||
cat << EOF > $outputDir/Jamfile
|
||||
# automatically generated Jamfile
|
||||
@ -443,6 +465,3 @@ HAIKU_OUTPUT_DIR = ${outputDir} ;
|
||||
include [ FDirName \$(HAIKU_TOP) Jamfile ] ;
|
||||
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user