make/toolchain.sh

branch
webdav
changeset 260
4779a6fb4fbe
parent 209
a6d8181a8127
child 515
2c3fe06a9210
equal deleted inserted replaced
259:0b8692959d37 260:4779a6fb4fbe
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(__GNUC__) 18 #if defined(__clang__)
19 printf("gcc\n"); 19 printf("clang\n");
20 #elif defined(__clang__) 20 #elif defined(__GNUC__)
21 printf("clang\n"); 21 printf("gcc\n");
22 #elif defined(__sun) 22 #elif defined(__sun)
23 printf("suncc\n"); 23 printf("suncc\n");
24 #else 24 #else
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(__GNUC__) 45 #if defined(__clang__)
46 std::cout << "gcc" << std::endl; 46 std::cout << "clang" << std::endl;
47 #elif defined(__clang__) 47 #elif defined(__GNUC__)
48 std::cout << "clang" << std::endl; 48 std::cout << "gcc" << std::endl;
49 #elif defined(__sun) 49 #elif defined(__sun)
50 std::cout << "suncc" << std::endl; 50 std::cout << "suncc" << std::endl;
51 #else 51 #else
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
64 } 64 }
65 65
66 printf "detect C compiler... " 66 printf "detect C compiler... "
67 67
68 for COMP in $C_COMPILERS 68 for COMP in $C_COMPILERS
69 do 69 do
70 check_c_compiler $COMP 70 check_c_compiler $COMP
71 if [ $? -ne 0 ]; then 71 if [ $? -ne 0 ]; then
72 if [ ! -z "$CC" ]; then 72 if [ ! -z "$CC" ]; then
73 if [ $COMP = $CC ]; then 73 if [ $COMP = $CC ]; then
74 echo "$CC is not a working C Compiler" 74 echo "$CC is not a working C Compiler"
75 TOOLCHAIN_DETECTION_ERROR="error" 75 TOOLCHAIN_DETECTION_ERROR="error"
76 break 76 break
77 fi 77 fi
78 fi 78 fi
79 else 79 else
80 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 80 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
81 USE_TOOLCHAIN=$TOOLCHAIN_NAME
81 if [ $COMP = "cc" ]; then 82 if [ $COMP = "cc" ]; then
82 # we have found a working compiler, but in case 83 # we have found a working compiler, but in case
83 # the compiler is gcc or clang, we try to use 84 # the compiler is gcc or clang, we try to use
84 # these commands and not 'cc' 85 # these commands and not 'cc'
85 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 86 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
86 if [ $TOOLCHAIN_NAME = "gcc" ]; then 87 if [ $TOOLCHAIN_NAME = "gcc" ]; then
87 check_c_compiler "gcc" 88 check_c_compiler "gcc"
88 if [ $? -eq 0 ]; then 89 if [ $? -eq 0 ]; then
89 COMP=gcc 90 COMP=gcc
90 fi 91 USE_TOOLCHAIN="gcc"
91 fi 92 fi
92 if [ $TOOLCHAIN_NAME = "clang" ]; then 93 fi
93 check_c_compiler "clang" 94 if [ $TOOLCHAIN_NAME = "clang" ]; then
94 if [ $? -eq 0 ]; then 95 check_c_compiler "clang"
95 COMP=clang 96 if [ $? -eq 0 ]; then
96 fi 97 COMP=clang
97 fi 98 USE_TOOLCHAIN="clang"
99 fi
100 fi
98 fi 101 fi
99 102
100 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 103 TOOLCHAIN_NAME=$USE_TOOLCHAIN
101 TOOLCHAIN_CC=$COMP 104 TOOLCHAIN_CC=$COMP
102 echo $COMP 105 echo $COMP
103 break 106 break
104 fi 107 fi
105 done 108 done
106 if [ -z $TOOLCHAIN_CC ]; then 109 if [ -z $TOOLCHAIN_CC ]; then
107 echo "not found" 110 echo "not found"
108 fi 111 fi
109 112
110 printf "detect C++ compiler... " 113 printf "detect C++ compiler... "
111 114
112 for COMP in $CPP_COMPILERS 115 for COMP in $CPP_COMPILERS
113 do 116 do
114 check_cpp_compiler $COMP 117 check_cpp_compiler $COMP
115 if [ $? -ne 0 ]; then 118 if [ $? -ne 0 ]; then
116 if [ ! -z "$CXX" ]; then 119 if [ ! -z "$CXX" ]; then
117 if [ $COMP = $CXX ]; then 120 if [ $COMP = $CXX ]; then
118 echo "$CC is not a working C++ Compiler" 121 echo "$CC is not a working C++ Compiler"
119 TOOLCHAIN_DETECTION_ERROR="error" 122 TOOLCHAIN_DETECTION_ERROR="error"
120 break 123 break
121 fi 124 fi
122 fi 125 fi
123 else 126 else
124 if [ $COMP = "CC" ]; then 127 if [ $COMP = "CC" ]; then
125 # we have found a working compiler, but in case 128 # we have found a working compiler, but in case
126 # the compiler is gcc or clang, we try to use 129 # the compiler is gcc or clang, we try to use
127 # these commands and not 'cc' 130 # these commands and not 'cc'
128 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 131 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
129 if [ $TOOLCHAIN_NAME = "gcc" ]; then 132 USE_TOOLCHAIN=$TOOLCHAIN_NAME
130 check_cpp_compiler "g++" 133 if [ $TOOLCHAIN_NAME = "gcc" ]; then
131 if [ $? -eq 0 ]; then 134 check_cpp_compiler "g++"
132 COMP=g++ 135 if [ $? -eq 0 ]; then
133 fi 136 COMP=g++
134 fi 137 USE_TOOLCHAIN="gcc"
135 if [ $TOOLCHAIN_NAME = "clang" ]; then 138 fi
136 check_cpp_compiler "clang++" 139 fi
137 if [ $? -eq 0 ]; then 140 if [ $TOOLCHAIN_NAME = "clang" ]; then
138 COMP=clang++ 141 check_cpp_compiler "clang++"
139 fi 142 if [ $? -eq 0 ]; then
140 fi 143 COMP=clang++
144 USE_TOOLCHAIN="clang"
145 fi
146 fi
141 fi 147 fi
142 148
143 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` 149 TOOLCHAIN_NAME=$USE_TOOLCHAIN
144 TOOLCHAIN_CXX=$COMP 150 TOOLCHAIN_CXX=$COMP
145 echo $COMP 151 echo $COMP
146 break 152 break
147 fi 153 fi
148 done 154 done
149 if [ -z $TOOLCHAIN_CXX ]; then 155 if [ -z $TOOLCHAIN_CXX ]; then
150 echo "not found" 156 echo "not found"
151 fi 157 fi
152 158
153 TOOLCHAIN_LD=$TOOLCHAIN_CC 159 TOOLCHAIN_LD=$TOOLCHAIN_CC
154 160
155 if [ -z "$TOOLCHAIN_NAME" ]; then 161 if [ -z "$TOOLCHAIN_NAME" ]; then
156 TOOLCHAIN_DETECTION_ERROR="error" 162 TOOLCHAIN_DETECTION_ERROR="error"
157 else 163 else
158 cat >> $TEMP_DIR/config.mk << __EOF__ 164 cat >> $TEMP_DIR/config.mk << __EOF__
159 # toolchain 165 # toolchain
160 __EOF__ 166 __EOF__
161 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk 167 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk
162 if [ ! -z "$TOOLCHAIN_CXX" ]; then 168 if [ ! -z "$TOOLCHAIN_CXX" ]; then
163 echo "CXX = ${TOOLCHAIN_CXX}" >> $TEMP_DIR/config.mk 169 echo "CXX = ${TOOLCHAIN_CXX}" >> $TEMP_DIR/config.mk
164 fi 170 fi
165 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk 171 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk
166 172 echo >> $TEMP_DIR/config.mk
173
167 cat "make/${TOOLCHAIN_NAME}.mk" > /dev/null 2>&1 174 cat "make/${TOOLCHAIN_NAME}.mk" > /dev/null 2>&1
168 if [ $? -eq 0 ]; then 175 if [ $? -eq 0 ]; then
169 echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk 176 echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk
170 fi 177 else
178 echo "SHLIB_CFLAGS = -fPIC" >> $TEMP_DIR/config.mk
179 echo "SHLIB_LDFLAGS = -shared" >> $TEMP_DIR/config.mk
180 fi
171 fi 181 fi

mercurial