📄 crosstool-0.38-nptl-schaefer.patch
字号:
Message-ID: <42F5D6D7.2040902@gmx.de>Date: Sun, 07 Aug 2005 11:39:35 +0200From: Peter Schaefer <peter.schaefer@gmx.de>To: crossgcc@sources.redhat.comSubject: Re: crosstool-0.38, ppc860, NPTL and gcc4.0.1References: <42EFDD76.60902@gmx.de> <42F137B9.1020101@gmx.de>In-Reply-To: <42F137B9.1020101@gmx.de>Hello list,again replying to myself (*sigh*)... I was able to compilethe toolchain for ppc860, NPTL and gcc4.0.1-libc-2.3.5with the following patch to crosstool-0.38.It's basically the NPTL-patch rediffed against 0.38 with anadded patch for libiberty path issues in patches/gcc-4.0.1.In addition see the if-condition in line 864 of the patch, herei added configuration & build of libcpp.Beware: I haven't tested the toolchain yet!Best regards, Peterdiff -urN crosstool-0.38.orig/crosstool.sh crosstool-0.38/crosstool.sh--- crosstool-0.38.orig/crosstool.sh 2005-07-21 19:58:19.000000000 +0200+++ crosstool-0.38/crosstool.sh 2005-08-07 11:34:34.551302360 +0200@@ -70,23 +70,28 @@ test -z "$BUILD" && abort "bug: BUILD not set?!" if test -z "${GLIBC_ADDON_OPTIONS}"; then- echo "GLIBC_ADDON_OPTIONS not set, so guessing addons from GLIBCTHREADS_FILENAME and GLIBCCRYPT_FILENAME"- # this is lame, need to fix this for nptl later?- # (nptl is an addon, but it's shipped in the main tarball)+ echo "GLIBC_ADDON_OPTIONS not set" GLIBC_ADDON_OPTIONS="="- case "${GLIBCTHREADS_FILENAME}" in- *linuxthreads*) GLIBC_ADDON_OPTIONS="${GLIBC_ADDON_OPTIONS}linuxthreads," ;;- esac+ if test '!' -z ${GLIBC_ADDON_LINUXTHREADS}; then+ GLIBC_ADDON_OPTIONS="${GLIBC_ADDON_OPTIONS}linuxthreads,"+ elif test '!' -z ${GLIBC_ADDON_NPTL}; then+ GLIBC_ADDON_OPTIONS="${GLIBC_ADDON_OPTIONS}nptl,"+ fi # crypt is only an addon for glibc-2.1.x test -z "${GLIBCCRYPT_FILENAME}" || GLIBC_ADDON_OPTIONS="${GLIBC_ADDON_OPTIONS}crypt," fi +if test '!' -z "${GLIBC_ADDON_NPTL}"; then+ GLIBC_EXTRA_CONFIG="--with-tls --with-__thread ${GLIBC_EXTRA_CONFIG}"+ GLIBC_MIN_KERNEL=2.6.4+else+ GLIBC_EXTRA_CONFIG="--without-tls --without-__thread ${GLIBC_EXTRA_CONFIG}"+ GLIBC_MIN_KERNEL=2.4.3+fi+ # One is forbidden test -z "${LD_LIBRARY_PATH}" || abort "glibc refuses to build if LD_LIBRARY_PATH is set. Please unset it before running this script." -# And one is derived.-GLIBCTHREADS_FILENAME=`echo $GLIBC_DIR | sed 's/glibc-/glibc-linuxthreads-/'`- # Check for a few prerequisites that have tripped people up. awk '/x/' < /dev/null || abort "You need awk to build a toolchain." test -z "${CFLAGS}" || abort "Don't set CFLAGS, it screws up the build"@@ -442,13 +447,47 @@ # http://sourceware.org/ml/crossgcc/2005-05/msg00168.html cp misc/syscall-list.h $HEADERDIR/bits/syscall.h + if test '!' -z "${GLIBC_ADDON_NPTL}"; then + # To build gcc with thread support requires real pthread headers. These+ # will have to manually be copied from under the tree of the desired+ # target pthread implementation.+ cp ${GLIBC_DIR}/nptl/sysdeps/pthread/pthread.h $HEADERDIR/pthread.h+ pthreadtypes_h=nptl/sysdeps/unix/sysv/linux/${ARCH}/bits/pthreadtypes.h++ # On s390, powerpc and sparc we also require bits/wordsize.h.+ case $TARGET in+ sparc* | s390* | powerpc* )+ case $TARGET in+ sparc64* ) wordsize_h=sysdeps/sparc/sparc64/bits/wordsize.h+ pthreadtypes_h=nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h+ ;;+ sparc* ) wordsize_h=sysdeps/sparc/sparc32/bits/wordsize.h + pthreadtypes_h=nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h+ ;;+ s390x* ) wordsize_h=sysdeps/s390/s390x/bits/wordsize.h + ;;+ s390* ) wordsize_h=sysdeps/s390/s390/bits/wordsize.h + ;;+ powerpc64* ) wordsize_h=sysdeps/powerpc/powerpc64/bits/wordsize.h+ pthreadtypes_h=nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h+ ;;+ powerpc* ) wordsize_h=sysdeps/powerpc/powerpc32/bits/wordsize.h+ pthreadtypes_h=nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h+ ;;+ esac+ test ! -f $HEADERDIR/bits/wordsize.h && cp ${GLIBC_DIR}/${wordsize_h} $HEADERDIR/bits/wordsize.h+ cp ${GLIBC_DIR}/${pthreadtypes_h} $HEADERDIR/bits/pthreadtypes.h+ ;;+ esac+ fi # GLIBC_ADDONS_NPTL+ cd .. fi #----------------------------------------------------------echo "Build gcc-core (just enough to build glibc)"+echo "Build gcc-core w/o shared libgcc (just enough to build glibc starfiles)" -mkdir -p build-gcc-core; cd build-gcc-core+mkdir -p build-gcc-core-static; cd build-gcc-core-static echo Copy headers to install area of bootstrap gcc, so it can build libgcc2 mkdir -p $CORE_PREFIX/$TARGET/include@@ -480,8 +519,124 @@ logresult gcc-core $CORE_PREFIX/bin/${TARGET}-gcc${EXEEXT} +# Following extra steps required for building an NPTL enabled glibc.+if test '!' -z "${GLIBC_ADDON_NPTL}"; then+ #---------------------------------------------------------+ echo "Build glibc startfiles (required for shared libgcc)"++ mkdir -p build-glibc-startfiles; cd build-glibc-startfiles++ # sh4 really needs to set configparms as of gcc-3.4/glibc-2.3.2+ # note: this is awkward, doesn't work well if you need more than one line in configparms+ echo ${GLIBC_CONFIGPARMS} > configparms++ echo "libc_cv_forced_unwind=yes" > config.cache+ echo "libc_cv_c_cleanup=yes" >> config.cache+ # this here is moot, currently you cannot build nptl for sparc64+ case ${TARGET} in+ sparc64* ) echo "libc_cv_sparc64_tls=yes" >> config.cache ;;+ esac++ if test '!' -f Makefile; then+ # Configure with --prefix the way we want it on the target...+ # There are a whole lot of settings here. You'll probably want+ # to read up on what they all mean, and customize a bit.+ # e.g. I picked --enable-kernel=2.4.3 here just because it's the kernel Bill + # used in his example gcc2.95.3 script. That means some backwards compatibility + # stuff is turned on in glibc that you may not need if you're using a newer kernel.+ # Compare these options with the ones used when installing the glibc headers above - they're different.+ # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" + # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. + # Set BUILD_CC, or you won't be able to build datafiles+ # Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs++ BUILD_CC=gcc CFLAGS="$TARGET_CFLAGS" CC="${TARGET}-gcc $GLIBC_EXTRA_CC_ARGS" \+ AR=${TARGET}-ar RANLIB=${TARGET}-ranlib \+ ${GLIBC_DIR}/configure --prefix=/usr \+ --build=$BUILD --host=$TARGET \+ ${GLIBC_EXTRA_CONFIG} \+ --enable-kernel=${GLIBC_MIN_KERNEL} \+ --without-cvs --disable-profile --disable-debug --without-gd \+ $SHARED_MODE \+ --enable-add-ons${GLIBC_ADDON_OPTIONS} --with-headers=$HEADERDIR \+ --cache-file=config.cache+ fi++ #TODO: should check whether slibdir has been set in configparms to */lib64+ # and copy the startfiles into the appropriate libdir.+ make csu/subdir_lib+ + test -z "${USE_SYSROOT}" &&+ cp -fp csu/crt[1in].o ${SYSROOT}/lib/ ||+ cp -fp csu/crt[1in].o ${SYSROOT}/usr/lib/ ++ cd ..++ #---------------------------------------------------------+ echo "Build gcc-core w shared libgcc"++ mkdir -p build-gcc-core-shared; cd build-gcc-core-shared++ # Use --with-local-prefix so older gccs don't look in /usr/local (http://gcc.gnu.org/PR10532)++ if test '!' -f Makefile; then+ ${GCC_DIR}/configure $CANADIAN_BUILD --target=$TARGET --host=$GCC_HOST --prefix=$PREFIX \+ --with-local-prefix=${SYSROOT} \+ --disable-multilib \+ ${GCC_EXTRA_CONFIG} \+ ${GCC_SYSROOT_ARG_CORE} \+ --disable-nls \+ --enable-symvers=gnu \+ --enable-__cxa_atexit \+ --enable-languages=c \+ --enable-shared+ fi++ # HACK: we need to override SHLIB_LC from gcc/config/t-slibgcc-elf-ver or+ # gcc/config/t-libunwind so -lc is removed from the link for + # libgcc_s.so, as we do not have a target -lc yet.+ # This is not as ugly as it appears to be ;-) All symbols get resolved+ # during the glibc build, and we provide a proper libgcc_s.so for the+ # cross toolchain during the final gcc build.+ #+ # As we cannot modify the source tree, nor override SHLIB_LC itself+ # during configure or make, we have to edit the resultant + # gcc/libgcc.mk itself to remove -lc from the link.+ # This causes us to have to jump through some hoops...+ #+ # To produce libgcc.mk to edit we firstly require libiberty.a,+ # so we configure then build it.+ # Next we have to configure gcc, create libgcc.mk then edit it...+ # So much easier if we just edit the source tree, but hey...+ if test '!' -f ${GCC_DIR}/gcc/BASE-VER; then+ make configure-libiberty+ make -C libiberty libiberty.a+ make configure-gcc+ make configure-libcpp+ make all-libcpp+ else+ make configure-gcc+ make configure-libcpp+ make configure-build-libiberty+ make all-libcpp+ make all-build-libiberty+ fi+ make -C gcc libgcc.mk++ if test '!' -f gcc/libgcc.mk-ORIG ; then cp -p gcc/libgcc.mk gcc/libgcc.mk-ORIG; fi+ sed 's@-lc@@g' < gcc/libgcc.mk-ORIG > gcc/libgcc.mk++ test "$CANADIAN_BUILD" = "" || make $PARALLELMFLAGS all-build-libiberty || true+ make $PARALLELMFLAGS all-gcc + make install-gcc++ cd ..++ test -x ${PREFIX}/bin/${TARGET}-gcc || abort Build failed during gcc-core ++fi # GLIBC_ADDON_NPTL #----------------------------------------------------------echo Build glibc and linuxthreads+echo Build glibc mkdir -p build-glibc; cd build-glibc @@ -489,6 +644,16 @@ # note: this is awkward, doesn't work well if you need more than one line in configparms echo ${GLIBC_CONFIGPARMS} > configparms +if test '!' -z "${GLIBC_ADDON_NPTL}"; then+ # Following configure tests fail while cross-compiling+ echo "libc_cv_forced_unwind=yes" > config.cache+ echo "libc_cv_c_cleanup=yes" >> config.cache+ # The following is moot, currently you cannot build nptl for sparc64+ case ${TARGET} in+ sparc64* ) echo "libc_cv_sparc64_tls=yes" >> config.cache ;;+ esac+fi # GLIBC_ADDON_NPTL+ if test '!' -f Makefile; then # Configure with --prefix the way we want it on the target... # There are a whole lot of settings here. You'll probably want@@ -507,11 +672,11 @@ ${GLIBC_DIR}/configure --prefix=/usr \ --build=$BUILD --host=$TARGET \ ${GLIBC_EXTRA_CONFIG} \- --enable-kernel=2.4.3 \+ --enable-kernel=${GLIBC_MIN_KERNEL} \ --without-cvs --disable-profile --disable-debug --without-gd \- --without-tls --without-__thread \ $SHARED_MODE \- --enable-add-ons${GLIBC_ADDON_OPTIONS} --with-headers=$HEADERDIR+ --enable-add-ons${GLIBC_ADDON_OPTIONS} --with-headers=$HEADERDIR \+ --cache-file=config.cache fi if grep -l '^install-lib-all:' ${GLIBC_DIR}/Makerules > /dev/null; thendiff -urN crosstool-0.38.orig/patches/gcc-4.0.1/libiberty.patch crosstool-0.38/patches/gcc-4.0.1/libiberty.patch--- crosstool-0.38.orig/patches/gcc-4.0.1/libiberty.patch 1970-01-01 01:00:00.000000000 +0100+++ crosstool-0.38/patches/gcc-4.0.1/libiberty.patch 2005-08-05 22:16:02.000000000 +0200@@ -0,0 +1,11 @@+--- gcc-4.0.1.orig/gcc/Makefile.in 2005-04-04 21:45:13.000000000 +0200++++ gcc-4.0.1/gcc/Makefile.in 2005-08-05 22:12:56.544994408 +0200+@@ -757,7 +757,7 @@+ + # Build and host support libraries.+ LIBIBERTY = ../libiberty/libiberty.a+-BUILD_LIBIBERTY = ../$(build_subdir)/libiberty/libiberty.a++BUILD_LIBIBERTY = ../libiberty/libiberty.a+ + # Dependencies on the intl and portability libraries.+ LIBDEPS= $(CPPLIB) $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -