15 unset TOOLCHAIN_CC |
15 unset TOOLCHAIN_CC |
16 unset TOOLCHAIN_CXX |
16 unset TOOLCHAIN_CXX |
17 |
17 |
18 check_c_compiler() |
18 check_c_compiler() |
19 { |
19 { |
|
20 command -v $1 2>&1 >/dev/null |
|
21 if [ $? -ne 0 ]; then |
|
22 return 1 |
|
23 fi |
20 cat > "$TEMP_DIR/test.c" << __EOF__ |
24 cat > "$TEMP_DIR/test.c" << __EOF__ |
21 /* test file */ |
25 /* test file */ |
22 #include <stdio.h> |
26 #include <stdio.h> |
23 int main(int argc, char **argv) { |
27 int main(int argc, char **argv) { |
24 #if defined(_MSC_VER) |
28 #if defined(_MSC_VER) |
25 printf("msc\n"); |
29 printf("toolchain:msc\n"); |
26 #elif defined(__clang__) |
30 #elif defined(__clang__) |
27 printf("clang gnuc\n"); |
31 printf("toolchain:clang gnuc\n"); |
28 #elif defined(__GNUC__) |
32 #elif defined(__GNUC__) |
29 printf("gcc gnuc\n"); |
33 printf("toolchain:gcc gnuc\n"); |
30 #elif defined(__sun) |
34 #elif defined(__sun) |
31 printf("suncc\n"); |
35 printf("toolchain:suncc\n"); |
32 #else |
36 #else |
33 printf("unknown\n"); |
37 printf("toolchain:unknown\n"); |
|
38 #endif |
|
39 printf("wsize:%d\n", (int)sizeof(void*)*8); |
|
40 #ifdef __STDC_VERSION__ |
|
41 printf("stdcversion:%d\n", __STDC_VERSION__); |
34 #endif |
42 #endif |
35 return 0; |
43 return 0; |
36 } |
44 } |
37 __EOF__ |
45 __EOF__ |
38 rm -f "$TEMP_DIR/checkcc" |
46 rm -f "$TEMP_DIR/checkcc" |
39 $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null |
47 $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null |
40 } |
48 } |
41 |
49 |
42 check_cpp_compiler() |
50 check_cpp_compiler() |
43 { |
51 { |
|
52 command -v $1 2>&1 >/dev/null |
|
53 if [ $? -ne 0 ]; then |
|
54 return 1 |
|
55 fi |
44 cat > "$TEMP_DIR/test.cpp" << __EOF__ |
56 cat > "$TEMP_DIR/test.cpp" << __EOF__ |
45 /* test file */ |
57 /* test file */ |
46 #include <iostream> |
58 #include <iostream> |
47 int main(int argc, char **argv) { |
59 int main(int argc, char **argv) { |
48 #if defined(_MSC_VER) |
60 #if defined(_MSC_VER) |
49 std::cout << "msc" << std::endl; |
61 std::cout << "toolchain:msc" << std::endl; |
50 #elif defined(__clang__) |
62 #elif defined(__clang__) |
51 std::cout << "clang gnuc" << std::endl; |
63 std::cout << "toolchain:clang gnuc" << std::endl; |
52 #elif defined(__GNUC__) |
64 #elif defined(__GNUC__) |
53 std::cout << "gcc gnuc" << std::endl; |
65 std::cout << "toolchain:gcc gnuc" << std::endl; |
54 #elif defined(__sun) |
66 #elif defined(__sun) |
55 std::cout << "suncc" << std::endl; |
67 std::cout << "toolchain:suncc" << std::endl; |
56 #else |
68 #else |
57 std::cout << "cc" << std::endl; |
69 std::cout << "toolchain:unknown" << std::endl; |
58 #endif |
70 #endif |
|
71 std::cout << "wsize:" << sizeof(void*)*8 << std::endl; |
59 return 0; |
72 return 0; |
60 } |
73 } |
61 __EOF__ |
74 __EOF__ |
62 rm -f "$TEMP_DIR/checkcc" |
75 rm -f "$TEMP_DIR/checkcc" |
63 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
76 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
111 elif [ -n "$TOOLCHAIN_CXX" ]; then |
124 elif [ -n "$TOOLCHAIN_CXX" ]; then |
112 check_cpp_lib "$1" "$2" |
125 check_cpp_lib "$1" "$2" |
113 fi |
126 fi |
114 } |
127 } |
115 |
128 |
|
129 parse_toolchain_properties() |
|
130 { |
|
131 info_file="$1" |
|
132 TOOLCHAIN=`grep '^toolchain:' "$info_file" | tail -c +11` |
|
133 TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` |
|
134 TOOLCHAIN_WSIZE=`grep '^wsize:' "$info_file" | tail -c +7` |
|
135 } |
|
136 |
116 detect_c_compiler() |
137 detect_c_compiler() |
117 { |
138 { |
118 if [ -n "$TOOLCHAIN_CC" ]; then |
139 if [ -n "$TOOLCHAIN_CC" ]; then |
119 return 0 |
140 return 0 |
120 fi |
141 fi |
121 printf "detect C compiler... " |
142 printf "detect C compiler... " |
122 if [ -n "$CC" ]; then |
143 if [ -n "$CC" ]; then |
123 if check_c_compiler "$CC"; then |
144 if check_c_compiler "$CC"; then |
124 TOOLCHAIN_CC=$CC |
145 TOOLCHAIN_CC=$CC |
125 TOOLCHAIN=`"$TEMP_DIR/checkcc"` |
146 "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out" |
126 TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` |
147 parse_toolchain_properties "$TEMP_DIR/checkcc_out" |
|
148 TOOLCHAIN_CSTD=`grep '^stdcversion:' "$TEMP_DIR/checkcc_out" | tail -c +13` |
127 echo "$CC" |
149 echo "$CC" |
128 return 0 |
150 return 0 |
129 else |
151 else |
130 echo "$CC is not a working C compiler" |
152 echo "$CC is not a working C compiler" |
131 return 1 |
153 return 1 |
154 printf "detect C++ compiler... " |
177 printf "detect C++ compiler... " |
155 |
178 |
156 if [ -n "$CXX" ]; then |
179 if [ -n "$CXX" ]; then |
157 if check_cpp_compiler "$CXX"; then |
180 if check_cpp_compiler "$CXX"; then |
158 TOOLCHAIN_CXX=$CXX |
181 TOOLCHAIN_CXX=$CXX |
159 TOOLCHAIN=`"$TEMP_DIR/checkcc"` |
182 "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out" |
160 TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` |
183 parse_toolchain_properties "$TEMP_DIR/checkcc_out" |
161 echo "$CXX" |
184 echo "$CXX" |
162 return 0 |
185 return 0 |
163 else |
186 else |
164 echo "$CXX is not a working C++ compiler" |
187 echo "$CXX is not a working C++ compiler" |
165 return 1 |
188 return 1 |