|
1 #!/bin/sh |
|
2 # |
|
3 # toolchain detection |
|
4 # |
|
5 |
|
6 COMPILERS="cc gcc clang suncc" |
|
7 unset CC_ARG_CHECKED |
|
8 unset TOOLCHAIN_DETECTION_ERROR |
|
9 unset TOOLCHAIN_NAME |
|
10 |
|
11 check_compiler() |
|
12 { |
|
13 cat > $TEMP_DIR/test.c << __EOF__ |
|
14 /* test file */ |
|
15 #include <stdio.h> |
|
16 int main(int argc, char **argv) { |
|
17 #if defined(__GNUC__) |
|
18 printf("gcc\n"); |
|
19 #elif defined(__clang__) |
|
20 printf("clang\n"); |
|
21 #elif defined(__sun) |
|
22 printf("suncc\n"); |
|
23 #else |
|
24 printf("unknown\n"); |
|
25 #endif |
|
26 return 0; |
|
27 } |
|
28 __EOF__ |
|
29 rm -f $TEMP_DIR/checkcc |
|
30 $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c |
|
31 |
|
32 if [ $? -ne 0 ]; then |
|
33 return 1 |
|
34 fi |
|
35 return 0 |
|
36 } |
|
37 |
|
38 printf "detect toolchain... " |
|
39 |
|
40 for COMP in $COMPILERS |
|
41 do |
|
42 check_compiler $COMP |
|
43 if [ $? -ne 0 ]; then |
|
44 if [ $COMP = $CC ]; then |
|
45 echo "$CC is not a working C Compiler" |
|
46 TOOLCHAIN_DETECTION_ERROR="error" |
|
47 break |
|
48 fi |
|
49 else |
|
50 TOOLCHAIN_NAME=`$TEMP_DIR/checkcc` |
|
51 TOOLCHAIN_CC=$COMP |
|
52 echo $TOOLCHAIN_NAME |
|
53 break |
|
54 fi |
|
55 done |
|
56 |
|
57 TOOLCHAIN_LD=$TOOLCHAIN_CC |
|
58 |
|
59 if [ -z TOOLCHAIN_NAME ]; then |
|
60 TOOLCHAIN_DETECTION_ERROR="error" |
|
61 else |
|
62 echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk |
|
63 echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk |
|
64 |
|
65 if [ -e "make/${TOOLCHAIN_NAME}.mk" ]; then |
|
66 echo "include \$(BUILD_ROOT)make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk |
|
67 fi |
|
68 fi |