-
Notifications
You must be signed in to change notification settings - Fork 1
/
build_gcc_nvptx.sh
executable file
·125 lines (113 loc) · 2.8 KB
/
build_gcc_nvptx.sh
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
#!/bin/bash
if [ $# -ne 2 ]; then
echo "./build_nvptx_gcc [work_dir] [install_dir]"
exit
fi;
#
# Build GCC with support for offloading to NVIDIA GPUs.
#
work_dir=$1
install_dir=$2
accelerator=nvptx-none
# Need access to our custom compiler and binutils
export PATH="$install_dir/bin:$PATH"
# Location of the installed CUDA toolkit
cuda=/usr/local/cuda
#
# Build assembler and linking tools
#
mkdir -p $work_dir
cd $work_dir
git clone https://github.com/MentorEmbedded/nvptx-tools
cd nvptx-tools
./configure \
--with-cuda-driver-include=$cuda/include \
--with-cuda-driver-lib=$cuda/lib64 \
--prefix=$install_dir
make -j`nproc` || exit 1
make install || exit 1
cd ..
#
# Set up the GCC source tree
#
git clone git://sourceware.org/git/newlib-cygwin.git nvptx-newlib
git clone --branch releases/gcc-11 git://gcc.gnu.org/git/gcc.git gcc
cd gcc
contrib/download_prerequisites
ln -s ../nvptx-newlib/newlib newlib
cd ..
target=$(gcc/config.guess)
#
# Build cross compiler. Used for libraries that need to run on target.
#
mkdir build-nvptx-gcc
cd build-nvptx-gcc
../gcc/configure \
--target=$accelerator --with-build-time-tools=$install_dir/$accelerator/bin \
--without-headers \
--with-newlib \
--disable-multilib \
--disable-sjlj-exceptions \
--enable-newlib-io-long-long \
--enable-languages="c,c++,fortran,lto" \
--prefix=$install_dir
make -j`nproc` all-gcc || exit 1
make install-gcc || exit 1
cd ..
#
# Build newlib
#
mkdir build-newlib
cd build-newlib
../nvptx-newlib/configure --target=$accelerator --prefix=$install_dir
make -j`nproc` all
make install
cd ..
#
# Build cross compiler with newlib support.
#
cd build-nvptx-gcc
../gcc/configure \
--target=$accelerator --with-build-time-tools=$install_dir/$accelerator/bin \
--with-newlib \
# --disable-shared \
--disable-libssp \
--disable-multilib \
--disable-sjlj-exceptions \
--enable-newlib-io-long-long \
--enable-languages="c,c++,fortran,lto" \
--prefix=$install_dir
make -j`nproc` all
make install
cd ..
#
# Build acceleration compiler.
#
mkdir build-nvptx-gcc-accel
cd build-nvptx-gcc-accel
../gcc/configure \
--target=$accelerator --with-build-time-tools=$install_dir/$accelerator/bin \
--enable-as-accelerator-for=$target \
--disable-sjlj-exceptions \
--enable-newlib-io-long-long \
--enable-languages="c,c++,fortran,lto" \
--prefix=$install_dir
make -j`nproc` || exit 1
make install || exit 1
cd ..
#
# Build host GCC
#
mkdir build-host-gcc
cd build-host-gcc
../gcc/configure \
--enable-offload-targets=$accelerator \
--with-cuda-driver-include=$cuda/include \
--with-cuda-driver-lib=$cuda/lib64 \
--disable-bootstrap \
--disable-multilib \
--enable-languages="c,c++,fortran,lto" \
--prefix=$install_dir
make -j`nproc` || exit 1
make install || exit 1
cd ..