kind: manual sources: - kind: git url: upstream:glibc track: release/2.25/master ref: 49f97e641e4e84a42246655d30adbc4756e67114 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-target-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 < 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. # # The name of the dynamic loader is hardcoded in GCC during its 'configure' # stage, but the file is actually provided by the libc (usually GLIBC). It # would be better if we could ask GCC or GLIBC what the expected name of the # ld.so is for the given platform rather than figuring it out - install -d %{install-root}/lib - | case "%{bst-target-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" ;; ppc64l) install -d "%{install-root}/lib64" ln -s "%{prefix}/lib/ld64.so.2" \ "%{install-root}/lib64/ld64.so.2" ;; ppc64b) 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