test/make/toolchain.sh

changeset 35
57ea620a54ac
parent 31
4c6060dad560
child 36
9e386a530bdf
equal deleted inserted replaced
34:4486849e6a6c 35:57ea620a54ac
9 unset TOOLCHAIN_DETECTION_ERROR 9 unset TOOLCHAIN_DETECTION_ERROR
10 unset TOOLCHAIN_NAME 10 unset TOOLCHAIN_NAME
11 11
12 check_c_compiler() 12 check_c_compiler()
13 { 13 {
14 cat > $TEMP_DIR/test.c << __EOF__ 14 cat > "$TEMP_DIR/test.c" << __EOF__
15 /* test file */ 15 /* test file */
16 #include <stdio.h> 16 #include <stdio.h>
17 int main(int argc, char **argv) { 17 int main(int argc, char **argv) {
18 #if defined(__clang__) 18 #if defined(__clang__)
19 printf("clang\n"); 19 printf("clang\n");
25 printf("unknown\n"); 25 printf("unknown\n");
26 #endif 26 #endif
27 return 0; 27 return 0;
28 } 28 }
29 __EOF__ 29 __EOF__
30 rm -f $TEMP_DIR/checkcc 30 rm -f "$TEMP_DIR/checkcc"
31 $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c 2> /dev/null 31 $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null
32 32
33 if [ $? -ne 0 ]; then 33 if [ $? -ne 0 ]; then
34 return 1 34 return 1
35 fi 35 fi
36 return 0 36 return 0
37 } 37 }
38 38
39 check_cpp_compiler() 39 check_cpp_compiler()
40 { 40 {
41 cat > $TEMP_DIR/test.cpp << __EOF__ 41 cat > "$TEMP_DIR/test.cpp" << __EOF__
42 /* test file */ 42 /* test file */
43 #include <iostream> 43 #include <iostream>
44 int main(int argc, char **argv) { 44 int main(int argc, char **argv) {
45 #if defined(__clang__) 45 #if defined(__clang__)
46 std::cout << "clang" << std::endl; 46 std::cout << "clang" << std::endl;
52 std::cout << "unknown" << std::endl; 52 std::cout << "unknown" << std::endl;
53 #endif 53 #endif
54 return 0; 54 return 0;
55 } 55 }
56 __EOF__ 56 __EOF__
57 rm -f $TEMP_DIR/checkcc 57 rm -f "$TEMP_DIR/checkcc"
58 $1 -o $TEMP_DIR/checkcc $CXXFLAGS $LDFLAGS $TEMP_DIR/test.cpp 2> /dev/null 58 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
59 59
60 if [ $? -ne 0 ]; then 60 if [ $? -ne 0 ]; then
61 return 1 61 return 1
62 fi 62 fi
63 return 0 63 return 0
66 check_lib() 66 check_lib()
67 { 67 {
68 if [ -z "$TOOLCHAIN_LD" ]; then 68 if [ -z "$TOOLCHAIN_LD" ]; then
69 return 1 69 return 1
70 fi 70 fi
71 cat > $TEMP_DIR/test.c << __EOF__ 71 cat > "$TEMP_DIR/test.c" << __EOF__
72 /* libtest file */ 72 /* libtest file */
73 int main(int argc, char **argv) { 73 int main(int argc, char **argv) {
74 return 0; 74 return 0;
75 } 75 }
76 __EOF__ 76 __EOF__
77 rm -f $TEMP_DIR/checklib 77 rm -f "$TEMP_DIR/checklib"
78 $TOOLCHAIN_LD -o $TEMP_DIR/checklib $CFLAGS $LDFLAGS "-l$1" $TEMP_DIR/test.c 2> /dev/null 78 $TOOLCHAIN_LD -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
79 79
80 if [ $? -ne 0 ]; then 80 if [ $? -ne 0 ]; then
81 return 1 81 return 1
82 fi 82 fi
83 return 0 83 return 0
85 85
86 printf "detect C compiler... " 86 printf "detect C compiler... "
87 87
88 for COMP in $C_COMPILERS 88 for COMP in $C_COMPILERS
89 do 89 do
90 check_c_compiler $COMP 90 check_c_compiler "$COMP"
91 if [ $? -ne 0 ]; then 91 if [ $? -ne 0 ]; then
92 if [ ! -z "$CC" ]; then 92 if [ -n "$CC" ]; then
93 if [ $COMP = $CC ]; then 93 if [ "$COMP" = "$CC" ]; then
94 echo "$CC is not a working C Compiler" 94 echo "$CC is not a working C compiler"
95 TOOLCHAIN_DETECTION_ERROR="error" 95 TOOLCHAIN_DETECTION_ERROR="error"
96 break 96 break
97 fi 97 fi
98 fi 98 fi
99 else 99 else
100 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 100 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
101 USE_TOOLCHAIN=$TOOLCHAIN_NAME 101 USE_TOOLCHAIN=$TOOLCHAIN_NAME
102 if [ $COMP = "cc" ]; then 102 if [ "$COMP" = "cc" ]; then
103 # we have found a working compiler, but in case 103 # we have found a working compiler, but in case
104 # the compiler is gcc or clang, we try to use 104 # the compiler is gcc or clang, we try to use
105 # these commands and not 'cc' 105 # these commands and not 'cc'
106 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 106 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
107 if [ $TOOLCHAIN_NAME = "gcc" ]; then 107 if [ "$TOOLCHAIN_NAME" = "gcc" ]; then
108 check_c_compiler "gcc" 108 check_c_compiler "gcc"
109 if [ $? -eq 0 ]; then 109 if [ $? -eq 0 ]; then
110 COMP=gcc 110 COMP=gcc
111 USE_TOOLCHAIN="gcc" 111 USE_TOOLCHAIN="gcc"
112 fi 112 fi
113 fi 113 fi
114 if [ $TOOLCHAIN_NAME = "clang" ]; then 114 if [ "$TOOLCHAIN_NAME" = "clang" ]; then
115 check_c_compiler "clang" 115 check_c_compiler "clang"
116 if [ $? -eq 0 ]; then 116 if [ $? -eq 0 ]; then
117 COMP=clang 117 COMP=clang
118 USE_TOOLCHAIN="clang" 118 USE_TOOLCHAIN="clang"
119 fi 119 fi
124 TOOLCHAIN_CC=$COMP 124 TOOLCHAIN_CC=$COMP
125 echo $COMP 125 echo $COMP
126 break 126 break
127 fi 127 fi
128 done 128 done
129 if [ -z $TOOLCHAIN_CC ]; then 129 if [ -z "$TOOLCHAIN_CC" ]; then
130 echo "not found" 130 echo "not found"
131 fi 131 fi
132 132
133 printf "detect C++ compiler... " 133 printf "detect C++ compiler... "
134 134
135 for COMP in $CPP_COMPILERS 135 for COMP in $CPP_COMPILERS
136 do 136 do
137 check_cpp_compiler $COMP 137 check_cpp_compiler "$COMP"
138 if [ $? -ne 0 ]; then 138 if [ $? -ne 0 ]; then
139 if [ ! -z "$CXX" ]; then 139 if [ -n "$CXX" ]; then
140 if [ $COMP = $CXX ]; then 140 if [ "$COMP" = "$CXX" ]; then
141 echo "$CC is not a working C++ Compiler" 141 echo "$CXX is not a working C++ compiler"
142 TOOLCHAIN_DETECTION_ERROR="error" 142 TOOLCHAIN_DETECTION_ERROR="error"
143 break 143 break
144 fi 144 fi
145 fi 145 fi
146 else 146 else
147 if [ $COMP = "CC" ]; then 147 if [ $COMP = "CC" ]; then
148 # we have found a working compiler, but in case 148 # we have found a working compiler, but in case
149 # the compiler is gcc or clang, we try to use 149 # the compiler is gcc or clang, we try to use
150 # these commands and not 'cc' 150 # these commands and not 'CC'
151 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 151 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
152 USE_TOOLCHAIN=$TOOLCHAIN_NAME 152 USE_TOOLCHAIN=$TOOLCHAIN_NAME
153 if [ $TOOLCHAIN_NAME = "gcc" ]; then 153 if [ "$TOOLCHAIN_NAME" = "gcc" ]; then
154 check_cpp_compiler "g++" 154 check_cpp_compiler "g++"
155 if [ $? -eq 0 ]; then 155 if [ $? -eq 0 ]; then
156 COMP=g++ 156 COMP=g++
157 USE_TOOLCHAIN="gcc" 157 USE_TOOLCHAIN="gcc"
158 fi 158 fi
159 fi 159 fi
160 if [ $TOOLCHAIN_NAME = "clang" ]; then 160 if [ "$TOOLCHAIN_NAME" = "clang" ]; then
161 check_cpp_compiler "clang++" 161 check_cpp_compiler "clang++"
162 if [ $? -eq 0 ]; then 162 if [ $? -eq 0 ]; then
163 COMP=clang++ 163 COMP=clang++
164 USE_TOOLCHAIN="clang" 164 USE_TOOLCHAIN="clang"
165 fi 165 fi
170 TOOLCHAIN_CXX=$COMP 170 TOOLCHAIN_CXX=$COMP
171 echo $COMP 171 echo $COMP
172 break 172 break
173 fi 173 fi
174 done 174 done
175 if [ -z $TOOLCHAIN_CXX ]; then 175 if [ -z "$TOOLCHAIN_CXX" ]; then
176 echo "not found" 176 echo "not found"
177 fi 177 fi
178 178
179 TOOLCHAIN_LD=$TOOLCHAIN_CC 179 TOOLCHAIN_LD=$TOOLCHAIN_CC
180 180
181 if [ -z "$TOOLCHAIN_NAME" ]; then 181 if [ -z "$TOOLCHAIN_NAME" ]; then
182 TOOLCHAIN_DETECTION_ERROR="error" 182 TOOLCHAIN_DETECTION_ERROR="error"
183 else 183 else
184 cat >> $TEMP_DIR/config.mk << __EOF__ 184 cat >> "$TEMP_DIR/config.mk" << __EOF__
185 # toolchain 185 # toolchain
186 __EOF__ 186 __EOF__
187 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk 187 echo "CC = ${TOOLCHAIN_CC}" >> "$TEMP_DIR/config.mk"
188 if [ ! -z "$TOOLCHAIN_CXX" ]; then 188 if [ -n "$TOOLCHAIN_CXX" ]; then
189 echo "CXX = ${TOOLCHAIN_CXX}" >> $TEMP_DIR/config.mk 189 echo "CXX = ${TOOLCHAIN_CXX}" >> "$TEMP_DIR/config.mk"
190 fi 190 fi
191 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk 191 echo "LD = ${TOOLCHAIN_LD}" >> "$TEMP_DIR/config.mk"
192 echo >> $TEMP_DIR/config.mk 192 echo >> "$TEMP_DIR/config.mk"
193 193
194 cat "make/${TOOLCHAIN_NAME}.mk" > /dev/null 2>&1 194 cat "make/${TOOLCHAIN_NAME}.mk" > /dev/null 2>&1
195 if [ $? -eq 0 ]; then 195 if [ $? -eq 0 ]; then
196 echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk 196 echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> "$TEMP_DIR/config.mk"
197 else 197 else
198 echo "SHLIB_CFLAGS = -fPIC" >> $TEMP_DIR/config.mk 198 echo "SHLIB_CFLAGS = -fPIC" >> "$TEMP_DIR/config.mk"
199 echo "SHLIB_LDFLAGS = -shared" >> $TEMP_DIR/config.mk 199 echo "SHLIB_LDFLAGS = -shared" >> "$TEMP_DIR/config.mk"
200 fi 200 fi
201 fi 201 fi

mercurial