152a38012Sejakowatz#!/bin/sh 252a38012Sejakowatz# 3338b8dc3SIngo Weinhold# configure [ <options> ] 4614026d7Sshatty 5022fa244SIngo Weinhold# usage 6022fa244SIngo Weinhold# 7022fa244SIngo Weinhold# Prints usage. 8022fa244SIngo Weinhold# 9022fa244SIngo Weinholdusage() 10022fa244SIngo Weinhold{ 11022fa244SIngo Weinhold cat << EOF 12022fa244SIngo Weinhold 13022fa244SIngo WeinholdUsage: $0 <options> 14022fa244SIngo Weinholdoptions: 156f9587ddSAxel Dörfler --bochs-debug Enables bochs serial debug emulation (activated 166f9587ddSAxel Dörfler via kernel settings file). 17338b8dc3SIngo Weinhold --build-cross-tools <build tools dir> 18338b8dc3SIngo Weinhold Assume cross compilation. <build tools dir> 19338b8dc3SIngo Weinhold defines the location of the build tools sources. 20338b8dc3SIngo Weinhold They will be compiled and placed in the output 21a5b60fa8SOliver Tappe directory under "cross-tools". The HAIKU_* tools 22a5b60fa8SOliver Tappe variables will be set accordingly. 2320ab75e6SIngo Weinhold --build-cross-tools-gcc4 <arch> <build tools dir> 2429ef597dSIngo Weinhold Like "--build-cross-tools" just that gcc 4 will 25a5b60fa8SOliver Tappe be used for cross-compilation. Note, that the 26a5b60fa8SOliver Tappe resulting Haiku installation built with gcc 4 27a5b60fa8SOliver Tappe will not be binary compatible with BeOS R5. 2820ab75e6SIngo Weinhold <arch> specifies the target architecture, either 2920ab75e6SIngo Weinhold "x86" or "ppc". 309b0dd528SIngo Weinhold --alternative-gcc-output-dir <dir> 319b0dd528SIngo Weinhold Build a Haiku installation that supports running 329b0dd528SIngo Weinhold executables built with a gcc version incompatible 339b0dd528SIngo Weinhold with the primary gcc (e.g. gcc 2 executables under 349b0dd528SIngo Weinhold a gcc 4 Haiku or vice versa). <dir> specifies the 359b0dd528SIngo Weinhold output directory of the other gcc. The directory 369b0dd528SIngo Weinhold must already be fully configured. 37292e63bfSIngo Weinhold Note, that a sub-jam will be executed when 38292e63bfSIngo Weinhold building Haiku. When using a jam that is not 39292e63bfSIngo Weinhold simply invoked by "jam", the JAM build variable 40292e63bfSIngo Weinhold needs to be set accordingly. 41292e63bfSIngo Weinhold To disable building the alternative libraries 42292e63bfSIngo Weinhold the variable HAIKU_ADD_ALTERNATIVE_GCC_LIBS can be 43292e63bfSIngo Weinhold unset in the UserBuildConfig file. 44eccc7665SIngo Weinhold --cross-tools-prefix <prefix> 45eccc7665SIngo Weinhold Assume cross compilation. <prefix> should be a 46eccc7665SIngo Weinhold path to the directory where the cross 47eccc7665SIngo Weinhold compilation tools are located, plus the platform 480da9c208SIngo Weinhold prefix, e.g. "/path/to/tools/i586-pc-haiku-". 49eccc7665SIngo Weinhold This overrides the HAIKU_* tool variables. 50a66c32ddSIngo Weinhold --distro-compatibility <level> 51a66c32ddSIngo Weinhold The distribution's level of compatibility with 52a66c32ddSIngo Weinhold the official Haiku distribution. The generated 53a66c32ddSIngo Weinhold files will contain the respective trademarks 54a66c32ddSIngo Weinhold accordingly. 55a66c32ddSIngo Weinhold official -- the official Haiku distribution. 56a66c32ddSIngo Weinhold compatible -- a Haiku Compatible (tm) distro. 57a66c32ddSIngo Weinhold default -- any other distro (default value). 58eccc7665SIngo Weinhold --help Prints out this help. 59eccc7665SIngo Weinhold --include-gpl-addons Include GPL licensed add-ons. 601974210fSFrançois Revol --include-3rdparty Include 3rdparty/ in the build system. 61f1b9c086SFrançois Revol --enable-multiuser Enable experimental multiuser support. 62614026d7Sshatty --target=TARGET Select build target platform. [default=${target}] 63a17b9c0cSshatty valid targets=r5,bone,dano,haiku 64eccc7665SIngo Weinhold --use-gcc-pipe Build with GCC option -pipe. Speeds up the build 655a34a443SFrançois Revol process, but uses more memory. 660385b065SIngo Weinhold --use-32bit Use -m32 flag on 64bit host gcc compiler. 674f4e5272SIngo Weinhold --use-xattr Use Linux xattr support for BeOS attribute 684f4e5272SIngo Weinhold emulation. Warning: Make sure your file system 694f4e5272SIngo Weinhold supports sufficient attribute sizes (4 KB per 704f4e5272SIngo Weinhold file for all attributes won't suffice). 71338b8dc3SIngo Weinhold 72338b8dc3SIngo Weinholdenvironment variables: 73338b8dc3SIngo Weinhold HAIKU_AR The static library archiver. Defaults to "ar". 74338b8dc3SIngo Weinhold HAIKU_CC The compiler. Defaults to "gcc". 75338b8dc3SIngo Weinhold HAIKU_LD The linker. Defaults to "ld". 76338b8dc3SIngo Weinhold HAIKU_OBJCOPY The objcopy to be used. Defaults to "objcopy". 77338b8dc3SIngo Weinhold HAIKU_RANLIB The static library indexer. Defaults to "ranlib". 78*77e84f21SIngo Weinhold HAIKU_YASM The yasm assembler (x86 only). 79338b8dc3SIngo Weinhold HAIKU_CPPFLAGS The preprocessor flags. Defaults to "". 80338b8dc3SIngo Weinhold HAIKU_CCFLAGS The C flags. Defaults to "". 81338b8dc3SIngo Weinhold HAIKU_CXXFLAGS The C++ flags. Defaults to "". 82338b8dc3SIngo Weinhold HAIKU_LDFLAGS The linker flags. Defaults to "". 83338b8dc3SIngo Weinhold HAIKU_ARFLAGS The flags passed to HAIKU_AR for archiving. 84338b8dc3SIngo Weinhold Defaults to "ru". 85338b8dc3SIngo Weinhold HAIKU_UNARFLAGS The flags passed to HAIKU_AR for unarchiving. 86338b8dc3SIngo Weinhold Defaults to "x". 8764f6da31SIngo Weinhold 8864f6da31SIngo WeinholdNon-standard output directories: 8964f6da31SIngo Weinhold By default all objects, build configuration, and other related files are 9064f6da31SIngo Weinhold stored in /path/to/haiku_source/generated. To store objects in a non-default 9164f6da31SIngo Weinhold location, run "../../relative/path/to/haiku_source/configure <options>" from 9264f6da31SIngo Weinhold within your non-default location. "jam [ options ] targets" can then be run 9364f6da31SIngo Weinhold directly inside your non-default location. Another option is to invoke "jam 9464f6da31SIngo Weinhold [ options ] targets" from within haiku_source. This can be accomplished by 9564f6da31SIngo Weinhold either "export HAIKU_OUTPUT_DIR=your non-default location" before invoking 9664f6da31SIngo Weinhold jam or by creating a symlink of haiku_source/generated pointing to your 9764f6da31SIngo Weinhold non-default location and running jam. 9864f6da31SIngo Weinhold 9964f6da31SIngo Weinhold 100022fa244SIngo WeinholdEOF 101022fa244SIngo Weinhold} 102022fa244SIngo Weinhold 103022fa244SIngo Weinhold# assertparam 104022fa244SIngo Weinhold# 105022fa244SIngo Weinhold# Checks whether at least one parameter is left. 106022fa244SIngo Weinhold# 107022fa244SIngo Weinholdassertparam() 108022fa244SIngo Weinhold{ 10920ab75e6SIngo Weinhold if [ $2 -lt 2 ]; then 110022fa244SIngo Weinhold echo $0: \`$1\': Parameter expected. 111022fa244SIngo Weinhold exit 1 112022fa244SIngo Weinhold fi 113022fa244SIngo Weinhold} 114022fa244SIngo Weinhold 11520ab75e6SIngo Weinhold# assertparams 11620ab75e6SIngo Weinhold# 11720ab75e6SIngo Weinhold# Checks whether at least a certain number of parameters is left. 11820ab75e6SIngo Weinhold# 11920ab75e6SIngo Weinholdassertparams() 12020ab75e6SIngo Weinhold{ 12120ab75e6SIngo Weinhold if [ $3 -le $2 ]; then 12220ab75e6SIngo Weinhold echo $0: \`$1\': Not enough parameters. 12320ab75e6SIngo Weinhold exit 1 12420ab75e6SIngo Weinhold fi 12520ab75e6SIngo Weinhold} 12620ab75e6SIngo Weinhold 12709c5682dSIngo Weinhold# standard_gcc_settings 12809c5682dSIngo Weinhold# 12909c5682dSIngo Weinhold# Sets the variables for a GCC platform. 13009c5682dSIngo Weinhold# 13109c5682dSIngo Weinholdstandard_gcc_settings() 13209c5682dSIngo Weinhold{ 13309c5682dSIngo Weinhold # PLATFORM_LINKLIBS 134338b8dc3SIngo Weinhold gcclib=`$HAIKU_CC -print-libgcc-file-name` 13509c5682dSIngo Weinhold gccdir=`dirname ${gcclib}` 1365b0f7b1bSOliver Tappe 137338b8dc3SIngo Weinhold haikuGCCVersion=`$HAIKU_CC -dumpversion` 138338b8dc3SIngo Weinhold haikuGCCMachine=`$HAIKU_CC -dumpmachine` 139338b8dc3SIngo Weinhold 140338b8dc3SIngo Weinhold HAIKU_GCC_LIB_DIR=${gccdir} 141338b8dc3SIngo Weinhold HAIKU_GCC_LIBGCC=${gccdir}/libgcc.a 142338b8dc3SIngo Weinhold HAIKU_GCC_GLUE_CODE="crtbegin.o crtend.o" 14328b5bc75SMichael Lotz HAIKU_GCC_HEADERS_DIR="${gccdir}/include 14428b5bc75SMichael Lotz ${gccdir}/include-fixed" 1455d978968SIngo Weinhold HAIKU_GCC_LIBGCC_OBJECTS=`$HAIKU_AR t ${HAIKU_GCC_LIBGCC} | grep -v eabi.o` 1465d978968SIngo Weinhold # Note: We filter out eabi.o. It's present in gcc's libgcc for PPC and 1475d978968SIngo Weinhold # neither needed nor wanted. 1488b5934c9SIngo Weinhold 1498b5934c9SIngo Weinhold case $haikuGCCVersion in 1508b5934c9SIngo Weinhold 4.*) 1515b0f7b1bSOliver Tappe # for gcc 4 we use the libstdc++ and libsupc++ that come with the 1525b0f7b1bSOliver Tappe # compiler 1538b5934c9SIngo Weinhold haikuStaticLibStdCxx=`$HAIKU_CC -print-file-name=libstdc++.a` 1548b5934c9SIngo Weinhold haikuSharedLibStdCxx=`$HAIKU_CC -print-file-name=libstdc++.so` 155c89fc875SIngo Weinhold haikuStaticLibSupCxx=`$HAIKU_CC -print-file-name=libsupc++.a` 156c89fc875SIngo Weinhold haikuSharedLibSupCxx=`$HAIKU_CC -print-file-name=libsupc++.so` 15714210488SMichael Lotz 15814210488SMichael Lotz local headers 15914210488SMichael Lotz if [ -d $gccdir/../../../../$haikuGCCMachine/include/c++/$haikuGCCVersion ]; then 16014210488SMichael Lotz headers=$gccdir/../../../../$haikuGCCMachine/include/c++/$haikuGCCVersion 16114210488SMichael Lotz else 16214210488SMichael Lotz headers=$gccdir/../../../../include/c++/$haikuGCCVersion 16314210488SMichael Lotz fi 16414210488SMichael Lotz 1658b5934c9SIngo Weinhold haikuCxxHeadersDir=$headers 16629ef597dSIngo Weinhold for d in $haikuGCCMachine backward ext; do 16729ef597dSIngo Weinhold # Note: We need the line break, otherwise the line might become 16829ef597dSIngo Weinhold # too long for jam (512 bytes max). 16929ef597dSIngo Weinhold haikuCxxHeadersDir="$haikuCxxHeadersDir 17029ef597dSIngo Weinhold $headers/$d" 1718b5934c9SIngo Weinhold done 172274b450aSMarcus Overhagen 173dad36002SMarcus Overhagen 174dad36002SMarcus Overhagen # when not building the crosscompiler, to use cpp headers from 175274b450aSMarcus Overhagen # tree first, but fallback to local C++ system headers (like <new>) 176dad36002SMarcus Overhagen # if [ "$buildCrossTools" = "" ]; then 177dad36002SMarcus Overhagen # haikuCxxHeadersDir="headers/cpp $haikuCxxHeadersDir" 178dad36002SMarcus Overhagen # fi 1798b5934c9SIngo Weinhold 1808b5934c9SIngo Weinhold if [ $haikuStaticLibStdCxx = libstdc++.a ]; then 1818b5934c9SIngo Weinhold haikuStaticLibStdCxx= 1828b5934c9SIngo Weinhold fi 1838b5934c9SIngo Weinhold if [ $haikuSharedLibStdCxx = libstdc++.so ]; then 1848b5934c9SIngo Weinhold haikuSharedLibStdCxx= 1858b5934c9SIngo Weinhold fi 186c89fc875SIngo Weinhold if [ $haikuStaticLibSupCxx = libsupc++.a ]; then 187c89fc875SIngo Weinhold haikuStaticLibSupCxx= 188c89fc875SIngo Weinhold fi 189c89fc875SIngo Weinhold if [ $haikuSharedLibSupCxx = libsupc++.so ]; then 190c89fc875SIngo Weinhold haikuSharedLibSupCxx= 191c89fc875SIngo Weinhold fi 1928b5934c9SIngo Weinhold ;; 1936cc8eecfSOliver Tappe 2.9*) 1945b0f7b1bSOliver Tappe # check for correct (most up-to-date) legacy compiler and complain 1955b0f7b1bSOliver Tappe # if an older one is installed 1965b0f7b1bSOliver Tappe if [ $haikuGCCVersion != $haikuRequiredLegacyGCCVersion ]; then 1975b0f7b1bSOliver Tappe echo "GCC version $haikuRequiredLegacyGCCVersion is required!"; 1985b0f7b1bSOliver Tappe echo "Please download it from www.haiku-os.org..."; 1995b0f7b1bSOliver Tappe exit 1; 2005b0f7b1bSOliver Tappe fi 2015b0f7b1bSOliver Tappe ;; 2028b5934c9SIngo Weinhold esac 20309c5682dSIngo Weinhold} 20409c5682dSIngo Weinhold 205338b8dc3SIngo Weinhold# set_default_value 206338b8dc3SIngo Weinhold# 207338b8dc3SIngo Weinhold# Set the value for a variable, if no value is set yet. 208338b8dc3SIngo Weinhold# 209338b8dc3SIngo Weinholdset_default_value() 210338b8dc3SIngo Weinhold{ 2110838a930SJérôme Duval eval "$1=\${$1-$2}" 212338b8dc3SIngo Weinhold} 213338b8dc3SIngo Weinhold 214338b8dc3SIngo Weinhold# get_build_tool_path 215338b8dc3SIngo Weinhold# 216338b8dc3SIngo Weinhold# Gets a usable absolute path of a build tool. 217338b8dc3SIngo Weinhold# 218338b8dc3SIngo Weinholdget_build_tool_path() 219338b8dc3SIngo Weinhold{ 220338b8dc3SIngo Weinhold local var="HAIKU_$1" 221338b8dc3SIngo Weinhold local tool=$2 222338b8dc3SIngo Weinhold local path="${crossToolsPrefix}$tool" 223338b8dc3SIngo Weinhold 224338b8dc3SIngo Weinhold if [ -f "$path" ]; then 225338b8dc3SIngo Weinhold # get absolute path 226a559f87aSFrançois Revol local oldPwd="`pwd`" 227a559f87aSFrançois Revol cd "`dirname "$path"`" 228a559f87aSFrançois Revol path="`pwd`/`basename "$path"`" 229338b8dc3SIngo Weinhold cd $oldPwd 230338b8dc3SIngo Weinhold else 231338b8dc3SIngo Weinhold which "$path" &> /dev/null || { 232338b8dc3SIngo Weinhold echo "Build tool \"$path\" not found." >&2 233338b8dc3SIngo Weinhold exit 1 234338b8dc3SIngo Weinhold } 235338b8dc3SIngo Weinhold fi 236338b8dc3SIngo Weinhold 237338b8dc3SIngo Weinhold eval "$var=$path" 238338b8dc3SIngo Weinhold} 239338b8dc3SIngo Weinhold 240338b8dc3SIngo Weinhold# get cwd and the source directory 241338b8dc3SIngo WeinholdcurrentDir=`pwd` 2426e7c6fe5SIngo Weinholdcd `dirname "$0"` 243338b8dc3SIngo WeinholdsourceDir=`pwd` 2446e7c6fe5SIngo Weinholdcd "$currentDir" 245338b8dc3SIngo Weinhold 246022fa244SIngo Weinhold# default parameter values 247022fa244SIngo Weinhold# 24852a38012Sejakowatzplatform=`uname` 2495abd9a46SIngo WeinholdplatformMachine=`uname -m` 250338b8dc3SIngo WeinholdhaikuGCCVersion= 2510da9c208SIngo WeinholdhaikuGCCMachine=i586-pc-haiku 2528b5934c9SIngo WeinholdhaikuStaticLibStdCxx= 2538b5934c9SIngo WeinholdhaikuSharedLibStdCxx= 254c89fc875SIngo WeinholdhaikuStaticLibSupCxx= 255c89fc875SIngo WeinholdhaikuSharedLibSupCxx= 2568b5934c9SIngo WeinholdhaikuCxxHeadersDir= 257db63fe67SAxel DörflerhostGCCVersion=`gcc -dumpversion` 2585abd9a46SIngo WeinholdbochsDebug=0 2595abd9a46SIngo WeinholdincludeGPLAddOns=0 2605abd9a46SIngo Weinholdinclude3rdParty=0 2615abd9a46SIngo WeinholdenableMultiuser=0 262a66c32ddSIngo WeinholddistroCompatibility=default 26362339647SAxel Dörflertarget=haiku 264*77e84f21SIngo WeinholdtargetArch=x86 2655abd9a46SIngo WeinholduseGCCPipe=0 2665abd9a46SIngo Weinholduse32bit=0 2675abd9a46SIngo WeinholduseXattr=0 268338b8dc3SIngo WeinholdcrossToolsPrefix= 269338b8dc3SIngo WeinholdbuildCrossTools= 27029ef597dSIngo WeinholdbuildCrossToolsScript="$sourceDir/build/scripts/build_cross_tools" 27120ab75e6SIngo WeinholdbuildCrossToolsMachine= 2729b0dd528SIngo WeinholdalternativeGCCOutputDir= 273292e63bfSIngo WeinholdaddAlternativeGCCLibs= 274338b8dc3SIngo Weinhold 27583d554a7SIngo WeinholdhaikuRequiredLegacyGCCVersion="2.95.3-haiku-081024" 276a559f87aSFrançois Revolexport haikuRequiredLegacyGCCVersion 277af4bf973SOliver Tappe # version of legacy gcc required to build haiku 278af4bf973SOliver Tappe 279338b8dc3SIngo Weinholdset_default_value HAIKU_AR ar 280338b8dc3SIngo Weinholdset_default_value HAIKU_CC gcc 281338b8dc3SIngo Weinholdset_default_value HAIKU_LD ld 282338b8dc3SIngo Weinholdset_default_value HAIKU_OBJCOPY objcopy 283338b8dc3SIngo Weinholdset_default_value HAIKU_RANLIB ranlib 284*77e84f21SIngo Weinholdset_default_value HAIKU_YASM yasm 285338b8dc3SIngo Weinholdset_default_value HAIKU_CPPFLAGS "" 286338b8dc3SIngo Weinholdset_default_value HAIKU_CCFLAGS "" 287338b8dc3SIngo Weinholdset_default_value HAIKU_CXXFLAGS "" 288338b8dc3SIngo Weinholdset_default_value HAIKU_LDFLAGS "" 289338b8dc3SIngo Weinholdset_default_value HAIKU_ARFLAGS ru 290338b8dc3SIngo Weinholdset_default_value HAIKU_UNARFLAGS x 29162339647SAxel Dörfler 292022fa244SIngo Weinhold# parse parameters 293022fa244SIngo Weinhold# 29420ab75e6SIngo Weinholdwhile [ $# -gt 0 ] ; do 295022fa244SIngo Weinhold case "$1" in 2965abd9a46SIngo Weinhold --bochs-debug) bochsDebug=1; shift 1;; 297a5b60fa8SOliver Tappe --build-cross-tools) assertparam "$1" $#; buildCrossTools=$2; shift 2;; 2989b0dd528SIngo Weinhold --build-cross-tools-gcc4) 2999b0dd528SIngo Weinhold assertparams "$1" 2 $# 3009b0dd528SIngo Weinhold buildCrossTools=$3 3019b0dd528SIngo Weinhold buildCrossToolsScript="${buildCrossToolsScript}_gcc4" 30220ab75e6SIngo Weinhold case "$2" in 30320ab75e6SIngo Weinhold x86) haikuGCCMachine=i586-pc-haiku;; 304*77e84f21SIngo Weinhold ppc) haikuGCCMachine=powerpc-apple-haiku; targetArch=ppc;; 305*77e84f21SIngo Weinhold m68k) haikuGCCMachine=m68k-unknown-haiku; targetArch=m86k;; 306*77e84f21SIngo Weinhold arm) haikuGCCMachine=arm-unknown-haiku; targetArch=arm;; 307*77e84f21SIngo Weinhold mipsel) haikuGCCMachine=mipsel-unknown-haiku; targetArch=mips;; 30820ab75e6SIngo Weinhold *) echo "Unsupported target architecture: $2" 30920ab75e6SIngo Weinhold exit 1;; 31020ab75e6SIngo Weinhold esac 311a5b60fa8SOliver Tappe buildCrossToolsMachine=$haikuGCCMachine 3129b0dd528SIngo Weinhold shift 3 3139b0dd528SIngo Weinhold ;; 3149b0dd528SIngo Weinhold --alternative-gcc-output-dir) 3159b0dd528SIngo Weinhold assertparam "$1" $# 3169b0dd528SIngo Weinhold cd $2 || exit 1 3179b0dd528SIngo Weinhold alternativeGCCOutputDir=`pwd` 318292e63bfSIngo Weinhold addAlternativeGCCLibs=1 3199b0dd528SIngo Weinhold cd $currentDir 3209b0dd528SIngo Weinhold shift 2 3219b0dd528SIngo Weinhold ;; 3229b0dd528SIngo Weinhold --cross-tools-prefix) 3239b0dd528SIngo Weinhold assertparam "$1" $# 3249b0dd528SIngo Weinhold crossToolsPrefix=$2 3259b0dd528SIngo Weinhold shift 2 3269b0dd528SIngo Weinhold ;; 327022fa244SIngo Weinhold --help | -h) usage; exit 0;; 3285abd9a46SIngo Weinhold --include-gpl-addons) includeGPLAddOns=1; shift 1;; 3295abd9a46SIngo Weinhold --include-3rdparty) include3rdParty=1; shift 1;; 3305abd9a46SIngo Weinhold --enable-multiuser) enableMultiuser=1; shift 1;; 331a66c32ddSIngo Weinhold --distro-compatibility) 3329b0dd528SIngo Weinhold assertparam "$1" $# 3339b0dd528SIngo Weinhold distroCompatibility=$2 334a66c32ddSIngo Weinhold case "$distroCompatibility" in 335a66c32ddSIngo Weinhold official) ;; 336a66c32ddSIngo Weinhold compatible) ;; 337a66c32ddSIngo Weinhold default) ;; 338a66c32ddSIngo Weinhold *) echo "Invalid distro compatibility" \ 339a66c32ddSIngo Weinhold "level: $distroCompatibility" 340a66c32ddSIngo Weinhold exit 1;; 341a66c32ddSIngo Weinhold esac 3429b0dd528SIngo Weinhold shift 2 3439b0dd528SIngo Weinhold ;; 344eccc7665SIngo Weinhold --target=*) target=`echo $1 | cut -d'=' -f2-`; shift 1;; 3455abd9a46SIngo Weinhold --use-gcc-pipe) useGCCPipe=1; shift 1;; 3465abd9a46SIngo Weinhold --use-32bit) use32bit=1; shift 1;; 3475abd9a46SIngo Weinhold --use-xattr) useXattr=1; shift 1;; 348022fa244SIngo Weinhold *) echo Invalid argument: \`$1\'; exit 1;; 349022fa244SIngo Weinhold esac 350022fa244SIngo Weinholddone 351022fa244SIngo Weinhold 352308c212cSIngo Weinhold# check for a 64bit platform 3535abd9a46SIngo Weinholdcase "${platformMachine}" in 3545abd9a46SIngo Weinhold x86_64) use32bit=1 ;; 3555abd9a46SIngo Weinhold *) echo Assuming 32-bit machine: "$platformMachine" 3565abd9a46SIngo Weinhold use32bit=0 ;; 357308c212cSIngo Weinholdesac 358308c212cSIngo Weinhold 3590df3cc9cSIngo Weinhold# detect the build platform 360338b8dc3SIngo Weinholdcase "${platform}" in 3610df3cc9cSIngo Weinhold BeOS) revision=`uname -r` 3620df3cc9cSIngo Weinhold case "$revision" in 36314998c8bSIngo Weinhold 6.*) buildPlatform=dano ;; 3640df3cc9cSIngo Weinhold 5.1) buildPlatform=dano ;; 3650df3cc9cSIngo Weinhold 5.0.4) buildPlatform=bone ;; 3660df3cc9cSIngo Weinhold 5.0*) buildPlatform=r5 ;; 3670df3cc9cSIngo Weinhold *) echo Unknown BeOS version: $revision 3680df3cc9cSIngo Weinhold exit 1 ;; 3690df3cc9cSIngo Weinhold esac 3700df3cc9cSIngo Weinhold ;; 3716dcd0ccfSIngo Weinhold Darwin) buildPlatform=darwin ;; 372308c212cSIngo Weinhold FreeBSD) buildPlatform=freebsd 3735abd9a46SIngo Weinhold if [ "$use32bit" = 1 ] ; then 3745abd9a46SIngo Weinhold echo Unsupported platform: FreeBSD ${platformMachine} 375308c212cSIngo Weinhold exit 1 376308c212cSIngo Weinhold fi ;; 377da0f9ae0SIngo Weinhold Haiku) buildPlatform=haiku_host ;; 378da0f9ae0SIngo Weinhold Linux) buildPlatform=linux ;; 379ff1beff8SFrançois Revol OpenBSD) buildPlatform=openbsd ;; 380a559f87aSFrançois Revol SunOS) buildPlatform=sunos ;; 381e688a433SMaurice Kalinowski CYGWIN_NT-*) buildPlatform=cygwin ;; 382338b8dc3SIngo Weinhold *) echo Unsupported platform: ${platform} 3834cbe4925SAxel Dörfler exit 1 ;; 3844cbe4925SAxel Dörfleresac 38552a38012Sejakowatz 386*77e84f21SIngo Weinhold# check yasm version 387*77e84f21SIngo Weinholdif [ $targetArch = "x86" ]; then 388*77e84f21SIngo Weinhold $HAIKU_YASM --version > /dev/null || { 389*77e84f21SIngo Weinhold echo "The yasm assembler version 0.7.2 or later must be installed." 390*77e84f21SIngo Weinhold echo "Download from: http://www.tortall.net/projects/yasm/wiki/Download" 391*77e84f21SIngo Weinhold exit 1 392*77e84f21SIngo Weinhold } 393*77e84f21SIngo Weinhold 394*77e84f21SIngo Weinhold set -- $($HAIKU_YASM --version | head -n 1) 395*77e84f21SIngo Weinhold versionOK=0 396*77e84f21SIngo Weinhold case $2 in 397*77e84f21SIngo Weinhold 0.[0-6].*) echo match1;; 398*77e84f21SIngo Weinhold 0.7.[0-1].*) echo match2;; 399*77e84f21SIngo Weinhold *) versionOK=1 ;; 400*77e84f21SIngo Weinhold esac 401*77e84f21SIngo Weinhold 402*77e84f21SIngo Weinhold if [ $versionOK = 0 ]; then 403*77e84f21SIngo Weinhold echo "The yasm assembler version 0.7.2 or later must be installed." 404*77e84f21SIngo Weinhold echo "The installed version is $2." 405*77e84f21SIngo Weinhold echo "Download from: http://www.tortall.net/projects/yasm/wiki/Download" 406*77e84f21SIngo Weinhold exit 1 407*77e84f21SIngo Weinhold fi 408*77e84f21SIngo Weinholdfi 409*77e84f21SIngo Weinhold 410338b8dc3SIngo Weinhold# create output directory 411338b8dc3SIngo Weinholdif [ "$currentDir" = "$sourceDir" ]; then 412338b8dc3SIngo Weinhold outputDir=$currentDir/generated 413338b8dc3SIngo Weinholdelse 414338b8dc3SIngo Weinhold outputDir=$currentDir 415338b8dc3SIngo Weinholdfi 4166e7c6fe5SIngo WeinholdbuildOutputDir="$outputDir/build" 4176e7c6fe5SIngo WeinholdbuildAttributesDir="$outputDir/attributes" 4186e7c6fe5SIngo Weinholdmkdir -p "$buildOutputDir" || exit 1 419338b8dc3SIngo Weinhold 420338b8dc3SIngo Weinhold# build cross tools from sources 421338b8dc3SIngo Weinholdif [ -n "$buildCrossTools" ]; then 42220ab75e6SIngo Weinhold "$buildCrossToolsScript" $buildCrossToolsMachine "$sourceDir" \ 4236e7c6fe5SIngo Weinhold "$buildCrossTools" "$outputDir" || exit 1 424a5b60fa8SOliver Tappe crossToolsPrefix="$outputDir/cross-tools/bin/${haikuGCCMachine}-" 425338b8dc3SIngo Weinholdfi 426338b8dc3SIngo Weinhold 427338b8dc3SIngo Weinhold# cross tools 428338b8dc3SIngo Weinholdif [ -n "$crossToolsPrefix" ]; then 429338b8dc3SIngo Weinhold get_build_tool_path AR ar 430338b8dc3SIngo Weinhold get_build_tool_path CC gcc 431338b8dc3SIngo Weinhold get_build_tool_path LD ld 432338b8dc3SIngo Weinhold get_build_tool_path OBJCOPY objcopy 433338b8dc3SIngo Weinhold get_build_tool_path RANLIB ranlib 434338b8dc3SIngo Weinholdfi 435338b8dc3SIngo Weinhold 436338b8dc3SIngo Weinhold# prepare gcc settings 437338b8dc3SIngo Weinholdstandard_gcc_settings 438338b8dc3SIngo Weinhold 439eedc3d0bSIngo Weinhold# check whether the Haiku compiler really targets Haiku or BeOS 440eedc3d0bSIngo Weinholdcase "$haikuGCCMachine" in 441eedc3d0bSIngo Weinhold *-*-haiku) ;; 442eedc3d0bSIngo Weinhold *-*-beos) ;; 443eedc3d0bSIngo Weinhold *) echo The compiler specified as Haiku target compiler is not a valid \ 444eedc3d0bSIngo Weinhold Haiku cross-compiler. Please see ReadMe.cross-compile. >&2 445eedc3d0bSIngo Weinhold echo compiler: $HAIKU_CC 446eedc3d0bSIngo Weinhold echo compiler is configured for target: $haikuGCCMachine 447eedc3d0bSIngo Weinhold exit 1 ;; 448eedc3d0bSIngo Weinholdesac 449eedc3d0bSIngo Weinhold 45052a38012Sejakowatz# Generate BuildConfig 4516e7c6fe5SIngo Weinholdcat << EOF > "$buildOutputDir/BuildConfig" 45252a38012Sejakowatz# BuildConfig 45352a38012Sejakowatz# Note: This file has been automatically generated by configure. 45452a38012Sejakowatz 4556e7c6fe5SIngo WeinholdTARGET_PLATFORM ?= "${target}" ; 4566e7c6fe5SIngo WeinholdHOST_PLATFORM ?= "${buildPlatform}" ; 457338b8dc3SIngo Weinhold 4585abd9a46SIngo WeinholdBOCHS_DEBUG_HACK ?= "${bochsDebug}" ; 4595abd9a46SIngo WeinholdINCLUDE_GPL_ADDONS ?= "${includeGPLAddOns}" ; 4605abd9a46SIngo WeinholdHAIKU_INCLUDE_3RDPARTY ?= "${include3rdParty}" ; 4615abd9a46SIngo WeinholdHAIKU_ENABLE_MULTIUSER ?= "${enableMultiuser}" ; 462a66c32ddSIngo WeinholdHAIKU_DISTRO_COMPATIBILITY ?= "${distroCompatibility}" ; 4635abd9a46SIngo WeinholdHAIKU_USE_GCC_PIPE ?= "${useGCCPipe}" ; 4645abd9a46SIngo WeinholdHAIKU_HOST_USE_32BIT ?= "${use32bit}" ; 4655abd9a46SIngo WeinholdHAIKU_HOST_USE_XATTR ?= "${useXattr}" ; 4669b0dd528SIngo WeinholdHAIKU_ALTERNATIVE_GCC_OUTPUT_DIR ?= ${alternativeGCCOutputDir} ; 467292e63bfSIngo WeinholdHAIKU_ADD_ALTERNATIVE_GCC_LIBS ?= ${addAlternativeGCCLibs} ; 468eccc7665SIngo Weinhold 469338b8dc3SIngo WeinholdHAIKU_GCC_RAW_VERSION ?= ${haikuGCCVersion} ; 470338b8dc3SIngo WeinholdHAIKU_GCC_MACHINE ?= ${haikuGCCMachine} ; 471338b8dc3SIngo WeinholdHAIKU_GCC_LIB_DIR ?= ${HAIKU_GCC_LIB_DIR} ; 472338b8dc3SIngo WeinholdHAIKU_GCC_HEADERS_DIR ?= ${HAIKU_GCC_HEADERS_DIR} ; 473338b8dc3SIngo WeinholdHAIKU_GCC_LIBGCC ?= ${HAIKU_GCC_LIBGCC} ; 474338b8dc3SIngo Weinhold 4758b5934c9SIngo WeinholdHAIKU_STATIC_LIBSTDC++ ?= ${haikuStaticLibStdCxx} ; 4768b5934c9SIngo WeinholdHAIKU_SHARED_LIBSTDC++ ?= ${haikuSharedLibStdCxx} ; 477c89fc875SIngo WeinholdHAIKU_STATIC_LIBSUPC++ ?= ${haikuStaticLibSupCxx} ; 478c89fc875SIngo WeinholdHAIKU_SHARED_LIBSUPC++ ?= ${haikuSharedLibSupCxx} ; 4798b5934c9SIngo WeinholdHAIKU_C++_HEADERS_DIR ?= ${haikuCxxHeadersDir} ; 4808b5934c9SIngo Weinhold 481338b8dc3SIngo WeinholdHAIKU_BUILD_ATTRIBUTES_DIR ?= ${buildAttributesDir} ; 482338b8dc3SIngo Weinhold 483338b8dc3SIngo WeinholdHAIKU_AR ?= ${HAIKU_AR} ; 484338b8dc3SIngo WeinholdHAIKU_CC ?= ${HAIKU_CC} ; 485338b8dc3SIngo WeinholdHAIKU_LD ?= ${HAIKU_LD} ; 486338b8dc3SIngo WeinholdHAIKU_OBJCOPY ?= ${HAIKU_OBJCOPY} ; 487338b8dc3SIngo WeinholdHAIKU_RANLIB ?= ${HAIKU_RANLIB} ; 488*77e84f21SIngo WeinholdHAIKU_YASM ?= ${HAIKU_YASM} ; 489338b8dc3SIngo WeinholdHAIKU_CPPFLAGS ?= ${HAIKU_CPPFLAGS} ; 490338b8dc3SIngo WeinholdHAIKU_CCFLAGS ?= ${HAIKU_CCFLAGS} ; 491338b8dc3SIngo WeinholdHAIKU_CXXFLAGS ?= ${HAIKU_CXXFLAGS} ; 492338b8dc3SIngo WeinholdHAIKU_LDFLAGS ?= ${HAIKU_LDFLAGS} ; 493338b8dc3SIngo WeinholdHAIKU_ARFLAGS ?= ${HAIKU_ARFLAGS} ; 494338b8dc3SIngo WeinholdHAIKU_UNARFLAGS ?= ${HAIKU_UNARFLAGS} ; 495338b8dc3SIngo Weinhold 4968b5934c9SIngo WeinholdHOST_GCC_RAW_VERSION ?= ${hostGCCVersion} ; 4978b5934c9SIngo Weinhold 498c4786ea6SlilloEOF 499c4786ea6Slillo 500b1e5b60cSAxel Dörfler# Libgcc.a objects 501b1e5b60cSAxel Dörfler 5026e7c6fe5SIngo Weinholdcat << EOF > "$buildOutputDir/libgccObjects" 503b1e5b60cSAxel Dörfler# libgcc.a objects to be linked against libroot.so 504b1e5b60cSAxel Dörfler# Note: This file has been automatically generated by configure. 505b1e5b60cSAxel Dörfler 506338b8dc3SIngo WeinholdHAIKU_GCC_LIBGCC_OBJECTS ?= ${HAIKU_GCC_LIBGCC_OBJECTS} ; 507b1e5b60cSAxel DörflerEOF 508b1e5b60cSAxel Dörfler 5094c74bde8SJérôme Duval# Generate Timezones binaries bindings 5104c74bde8SJérôme Duval 511338b8dc3SIngo WeinholdtimezoneSources="africa antarctica asia australasia europe northamerica 512338b8dc3SIngo Weinhold southamerica pacificnew etcetera factory backward" 513338b8dc3SIngo Weinhold 5146e7c6fe5SIngo Weinholdcat << EOF > "$buildOutputDir/Timezones" 515b1e5b60cSAxel Dörfler# Timezones used for the build 516b1e5b60cSAxel Dörfler# Note: This file has been automatically generated by configure. 517b1e5b60cSAxel Dörfler 518338b8dc3SIngo WeinholdHAIKU_TIME_ZONE_SOURCES = ${timezoneSources} ; 519338b8dc3SIngo Weinhold 520b1e5b60cSAxel DörflerEOF 521b1e5b60cSAxel Dörfler 522338b8dc3SIngo Weinholdfor source in ${timezoneSources}; do 523338b8dc3SIngo Weinhold f=$sourceDir/src/data/etc/timezones/$source 5244c74bde8SJérôme Duval 5256e7c6fe5SIngo WeinholdTZOBJECTS=`gawk '/^Zone/ { print $2 } /^Link/ { print $3 } ' "$f" ` 5264c74bde8SJérôme Duval 5276e7c6fe5SIngo Weinholdcat << EOF >> "$buildOutputDir/Timezones" 528338b8dc3SIngo WeinholdTZ_OBJECTS on <timezone-source>${source} ?= $TZOBJECTS ; 5294c74bde8SJérôme DuvalEOF 5304c74bde8SJérôme Duvaldone 531338b8dc3SIngo Weinhold 5329b0dd528SIngo Weinhold# Generate a boot strap Jamfile in the output directory. 533338b8dc3SIngo Weinhold 534338b8dc3SIngo Weinholdcat << EOF > $outputDir/Jamfile 535338b8dc3SIngo Weinhold# automatically generated Jamfile 536338b8dc3SIngo Weinhold 537338b8dc3SIngo WeinholdHAIKU_TOP = ${sourceDir} ; 538338b8dc3SIngo WeinholdHAIKU_OUTPUT_DIR = ${outputDir} ; 539338b8dc3SIngo Weinhold 540338b8dc3SIngo Weinholdinclude [ FDirName \$(HAIKU_TOP) Jamfile ] ; 541338b8dc3SIngo Weinhold 542338b8dc3SIngo WeinholdEOF 543