summaryrefslogtreecommitdiff
path: root/build-essential/stage1-gcc.bst
diff options
context:
space:
mode:
Diffstat (limited to 'build-essential/stage1-gcc.bst')
-rw-r--r--build-essential/stage1-gcc.bst100
1 files changed, 100 insertions, 0 deletions
diff --git a/build-essential/stage1-gcc.bst b/build-essential/stage1-gcc.bst
new file mode 100644
index 00000000..81c4d40a
--- /dev/null
+++ b/build-essential/stage1-gcc.bst
@@ -0,0 +1,100 @@
+kind: autotools
+
+sources:
+- kind: git
+ url: upstream:gcc-tarball
+ track: baserock/build-essential
+ ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+
+depends:
+- build-essential/gnome-platform.bst
+- build-essential/gnome-sdk.bst
+- build-essential/stage1-binutils.bst
+
+variables:
+ prefix: /tools
+
+environment:
+ PATH: /tools/bin:/usr/bin:/bin:/usr/sbin:/sbin
+
+config:
+ configure-commands:
+ # Workaround from LFS due GCC not detecting stack protection correctly
+ - |
+ sed -i -e '/k prot/a \
+ gcc_cv_libc_provides_ssp=yes
+ ' gcc/configure
+
+ - mkdir o
+
+ # Configure flag notes:
+ # 1. See gcc.morph.
+ # 2. Although we will be setting a sysroot at runtime, giving a
+ # temporary one at configuration time seems necessary so that
+ # `--with-native-system-header-dir` produces effect and
+ # /tools/include is in the include path for the newly built GCC. We
+ # set it by default to a non-existent directory to avoid GCC looking
+ # at the host dirs, in case we forget to give it at runtime.
+ # 3. Disable searching /usr/local/include for headers
+ # 4. The pass 1 compiler needs to find the libraries we build in pass
+ # 2. Include path must be set explicility, because it defaults to
+ # $SYSROOT/usr/include rather than $SYSROOT/include.
+ # 5. Disable stuff that doesn't work when building a cross compiler
+ # without an existing libc, and generally try to keep this build as
+ # simple as possible.
+ - |
+ case "%{bst-arch}" in
+ armv7lhf) ARCH_FLAGS="--with-arch=armv7-a \
+ --with-cpu=cortex-a9 \
+ --with-tune=cortex-a9 \
+ --with-fpu=vfpv3-d16 \
+ --with-float=hard" ;;
+ armv7*) ARCH_FLAGS="--with-arch=armv7-a" ;;
+ esac
+
+ cd o && ../configure \
+ $ARCH_FLAGS \
+ --build=$(sh ../config.guess) \
+ --host=$(sh ../config.guess) \
+ --target=%{target-stage1} \
+ --prefix="%{prefix}" \
+ `# [1]` --libdir="%{libdir}" \
+ `# [2]` --with-sysroot=/nonexistentdir \
+ --with-newlib \
+ `# [3]` --with-local-prefix="%{prefix}" \
+ `# [4]` --with-native-system-header-dir="%{prefix}/include" \
+ --without-headers \
+ --disable-nls \
+ --disable-shared \
+ --disable-multilib \
+ `# [5]` --disable-decimal-float \
+ `# [5]` --disable-threads \
+ `# [5]` --disable-libatomic \
+ `# [5]` --disable-libgomp \
+ `# [5]` --disable-libitm \
+ `# [5]` --disable-libquadmath \
+ `# [5]` --disable-libsanitizer \
+ `# [5]` --disable-libssp \
+ `# [5]` --disable-libvtv \
+ `# [5]` --disable-libcilkrts \
+ `# [5]` --disable-libstdc++-v3 \
+ --enable-languages=c,c++
+
+ build-commands:
+ - |
+ # GCC is not passing the correct host/target flags to GMP's configure
+ # script, which causes it to not use the machine-dependent code for
+ # the platform and use the generic one instead. However, the generic
+ # code results on an undefined reference to `__gmpn_invert_limb' in
+ # ARMv7. Fix the invocation of GMP's configure script so that GMP can
+ # use the machine-dependent code.
+ case "%{bst-arch}" in
+ armv5*) sed -i "s/--host=none/--host=armv5/" o/Makefile
+ sed -i "s/--target=none/--target=armv5/" o/Makefile ;;
+ armv7*) sed -i "s/--host=none/--host=armv7a/" o/Makefile
+ sed -i "s/--target=none/--target=armv7a/" o/Makefile ;;
+ esac
+ cd o && make
+
+ install-commands:
+ - cd o && make DESTDIR="%{install-root}" install