make/toolchain.sh

changeset 45
2cb7fdd2ba18
parent 0
b4b281ef2d0f
equal deleted inserted replaced
44:de22ded6d50a 45:2cb7fdd2ba18
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
133 else 155 else
134 for COMP in $C_COMPILERS 156 for COMP in $C_COMPILERS
135 do 157 do
136 if check_c_compiler "$COMP"; then 158 if check_c_compiler "$COMP"; then
137 TOOLCHAIN_CC=$COMP 159 TOOLCHAIN_CC=$COMP
138 TOOLCHAIN=`"$TEMP_DIR/checkcc"` 160 "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
139 TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 161 parse_toolchain_properties "$TEMP_DIR/checkcc_out"
162 TOOLCHAIN_CSTD=`grep '^stdcversion:' "$TEMP_DIR/checkcc_out" | tail -c +13`
140 echo "$COMP" 163 echo "$COMP"
141 return 0 164 return 0
142 fi 165 fi
143 done 166 done
144 echo "not found" 167 echo "not found"
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
167 else 190 else
168 for COMP in $CPP_COMPILERS 191 for COMP in $CPP_COMPILERS
169 do 192 do
170 if check_cpp_compiler "$COMP"; then 193 if check_cpp_compiler "$COMP"; then
171 TOOLCHAIN_CXX=$COMP 194 TOOLCHAIN_CXX=$COMP
172 TOOLCHAIN=`"$TEMP_DIR/checkcc"` 195 "$TEMP_DIR/checkcc" > "$TEMP_DIR/checkcc_out"
173 TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -` 196 parse_toolchain_properties "$TEMP_DIR/checkcc_out"
174 echo "$COMP" 197 echo "$COMP"
175 return 0 198 return 0
176 fi 199 fi
177 done 200 done
178 echo "${TOOLCHAIN_CXX:-"not found"}" 201 echo "${TOOLCHAIN_CXX:-"not found"}"

mercurial