about summary refs log tree commit diff
path: root/pkgs/development/compilers/gcc-apple64/builder.sh
blob: 6072aef9d5911f3a95fd75f128fccd506e3c7b01 (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
128
129
130
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
    if test -n "$langObjC"; then
        langs="$langs,objc"
    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