3
3
# http://www.nongnu.org/avr-libc/user-manual/install_tools.html
4
4
5
5
# For optimum compile time this should generally be set to the number of CPU cores your machine has
6
- JOBCOUNT=8
6
+ # Do it automatically, can over-ride from command line.
7
+ if [ -z ${JOBCOUNT+x} ]; then
8
+ CORES=$( getconf _NPROCESSORS_ONLN)
9
+ JOBCOUNT=$CORES
10
+ fi
7
11
8
12
# Build Linux toolchain
9
13
# A Linux AVR-GCC toolchain is required to build a Windows toolchain
10
14
# If the Linux toolchain has already been built then you can set this to 0
11
- BUILD_LINUX=1
15
+ if [ -z ${BUILD_LINUX+x} ]; then
16
+ BUILD_LINUX=1
17
+ fi
12
18
13
19
# Build 32 bit Windows toolchain
14
- BUILD_WIN32=0
20
+ if [ -z ${BUILD_WIN32+x} ]; then
21
+ BUILD_WIN32=1
22
+ fi
15
23
16
24
# Build 64 bit Windows toolchain
17
- BUILD_WIN64=0
25
+ if [ -z ${BUILD_WIN64+x} ]; then
26
+ BUILD_WIN64=1
27
+ fi
18
28
19
29
# Build Binutils? Can be set on command line.
20
- if [ -z ${BUILD_BINUTILS+x} ]; then
21
- BUILD_BINUTILS=0
30
+ if [ -z ${BUILD_BINUTILS+x} ]; then
31
+ BUILD_BINUTILS=1
22
32
fi
23
33
24
34
# Build AVR-GCC? Can be set on command line.
25
- if [ -z ${BUILD_GCC+x} ]; then
26
- BUILD_GCC=0
35
+ if [ -z ${BUILD_GCC+x} ]; then
36
+ BUILD_GCC=1
27
37
fi
28
38
29
39
# Build AVR-LibC? Can be set on command line.
30
- if [ -z ${BUILD_LIBC+x} ]; then
31
- BUILD_LIBC=1
40
+ if [ -z ${BUILD_LIBC+x} ]; then
41
+ BUILD_LIBC=1
32
42
fi
33
43
34
44
# Output locations for built toolchains
35
- PREFIX_LINUX=/opt/AVR/linux
36
- PREFIX_WIN32=/omgwtfbbq/win32
37
- PREFIX_WIN64=/omgwtfbbq/win64
38
- PREFIX_LIBC=/opt/AVR/libc
45
+ if [ -z ${PREFIX+x} ]; then
46
+ PREFIX=/opt/AVR
47
+ fi
48
+
49
+ PREFIX_LINUX=" $PREFIX " /avr-gcc-linux
50
+ PREFIX_WIN32=" $PREFIX " /avr-gcc-win32
51
+ PREFIX_WIN64=" $PREFIX " /avr-gcc-win64
52
+ PREFIX_LIBC=" $PREFIX " /avr-libc3
39
53
40
54
# Install packages
41
- if hash apt-get 2> /dev/null; then
42
- # This works for Debian 8 and Ubuntu 16.04
43
- apt-get install wget make gcc g++ bzip2
44
- elif hash yum 2> /dev/null; then
45
- # This works for CentOS 7
46
- yum install wget
47
- rpm -q epel-release-7-6.noarch > /dev/null
48
- if [ $? -ne 0 ]; then
49
- # EPEL is for the MinGW stuff
50
- rm -f epel-release-7-6.noarch.rpm
51
- wget https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel//7/x86_64/e/epel-release-7-6.noarch.rpm
52
- rpm -Uvh epel-release-7-6.noarch.rpm
55
+ if [ " $EUID " -eq 0 ]; then
56
+ echo " Running as root, so trying to install dependant packages."
57
+ if hash apt-get 2> /dev/null; then
58
+ # This works for Debian 8 and Ubuntu 16.04
59
+ apt-get install wget make gcc g++ bzip2 mingw-w64
60
+ elif hash yum 2> /dev/null; then
61
+ # This works for CentOS 7
62
+ yum install wget
63
+ rpm -q epel-release-7-6.noarch > /dev/null
64
+ if [ $? -ne 0 ]; then
65
+ # EPEL is for the MinGW stuff
66
+ rm -f epel-release-7-6.noarch.rpm
67
+ wget https://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel//7/x86_64/e/epel-release-7-6.noarch.rpm
68
+ rpm -Uvh epel-release-7-6.noarch.rpm
69
+ fi
70
+ yum install make mingw64-gcc mingw64-gcc-c++ mingw32-gcc mingw32-gcc-c++ gcc gcc-c++ bzip2
71
+ elif hash pacman 2> /dev/null; then
72
+ # This works for Arch
73
+ pacman -S --needed wget make mingw-w64-binutils mingw-w64-gcc mingw-w64-crt mingw-w64-headers mingw-w64-winpthreads gcc bzip2
53
74
fi
54
- yum install make mingw64-gcc mingw64-gcc-c++ mingw32-gcc mingw32-gcc-c++ gcc gcc-c++ bzip2
55
- elif hash pacman 2> /dev/null; then
56
- # This works for Arch
57
- pacman -S --needed wget make mingw-w64-binutils mingw-w64-gcc mingw-w64-crt mingw-w64-headers mingw-w64-winpthreads gcc bzip2
75
+
76
+ echo " We will not build while running as root, run as standard user to build."
77
+ exit 1
58
78
fi
59
79
60
80
# Stop on errors
61
81
set -e
62
82
63
83
NAME_BINUTILS=" binutils-2.32"
64
84
NAME_GCC=" gcc-9.1.0"
65
- NAME_LIBC=" avr-libc .git"
85
+ NAME_LIBC=" avr-libc3 .git"
66
86
67
87
HOST_WIN32=" i686-w64-mingw32"
68
88
HOST_WIN64=" x86_64-w64-mingw32"
@@ -95,18 +115,23 @@ makeDir()
95
115
}
96
116
97
117
echo " Clearing output directories..."
98
- [ $BUILD_LINUX -eq 1 ] && makeDir " $PREFIX_LINUX "
99
- [ $BUILD_WIN32 -eq 1 ] && makeDir " $PREFIX_WIN32 "
100
- [ $BUILD_WIN64 -eq 1 ] && makeDir " $PREFIX_WIN64 "
118
+ [ $BUILD_LINUX -eq 1 ] && [ $BUILD_BINUTILS -eq 1 ] && makeDir " $PREFIX_LINUX "
119
+ [ $BUILD_WIN32 -eq 1 ] && [ $BUILD_BINUTILS -eq 1 ] && makeDir " $PREFIX_WIN32 "
120
+ [ $BUILD_WIN64 -eq 1 ] && [ $BUILD_BINUTILS -eq 1 ] && makeDir " $PREFIX_WIN64 "
101
121
[ $BUILD_LIBC -eq 1 ] && makeDir " $PREFIX_LIBC "
102
122
103
- PATH=" $PATH " :" $PREFIX_LINUX " /bin
123
+ PATH=" $PREFIX_LINUX " /bin :" $PATH "
104
124
export PATH
105
125
106
126
CC=" "
107
127
export CC
108
128
109
129
echo " Downloading sources..."
130
+
131
+ # Create a temp directory for downloading and building in, to not polute base directory
132
+ makeDir buildtemp
133
+ cd buildtemp
134
+
110
135
if [ $BUILD_BINUTILS -eq 1 ]; then
111
136
rm -f $NAME_BINUTILS .tar.xz
112
137
rm -rf $NAME_BINUTILS /
121
146
122
147
if [ $BUILD_LIBC -eq 1 ]; then
123
148
rm -rf $NAME_LIBC /
124
- if [ " $NAME_LIBC " = " avr-libc .git" ]; then
149
+ if [ " $NAME_LIBC " = " avr-libc3 .git" ]; then
125
150
git clone https://github.com/stevenj/avr-libc3.git " $NAME_LIBC "
126
151
echo " Preparing"
127
152
cd $NAME_LIBC
@@ -148,11 +173,20 @@ if [ $BUILD_BINUTILS -eq 1 ]; then
148
173
tar xf $NAME_BINUTILS .tar.xz
149
174
mkdir -p $NAME_BINUTILS /obj-avr
150
175
cd $NAME_BINUTILS /obj-avr
151
- [ $BUILD_LINUX -eq 1 ] && confMake " $PREFIX_LINUX " " $OPTS_BINUTILS "
152
- [ $BUILD_WIN32 -eq 1 ] && confMake " $PREFIX_WIN32 " " $OPTS_BINUTILS " --host=$HOST_WIN32 --build=` ../config.guess`
153
- [ $BUILD_WIN64 -eq 1 ] && confMake " $PREFIX_WIN64 " " $OPTS_BINUTILS " --host=$HOST_WIN64 --build=` ../config.guess`
176
+ if [ $BUILD_LINUX -eq 1 ]; then
177
+ echo " ********** BUILDING LINUX BINUTILS *************"
178
+ confMake " $PREFIX_LINUX " " $OPTS_BINUTILS "
179
+ fi
180
+ if [ $BUILD_WIN32 -eq 1 ]; then
181
+ echo " ********** BUILDING WIN32 BINUTILS *************"
182
+ confMake " $PREFIX_WIN32 " " $OPTS_BINUTILS " --host=$HOST_WIN32 --build=` ../config.guess`
183
+ fi
184
+ if [ $BUILD_WIN64 -eq 1 ]; then
185
+ echo " ********** BUILDING WIN64 BINUTILS *************"
186
+ confMake " $PREFIX_WIN64 " " $OPTS_BINUTILS " --host=$HOST_WIN64 --build=` ../config.guess`
187
+ fi
154
188
cd ../../
155
- fi
189
+ fi
156
190
157
191
# Make AVR-GCC
158
192
if [ $BUILD_GCC -eq 1 ]; then
@@ -168,12 +202,12 @@ if [ $BUILD_GCC -eq 1 ]; then
168
202
[ $BUILD_WIN32 -eq 1 ] && confMake " $PREFIX_WIN32 " " $OPTS_GCC " --host=$HOST_WIN32 --build=` ../config.guess`
169
203
[ $BUILD_WIN64 -eq 1 ] && confMake " $PREFIX_WIN64 " " $OPTS_GCC " --host=$HOST_WIN64 --build=` ../config.guess`
170
204
cd ../../
171
- fi
205
+ fi
172
206
173
207
# Make AVR-LibC
174
208
if [ $BUILD_LIBC -eq 1 ]; then
175
209
echo " Making AVR-LibC..."
176
- if [ " $NAME_LIBC " != " avr-libc .git" ]; then
210
+ if [ " $NAME_LIBC " != " avr-libc3 .git" ]; then
177
211
echo " Extracting..."
178
212
bunzip2 -c $NAME_LIBC .tar.bz2 | tar xf -
179
213
fi
@@ -190,4 +224,3 @@ echo ""
190
224
echo " Done in $TIME_RUN seconds"
191
225
192
226
exit 0
193
-
0 commit comments