summaryrefslogtreecommitdiff
path: root/elements/gnu-toolchain/stage2-glibc.bst
diff options
context:
space:
mode:
Diffstat (limited to 'elements/gnu-toolchain/stage2-glibc.bst')
-rw-r--r--elements/gnu-toolchain/stage2-glibc.bst122
1 files changed, 122 insertions, 0 deletions
diff --git a/elements/gnu-toolchain/stage2-glibc.bst b/elements/gnu-toolchain/stage2-glibc.bst
new file mode 100644
index 00000000..1c3745e1
--- /dev/null
+++ b/elements/gnu-toolchain/stage2-glibc.bst
@@ -0,0 +1,122 @@
+kind: manual
+
+sources:
+- kind: git
+ url: upstream:glibc
+ track: release/2.22/master
+ ref: b995d95a5943785be3ab862b2d3276f3b4a22481
+
+depends:
+- filename: gnu-toolchain/stage1.bst
+ type: build
+- filename: gnu-toolchain/stage2-fhs-dirs.bst
+ type: runtime
+- gnu-toolchain/stage2-linux-api-headers.bst
+
+variables:
+ prefix: /tools
+
+environment:
+ PATH: /tools/bin:/usr/bin:/bin:/usr/sbin:/sbin
+
+config:
+
+ configure-commands:
+ - mkdir o
+
+ # Configure flag notes:
+ # 1. Avoid installing to PREFIX/lib64 on x86_64.
+ # 2. Location of linux-api-headers.
+ # 3. Normal flags. See glibc.morph.
+ # 4. Force configuration values of certain things that can't be detected
+ # in a cross-compile.
+ - |
+ case "%{bst-arch}" in
+ armv7*)
+ ARCH_FLAGS="--without-fp" ;;
+ esac
+
+ export CFLAGS="-O2 $CFLAGS"; export CXX=false; \
+ cd o && ../configure \
+ $ARCH_FLAGS \
+ --build=$(../scripts/config.guess) --host=%{target-stage1} \
+ --prefix="%{prefix}" \
+ `# [1]` --libdir="%{prefix}/lib" \
+ `# [2]` --with-headers="%{prefix}/include" \
+ `# [3]` --disable-profile --enable-kernel=2.6.25 \
+ `# [4]` libc_cv_c_cleanup=yes libc_cv_ctors_header=yes \
+ libc_cv_forced_unwind=yes libc_cv_ssp=no
+
+ build-commands:
+ - cd o && make localtime=UTC
+
+ install-commands:
+ - cd o && make install_root="%{install-root}" localtime=UTC install
+ - mkdir -p "%{install-root}/etc"
+ - mkdir -p "%{install-root}/etc/ld.so.conf.d"
+ - |
+ cat <<EOF > ld.so.conf
+ /lib
+ /usr/lib
+ /usr/local/lib
+ include /etc/ld.so.conf.d/*.conf
+ EOF
+ - install -m 644 -o root -g root ld.so.conf "%{install-root}/etc/ld.so.conf"
+ - |
+ # Fix up GCC to handle the sysroot containing glibc being in a different
+ # location for each chunk build.
+ #
+ # For headers, it's enough to pass -B in the CPPFLAGS. This would work for
+ # the startup files (crt*.o) as well, except where libtool is involved (in
+ # which case it strips -B out of your LDFLAGS before calling GCC). We get
+ # around this by making GCC locate them relative to the environment variable
+ # STAGE2_SYSROOT, which we can then set along with CPPFLAGS in each stage 2
+ # chunk build.
+ #
+ # We also force the use of the program loader at PREFIX/lib/ld.so instead
+ # of its usual home in /lib or /lib64, which is necessary for the output of
+ # stage 2 to work as a chroot when building stage 3.
+
+ sysroot="$(dirname $(dirname $(pwd)))"
+ specs_dir="$(dirname $(%{target-stage1}-gcc --print-libgcc-file-name))"
+ target_specs_dir="%{install-root}/${specs_dir#$sysroot}"
+ mkdir -p "$target_specs_dir"
+
+ %{target-stage1}-gcc -dumpspecs |
+ sed -e "s@[gMS]\?crt[1in].o%s@%:getenv(STAGE2_SYSROOT %{libdir}/&)@g" \
+ -e "s@/lib\(64\)\?/ld@%{libdir}/ld@g" \
+ > "$target_specs_dir/specs-for-sysroot"
+
+ # NASTY HACK #
+ # We create a symlink to the actual specs here, so that later the
+ # symlink can be replaced with a dangling link.
+ #
+ # This is necessary as we need to have gcc use its internal specs,
+ # which can differ to the specs generated by `gcc -dumpspecs`.
+ #
+ # The dangling symlink will not make it onto the final system, just
+ # like all other bootstrap only components.
+ ln -s specs-for-sysroot "$target_specs_dir/specs"
+
+ # Install a symlink for the program interpreter (ld.so) so that binaries
+ # built in stage 3 before the stage 3 glibc is built can use it.
+ # FIXME: get a better way of finding the name of the loader. The lib64
+ # path is hardcoded into glibc in the file
+ # sysdeps/unix/sysv/linux/configure.
+ - install -d %{install-root}/lib
+ - |
+ case "%{bst-arch}" in
+ x86_64)
+ install -d "%{install-root}/lib64"
+ ln -s "%{prefix}/lib/ld-linux-x86-64.so.2" \
+ "%{install-root}/lib64/ld-linux-x86-64.so.2" ;;
+ ppc64)
+ install -d "%{install-root}/lib64"
+ ln -s "%{prefix}/lib/ld64.so.1" \
+ "%{install-root}/lib64/ld64.so.1" ;;
+ *)
+ loader=$(basename $(ls "%{install-root}%{prefix}"/lib/ld-linux*))
+ [ -z $loader ] && loader=$(basename $(ls "%{install-root}%{prefix}"/lib/ld.so*))
+ [ -z $loader ] && ( echo "Bug in stage2-glibc ld.so symlinks" ; exit 1 )
+ ln -s "%{prefix}/lib/$loader" "%{install-root}/lib/$loader"
+ esac