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; |
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 |