about summary refs log tree commit diff
path: root/pkgs/development/compilers/gcc-apple64/builder.sh
blob: ce0baa1597a8b74f82c3c9ed99331af80a915fc7 (plain) (blame)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
source $stdenv/setup


export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy
mkdir $NIX_FIXINC_DUMMY


# libstdc++ needs this; otherwise it will use /lib/cpp, which is a Bad
# Thing.
export CPP="gcc -E"


if test "$noSysDirs" = "1"; then

    # Figure out what extra flags to pass to the gcc compilers being
    # generated to make sure that they use our glibc.
    if test -e $NIX_GCC/nix-support/orig-glibc; then
        glibc=$(cat $NIX_GCC/nix-support/orig-glibc)

        # Ugh.  Copied from gcc-wrapper/builder.sh.  We can't just
        # source in $NIX_GCC/nix-support/add-flags, since that would
        # cause *this* GCC to be linked against the *previous* GCC.
        # Need some more modularity there.
        extraCFlags="-B$glibc/lib -isystem $glibc/include"
        extraLDFlags="-B$glibc/lib -L$glibc/lib -Wl,-s \
          -Wl,-dynamic-linker,$glibc/lib/ld-linux.so.2"

        # Oh, what a hack.  I should be shot for this.  In stage 1, we
        # should link against the previous GCC, but not afterwards.
        # Otherwise we retain a dependency.  However, ld-wrapper,
        # which adds the linker flags for the previous GCC, is also
        # used in stage 2/3.  We can prevent it from adding them by
        # NIX_GLIBC_FLAGS_SET, but then gcc-wrapper will also not add
        # them, thereby causing stage 1 to fail.  So we use a trick to
        # only set the flags in gcc-wrapper.
        hook=$(pwd)/ld-wrapper-hook
        echo "NIX_GLIBC_FLAGS_SET=1" > $hook
        export NIX_LD_WRAPPER_START_HOOK=$hook

        # Use *real* header files, otherwise a limits.h is generated
        # that does not include Glibc's limits.h (notably missing
        # SSIZE_MAX, which breaks the build).
        export NIX_FIXINC_DUMMY=$glibc/include
    fi

    export NIX_EXTRA_CFLAGS=$extraCFlags
    export NIX_EXTRA_LDFLAGS=$extraLDFlags
    export CFLAGS=$extraCFlags
    export CXXFLAGS=$extraCFlags
    export LDFLAGS=$extraLDFlags
fi


preConfigure() {
    
    # Determine the frontends to build.
    langs="c"
    if test -n "$langCC"; then
        langs="$langs,c++"
    fi
    if test -n "$langF77"; then
        langs="$langs,f95"
    fi

    # Perform the build in a different directory.
    mkdir ../build
    cd ../build

    configureScript=../$sourceRoot/configure
    configureFlags="--enable-languages=$langs --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-multilib --with-gxx-include-dir=${STDCXX_INCDIR} --host=x86_64-apple-darwin10 --build=x86_64-apple-darwin10 --target=x86_64-apple-darwin10"
}


postInstall() {
    # Remove precompiled headers for now.  They are very big and
    # probably not very useful yet.
    find $out/include -name "*.gch" -exec rm -rf {} \; -prune

    # Remove `fixincl' to prevent a retained dependency on the
    # previous gcc.
    rm -rf $out/libexec/gcc/*/*/install-tools
}

postUnpack() {
  mv $libstdcxx/libstdcxx $sourceRoot/
}

STDCXX_INCDIR="$out/include/c++/4.2.1"

genericBuild


echo '-------------------------------------------------------------------------------------------------------------------------'
echo 'libstdcxx-16'
echo '-------------------------------------------------------------------------------------------------------------------------'

cd ..
pwd

preConfigure() {
    # Perform the build in a different directory.
    mkdir ../build_libstdcxx
    cd ../build_libstdcxx

    ln -s ../build/gcc gcc
    
    configureScript=../$sourceRoot/libstdcxx/configure
    configureFlags="--disable-libstdcxx-pch --disable-libstdcxx-debug --disable-multilib --with-gxx-include-dir=${STDCXX_INCDIR}"
}

unpackPhase () {
  echo '-'
}

postInstall() {
  echo '-'
  echo "cp -v ${STDCXX_INCDIR}/*/bits/* ${STDCXX_INCDIR}/bits/"
  cp -v ${STDCXX_INCDIR}/*/bits/* ${STDCXX_INCDIR}/bits/
}

patchPhase() {
  echo '-'
}

genericBuild

ln -s $out/lib/x86_64 $out/lib64