# old stage 2 based on a broken stage 1, so carefull what to pick # into the next version.. # common issues ############### TODOS: in linux package makepkg https://github.com/libarchive/libarchive/issues/411 https://rubenerd.com/sata-on-qemu/ /usr/libexec/qemu-kvm --enable-kvm -cpu 486 -m 32 -vnc 0.0.0.0:2 \ -kernel linux/pkg/linux/boot/vmlinuz-linux \ -append 'root=/dev/hda1 nomodeset init=/etc/rc console=ttyS0 console=tty0' \ -cdrom /data/isos/arch486.iso -hda /data/libvirt/arch486.qcow2 -nographic qemu-system-i386 --enable-kvm -cpu 486 -m 32 -cdrom /data/isos/arch486.iso \ -hda /data/libvirt/arch486.qcow2 -curses -boot d \ -netdev user,id=net0,net=10.0.0.0/24,host=10.0.0.2,dhcpstart=10.0.0.16,hostfwd=tcp::2222-:22 \ -device rtl8139,netdev=net0 qemu-system-i386 --enable-kvm -cpu 486 -m 32 \ -hda /home/cross/arch486.img -curses -boot d \ -netdev user,id=net0,net=10.0.0.0/24,host=10.0.0.2,dhcpstart=10.0.0.16,hostfwd=tcp::2222-:22 \ -device rtl8139,netdev=net0 PHASE 2 ####### # tcl ##### # disable tests: cynical, disable unit tests of a software needed for testing # dejagnu ######### # has hard-wired AC_PROG_CXX in configure, remove internal C++ tests sed -i '/.\/configure/ i \ sed -i "s@AC_PROG_CXX@#AC_PROG_CXX@" configure.ac' dejagnu/PKGBUILD sed -i '/configure.ac/ a \ sed -i "s@\\(unit_SOURCES.*\\)@#\\1@g" Makefile.am' dejagnu/PKGBUILD sed -i '/configure.ac/ a \ sed -i "s@\\(check_PROGRAMS*\\)@#\\1@g" Makefile.am' dejagnu/PKGBUILD sed -i '/Makefile.am/ a \ autoreconf' dejagnu/PKGBUILD # TODO: gcc ##### TODO: sed -i 's@^makedepends\(.*\)@#makedepends\1@g' binutils/PKGBUILD sed -i 's@^checkdepends\(.*\)@#checkdepends\1@g' binutils/PKGBUILD sed -i 's@^depends\(.*\)@#depends\1@g' binutils/PKGBUILD # gcc ##### # no gcc-ada and doxygen sed -i '/makedepend/ s/gcc-ada //g' gcc/PKGBUILD sed -i '/makedepend/ s/doxygen //g' gcc/PKGBUILD # avoid huge git checkouts sed -i 's@git+https://gcc.gnu.org/git/gcc.git.*@ftp://ftp.mpi-sb.mpg.de/pub/gnu/mirror/gcc.gnu.org/pub/gcc/releases/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz@' gcc/PKGBUILD sed -i 's@cd gcc$@cd ${pkgname}-${pkgver}@g' gcc/PKGBUILD sed -i 's@$srcdir/gcc/configure@$srcdir/${pkgname}-${pkgver}/configure@g' gcc/PKGBUILD # we don't have a working C++ compiler right now, be must bootstrap # doesn't work, we need c++ sind 4.8! #sed -i '/--enable-shared/ a \ --enable-bootstrap \\' gcc/PKGBUILD # remove ADA, we don't have (and will most likely never have a GNAT binary to # bootstrap ADA itself), on the other hand, there is nothing using ADA anyway. # at least not in packages/community sed -i '/pkgname/ s/gcc-ada//g' gcc/PKGBUILD sed -i '/enable-languages/ s/ada//g' gcc/PKGBUILD # send bugs to the right place sed -i 's@https://bugs.archlinux.org/@https://bugs.archlinux32.org/@g' gcc/PKGBUILD # so, I don't know what GNU people call bootstrapping, but this definitely isn't for C! /usr/include/c++/7.2.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory => let's try to fix the C++ compiler then.. # this is really really dangerous, let's hope, it works => find /usr/include/c++/7.2.0 -type f -exec sed -i 's/#include_next/#include/g' {} \; # /build/gcc/src/gcc-7.2.0/libgo/testsuite/gotest: line 624: 28445 Killed ./a.out -test.short -test.timeout=${timeout}s "$@" => ok, enough, go without testing ==> Starting package_gcc-go()... make: *** i486-pc-linux-gnu/libgo: No such file or directory. Stop. ==> ERROR: A failure occurred in package_gcc-go(). Aborting... => fails, oh well, nobody needs go :-) why the hell, I switched off c++, so wy are still cpp probes being done!? /lib/cpp hardcoded, seriosly!! # in prepare() ln -s ../bin/cpp /home/cross/x-tools/i486-unknown-linux-gnu/lib/cpp find . -name configure -exec sed -i 's@/lib/cpp@/home/cross/x-tools/i486-unknown-linux-gnu/bin/cpp@g' {} \; since 4.8 gcc is written in C++, fine. so we have to have a crosstool-ng C++ or => we add C++ to the crosstool-ng toolchain, easier and more secure included from /home/cross/build/gcc/src/gcc-7.2.0/gcc/genmddeps.c:19:0: /home/cross/build/gcc/src/gcc-7.2.0/gcc/system.h:540:34: error: declaration of C function ‘const cha r* strsignal(int)’ conflicts with extern const char *strsignal (int); ^ In file included from /usr/include/c++/4.8.2/cstring:42:0, from /home/cross/build/gcc/src/gcc-7.2.0/gcc/system.h:235, from /home/cross/build/gcc/src/gcc-7.2.0/gcc/genmddeps.c:19: /usr/include/string.h:562:14: error: previous declaration ‘char* strsignal(int)’ here extern char *strsignal (int __sig) __THROW; ^ In file included from ./bconfig.h:5:0, => so, we get to an end here, c++ is taken from the host while cross-compiling?! -> remove glibc-devel on the host! -> draw the g++ link, autoconf fails in gcc in funny ways (not finding uint64_t) -> carefull, we build a gcc over a crossng-gcc, not sure, this is supported.. -> aha. if mpfr, mpc and gmp are not installed and taken from sysroot but from i486-root some pathes get messed up. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82590 https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg550065.html https://gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=54692 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65863 -> huh? https://gcc.gnu.org/ml/gcc-help/2016-06/msg00016.html - > yes, this is the inicatition I needed, mpfr, gmp and mpc point to a weird location The stage one compiler doesn't find the shared library, o well: /home/cross/build/gcc/src/gcc-build/./gcc/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory -> export LD_LIBRARY_PATH=/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/lib And it never ends: In file included from /home/cross/build/gcc/src/gcc-7.2.0/libgcc/libgcc2.c:27:0: /home/cross/build/gcc/src/gcc-7.2.0/libgcc/../gcc/tsystem.h:87:10: fatal error: stdio.h: No such file or directory #include ^~~~~~~~~ compilation terminated. make[2]: *** [Makefile:491: _muldi3.o] Error 1 -> https://gcc.gnu.org/ml/gcc-help/2012-04/msg00088.html -> so, let's try giving it a --with-sysroot to the crosstool-ng dirs -> and this means also it got past stage 1 compilers :-) /home/cross/x-tools/i486-unknown-linux-gnu/lib/gcc/i486-unknown-linux-gnu/4.9.4/../../../../i486-unknown-linux-gnu/bin/ld: /home/cross/build/gcc/src/gcc-build/./gcc/liblto_plugin.so: error loading plugin: /home/cross/build/gcc/src/gcc-build/./gcc/liblto_plugin.so: wrong ELF class: ELFCLASS32 collect2: error: ld returned 1 exit status make[2]: *** [Makefile:982: libgcc_s.so] Error 1 => for now, remove LTO stuff in PKGBUILD make: *** i486-unknown-linux-gnu/libstdc++-v3/doc: No such file or directory. Stop. ==> ERROR: A failure occurred in build(). Aborting... => remove the PKGBUILD line # make -C $CHOST/libstdc++-v3/doc DESTDIR="$pkgdir" doc-install-man libstdc++-v3/ => # make documentation #make -C $CHOST/libstdc++-v3/doc doc-man-doxygen install: failed to access ‘/home/cross/build/gcc/pkg/gcc/usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/’: No such file or directory => gcc auto-probed itself into i486-pc-linux-gnu, so the installed files are there CHOST="i486-pc-linux-gnu" make: Leaving directory '/home/cross/build/gcc/src/gcc-build/gcc' install: failed to access ‘/home/cross/build/gcc/pkg/gcc/usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/’: No such file or directory => sweet, let's try a symlink _libdir=usr/lib/gcc/$CHOST/$pkgver => hard-code: to _libdir=usr/lib/gcc/i486-pc-linux-gnu/$pkgver => nope, now others break this is hardly the ArchLinux way: vanilla and upstream again CHOST set to i486-pc-linux-gnu => this package is a disaster! => we have a mess with two CHOSTS, one for crosstool-ng (unknown) and one for our chroot # remove traces of ADA rm "$pkgdir"/usr/share/info/{gccgo,gfortran.info} # rm: cannot remove ‘/home/cross/build/gcc/pkg/gcc/usr/share/info/gccgo’: No such file or directory # rm "$pkgdir"/usr/share/info/{gccgo,gfortran.info} /home/cross/x-tools/i486-unknown-linux-gnu/lib/gcc/i486-unknown-linux-gnu/4.9.4/../../../../i486-unknown-linux-gnu/bin/ld: cannot find -lquadmath collect2: error: ld returned 1 exit status libtool: install: error: relink `libgfortran.la' with the above command before installing it make: *** [Makefile:1331: install-toolexeclibLTLIBRARIES] Error 1 make: Leaving directory '/home/cross/build/gcc/src/gcc-build/i486-unknown-linux-gnu/libgfortran' ==> ERROR: A failure occurred in package_gcc-libs(). Aborting... => libquadmath must be retooled before libfortran => nope libfortran simply fails to relink => remove it install: cannot stat ‘/home/cross/build/gcc/src/gcc/COPYING.RUNTIME’: No such file or directory => sweet, remove it error: failed to commit transaction (conflicting files) gcc: /home/cross/i486-root/usr/lib/libstdc++.a exists in filesystem (owned by gcc-libs) gcc: /home/cross/i486-root/usr/lib/libstdc++.la exists in filesystem (owned by gcc-libs) Errors occurred, no packages were upgraded. => well, force the package test.c:1:10: fatal error: stdio.h: No such file or directory # END TODO: gcc # glibc ####### # use 2.25 version, not 2.26. Keep the ABI intact! # endless loop? gawk -f ../scripts/gen-as-const.awk pthread-pi-defines.sym \ # two reasons: clock and artifacts walk backwards or forward in time # chroot on server with chroot, hard to have an asynchronous clock? # or glibc is already installed on the system (where not?), so how the # hell can it be possibly built! # => oh, this would be cruel. # or 3rd reason, we have a glibc shim, maybe this one causes some trouble # => why? # or libtool fixing, whatever fixing means (https://forums.gentoo.org/viewtopic-t-496052-start-0.html) # => nope. # -isystem /usr/includ ein gcc spec? quite likely! # ah: old friend: build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L18': dl-sysdep.c:(.text+0x8c): undefined reference to `__memcmp_ia32' /build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L87': dl-sysdep.c:(.text+0x11f): undefined reference to `__memcmp_ia32' /build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L19': dl-sysdep.c:(.text+0x152): undefined reference to `__memcmp_ia32' /build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L85': dl-sysdep.c:(.text+0x19c): undefined reference to `__memcmp_ia32' dl-sysdep.c:(.text+0x1b7): undefined reference to `__memcmp_ia32' /build/glibc/src/glibc-build/libc.a(dl-sysdep.o):dl-sysdep.c:(.text+0x202): more undefined references to `__memcmp_ia32' follow elf/sln => USE_MULTIARCH => --disable-multi-arch => let's test this time, too dangerous to loose the chroot otherwise! # older 2.25 misses a binutils 2.29 patch: https://git.busybox.net/buildroot/diff/package/glibc/0005-fix-binutils-2-29-build.patch?id=cf821efbd0b24690b52f379d4a9934a16073762e {standard input}: Assembler messages: {standard input}: Error: `loc1@GLIBC_2.0' can't be versioned to common symbol 'loc1' {standard input}: Error: `loc2@GLIBC_2.0' can't be versioned to common symbol 'loc2' {standard input}: Error: `locs@GLIBC_2.0' can't be versioned to common symbol 'locs' make[2]: *** [../o-iterator.mk:9: /build/glibc/src/glibc-build/misc/regexp.os] Error 1 PACKAGES=" \ libgpg-error \ \ sysfsutils libidn iputils \ tcl expect dejagnu gcc glibc" # aftermatch for gcc/binutils #collect2: unable to find ld: this sounds bad, like an archicture mismatch somewhere #in binutils/gcc => this is the cross compiled gcc for i486 inside the chroot, it expects its platform dependend stuff in /usr/lib/gcc/i486-unknown-linux-gnu/7.2.0 => we can temporarily fix this: ln -s /usr/bin/ld /usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/ld etc. # aftermatch for glibc # bacause pacman cannot set file permissions chmod u+x /usr/bin/* /lib/*.so* # in 'real' 486 ############### next round: do those problems persist error: could not register 'temp' database (wrong or NULL argument passed) installed binaries have wrong permissions (no execute permission), a pacman issue? shilly flags? libarchive problem? later: for inside the chroot