summaryrefslogtreecommitdiff
path: root/strata/build-essential/stage1-gcc.morph
blob: f5d828f73b4ffd6151ad6ee1bb156b01531408ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
name: stage1-gcc
kind: chunk

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 "$MORPH_ARCH" in
      armv7lhf) ARCH_FLAGS="--with-arch=armv7-a \
                            --with-tune=cortex-a9 \
                            --with-fpu=vfpv3-d16 \
                            --with-float=hard" ;;
      armv7*)   ARCH_FLAGS="--with-arch=armv7-a" ;;
  esac

  cd o && CXX="g++ -std=gnu++98" ../configure                 \
            $ARCH_FLAGS                                       \
            --build=$(sh ../config.guess)                     \
            --host=$(sh ../config.guess)                      \
            --target=$TARGET_STAGE1                           \
            --prefix="$PREFIX"                                \
    `# [1]` --libdir="$PREFIX/lib"                            \
    `# [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-libmpx                                  \
    `# [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 "$MORPH_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="$DESTDIR" install