test/make/toolchain.sh

changeset 8
82cd9f1d94cb
parent 7
686991ae6e2f
child 9
ebdecbbb2f79
equal deleted inserted replaced
7:686991ae6e2f 8:82cd9f1d94cb
1 #!/bin/sh 1 #!/bin/sh
2 # 2 #
3 # toolchain detection 3 # toolchain detection
4 # 4 #
5 5
6 COMPILERS="cc gcc clang suncc" 6 C_COMPILERS="cc gcc clang suncc"
7 CPP_COMPILERS="CC g++ clang++ sunCC"
7 unset CC_ARG_CHECKED 8 unset CC_ARG_CHECKED
8 unset TOOLCHAIN_DETECTION_ERROR 9 unset TOOLCHAIN_DETECTION_ERROR
9 unset TOOLCHAIN_NAME 10 unset TOOLCHAIN_NAME
10 11
11 check_compiler() 12 check_c_compiler()
12 { 13 {
13 cat > $TEMP_DIR/test.c << __EOF__ 14 cat > $TEMP_DIR/test.c << __EOF__
14 /* test file */ 15 /* test file */
15 #include <stdio.h> 16 #include <stdio.h>
16 int main(int argc, char **argv) { 17 int main(int argc, char **argv) {
25 #endif 26 #endif
26 return 0; 27 return 0;
27 } 28 }
28 __EOF__ 29 __EOF__
29 rm -f $TEMP_DIR/checkcc 30 rm -f $TEMP_DIR/checkcc
30 $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c 31 $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c 2> /dev/null
32
33 if [ $? -ne 0 ]; then
34 return 1
35 fi
36 return 0
37 }
38
39 check_cpp_compiler()
40 {
41 cat > $TEMP_DIR/test.cpp << __EOF__
42 /* test file */
43 #include <iostream>
44 int main(int argc, char **argv) {
45 #if defined(__GNUC__)
46 std::cout << "gcc" << std::endl;
47 #elif defined(__clang__)
48 std::cout << "clang" << std::endl;
49 #elif defined(__sun)
50 std::cout << "suncc" << std::endl;
51 #else
52 std::cout << "unknown" << std::endl;
53 #endif
54 return 0;
55 }
56 __EOF__
57 rm -f $TEMP_DIR/checkcc
58 $1 -o $TEMP_DIR/checkcc $CXXFLAGS $LDFLAGS $TEMP_DIR/test.cpp 2> /dev/null
31 59
32 if [ $? -ne 0 ]; then 60 if [ $? -ne 0 ]; then
33 return 1 61 return 1
34 fi 62 fi
35 return 0 63 return 0
36 } 64 }
37 65
38 printf "detect toolchain... " 66 printf "detect toolchain... "
39 67
40 for COMP in $COMPILERS 68 for COMP in $C_COMPILERS
41 do 69 do
42 check_compiler $COMP 70 check_c_compiler $COMP
43 if [ $? -ne 0 ]; then 71 if [ $? -ne 0 ]; then
44 if [ $COMP = $CC ]; then 72 if [[ ! -z $CC ]]; then
45 echo "$CC is not a working C Compiler" 73 if [ $COMP = $CC ]; then
46 TOOLCHAIN_DETECTION_ERROR="error" 74 echo "$CC is not a working C Compiler"
47 break 75 TOOLCHAIN_DETECTION_ERROR="error"
48 fi 76 break
77 fi
78 fi
49 else 79 else
50 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 80 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
81 if [ $COMP = "cc" ]; then
82 # we have found a working compiler, but in case
83 # the compiler is gcc or clang, we try to use
84 # these commands and not 'cc'
85 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
86 if [ $TOOLCHAIN_NAME = "gcc" ]; then
87 check_c_compiler "gcc"
88 if [ $? -eq 0 ]; then
89 COMP=gcc
90 fi
91 fi
92 if [ $TOOLCHAIN_NAME = "clang" ]; then
93 check_c_compiler "clang"
94 if [ $? -eq 0 ]; then
95 COMP=clang
96 fi
97 fi
98 fi
99
100 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
51 TOOLCHAIN_CC=$COMP 101 TOOLCHAIN_CC=$COMP
52 echo $TOOLCHAIN_NAME 102 echo $TOOLCHAIN_NAME
53 break 103 break
54 fi 104 fi
55 done 105 done
106 if [ -z $TOOLCHAIN_CC ]; then
107 echo "not found"
108 fi
109
110 printf "detect C++ compiler... "
111
112 for COMP in $CPP_COMPILERS
113 do
114 check_cpp_compiler $COMP
115 if [ $? -ne 0 ]; then
116 if [[ ! -z $CXX ]]; then
117 if [ $COMP = $CXX ]; then
118 echo "$CC is not a working C++ Compiler"
119 TOOLCHAIN_DETECTION_ERROR="error"
120 break
121 fi
122 fi
123 else
124 if [ $COMP = "CC" ]; then
125 # we have found a working compiler, but in case
126 # the compiler is gcc or clang, we try to use
127 # these commands and not 'cc'
128 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
129 if [ $TOOLCHAIN_NAME = "gcc" ]; then
130 check_c_compiler "gcc"
131 if [ $? -eq 0 ]; then
132 COMP=gcc
133 fi
134 fi
135 if [ $TOOLCHAIN_NAME = "clang" ]; then
136 check_c_compiler "clang"
137 if [ $? -eq 0 ]; then
138 COMP=clang
139 fi
140 fi
141 fi
142
143 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
144 TOOLCHAIN_CXX=$COMP
145 echo $TOOLCHAIN_NAME
146 break
147 fi
148 done
149 if [ -z $TOOLCHAIN_CXX ]; then
150 echo "not found"
151 fi
56 152
57 TOOLCHAIN_LD=$TOOLCHAIN_CC 153 TOOLCHAIN_LD=$TOOLCHAIN_CC
58 154
59 if [ -z TOOLCHAIN_NAME ]; then 155 if [ -z TOOLCHAIN_NAME ]; then
60 TOOLCHAIN_DETECTION_ERROR="error" 156 TOOLCHAIN_DETECTION_ERROR="error"
61 else 157 else
62 cat >> $TEMP_DIR/config.mk << __EOF__ 158 cat >> $TEMP_DIR/config.mk << __EOF__
63 # toolchain 159 # toolchain
64 __EOF__ 160 __EOF__
65 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk 161 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk
162 if [[ ! -z $TOOLCHAIN_CXX ]]; then
163 echo "CXX = ${TOOLCHAIN_CXX}" >> $TEMP_DIR/config.mk
164 fi
66 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk 165 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk
67 166
68 if [ -e "make/${TOOLCHAIN_NAME}.mk" ]; then 167 if [ -e "make/${TOOLCHAIN_NAME}.mk" ]; then
69 echo "include \$(BUILD_ROOT)make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk 168 echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk
70 fi 169 fi
71 fi 170 fi

mercurial