44 #elif defined(__GNUC__) |
42 #elif defined(__GNUC__) |
45 std::cout << "gcc" << std::endl; |
43 std::cout << "gcc" << std::endl; |
46 #elif defined(__sun) |
44 #elif defined(__sun) |
47 std::cout << "suncc" << std::endl; |
45 std::cout << "suncc" << std::endl; |
48 #else |
46 #else |
49 std::cout << "unknown" << std::endl; |
47 std::cout << "cc" << std::endl; |
50 #endif |
48 #endif |
51 return 0; |
49 return 0; |
52 } |
50 } |
53 __EOF__ |
51 __EOF__ |
54 rm -f "$TEMP_DIR/checkcc" |
52 rm -f "$TEMP_DIR/checkcc" |
55 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
53 $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null |
56 } |
54 } |
57 |
55 |
58 check_lib() |
56 check_c_lib() |
59 { |
57 { |
60 if [ -z "$TOOLCHAIN_LD" ]; then |
58 if [ -z "$TOOLCHAIN_CC" ]; then |
61 return 1 |
59 return 1 |
62 fi |
60 fi |
63 cat > "$TEMP_DIR/test.c" << __EOF__ |
61 cat > "$TEMP_DIR/test.c" << __EOF__ |
64 /* libtest file */ |
62 /* libtest file */ |
65 int main(int argc, char **argv) { |
63 int main(int argc, char **argv) { |
66 return 0; |
64 return 0; |
67 } |
65 } |
68 __EOF__ |
66 __EOF__ |
69 rm -f "$TEMP_DIR/checklib" |
67 rm -f "$TEMP_DIR/checklib" |
70 $TOOLCHAIN_LD -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null |
68 $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null |
71 } |
69 } |
72 |
70 |
73 printf "detect C compiler... " |
71 check_cpp_lib() |
|
72 { |
|
73 if [ -z "$TOOLCHAIN_CXX" ]; then |
|
74 return 1 |
|
75 fi |
|
76 cat > "$TEMP_DIR/test.cpp" << __EOF__ |
|
77 /* libtest file */ |
|
78 int main(int argc, char **argv) { |
|
79 return 0; |
|
80 } |
|
81 __EOF__ |
|
82 rm -f "$TEMP_DIR/checklib" |
|
83 $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null |
|
84 } |
74 |
85 |
75 if [ -n "$CC" ]; then |
86 check_lib() |
76 if check_c_compiler "$CC"; then |
87 { |
77 TOOLCHAIN_CC=$CC |
88 if [ -n "$TOOLCHAIN_CC" ]; then |
78 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
89 check_c_lib "$1" |
79 echo $CC |
90 elif [ -n "$TOOLCHAIN_CXX" ]; then |
|
91 check_cpp_lib "$1" |
|
92 fi |
|
93 } |
|
94 |
|
95 detect_c_compiler() |
|
96 { |
|
97 if [ -n "$TOOLCHAIN_CC" ]; then |
|
98 return 0 |
|
99 fi |
|
100 printf "detect C compiler... " |
|
101 if [ -n "$CC" ]; then |
|
102 if check_c_compiler "$CC"; then |
|
103 TOOLCHAIN_CC=$CC |
|
104 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
|
105 echo "$CC" |
|
106 return 0 |
|
107 else |
|
108 echo "$CC is not a working C compiler" |
|
109 return 1 |
|
110 fi |
80 else |
111 else |
81 echo "$CC is not a working C compiler" |
112 for COMP in $C_COMPILERS |
82 TOOLCHAIN_ERROR="required C compiler not found" |
113 do |
|
114 if check_c_compiler "$COMP"; then |
|
115 TOOLCHAIN_CC=$COMP |
|
116 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
|
117 echo "$COMP" |
|
118 return 0 |
|
119 fi |
|
120 done |
|
121 echo "not found" |
|
122 return 1 |
83 fi |
123 fi |
84 else |
124 } |
85 for COMP in $C_COMPILERS |
125 |
86 do |
126 detect_cpp_compiler() |
87 if check_c_compiler "$COMP"; then |
127 { |
|
128 if [ -n "$TOOLCHAIN_CXX" ]; then |
|
129 return 0 |
|
130 fi |
|
131 printf "detect C++ compiler... " |
|
132 |
|
133 if [ -n "$CXX" ]; then |
|
134 if check_cpp_compiler "$CXX"; then |
|
135 TOOLCHAIN_CXX=$CXX |
88 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
136 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
89 TOOLCHAIN_CC=$COMP |
137 echo "$CXX" |
90 break |
138 return 0 |
|
139 else |
|
140 echo "$CXX is not a working C++ compiler" |
|
141 return 1 |
91 fi |
142 fi |
92 done |
143 else |
93 echo ${TOOLCHAIN_CC:-"not found"} |
144 for COMP in $CPP_COMPILERS |
94 fi |
145 do |
|
146 if check_cpp_compiler "$COMP"; then |
|
147 TOOLCHAIN_CXX=$COMP |
|
148 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
|
149 echo "$COMP" |
|
150 return 0 |
|
151 fi |
|
152 done |
|
153 echo "${TOOLCHAIN_CXX:-"not found"}" |
|
154 return 1 |
|
155 fi |
|
156 } |
95 |
157 |
96 printf "detect C++ compiler... " |
158 write_toolchain_defaults() |
97 |
159 { |
98 if [ -n "$CXX" ]; then |
160 echo "# toolchain" >> "$1" |
99 if check_cpp_compiler "$CXX"; then |
161 if [ -n "$TOOLCHAIN_CC" ]; then |
100 TOOLCHAIN_CXX=$CXX |
162 echo "CC = ${TOOLCHAIN_CC}" >> "$1" |
101 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
163 fi |
102 echo $CXX |
164 if [ -n "$TOOLCHAIN_CXX" ]; then |
|
165 echo "CXX = ${TOOLCHAIN_CXX}" >> "$1" |
|
166 fi |
|
167 echo >> "$1" |
|
168 if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then |
|
169 cat "make/${TOOLCHAIN_NAME}.mk" >> "$1" |
103 else |
170 else |
104 echo "$CXX is not a working C++ compiler" |
171 echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete." |
105 TOOLCHAIN_ERROR="required C++ compiler not found" |
|
106 fi |
172 fi |
107 else |
173 } |
108 for COMP in $CPP_COMPILERS |
|
109 do |
|
110 if check_cpp_compiler "$COMP"; then |
|
111 TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` |
|
112 TOOLCHAIN_CXX=$COMP |
|
113 break |
|
114 fi |
|
115 done |
|
116 echo ${TOOLCHAIN_CXX:-"not found"} |
|
117 fi |
|
118 |
|
119 printf "detect linker... " |
|
120 TOOLCHAIN_LD=$TOOLCHAIN_CC |
|
121 echo "$TOOLCHAIN_LD" |
|
122 |
|
123 if [ -z "$TOOLCHAIN_NAME" ]; then |
|
124 TOOLCHAIN_ERROR="no build tools detected" |
|
125 else |
|
126 cat >> "$TEMP_DIR/config.mk" << __EOF__ |
|
127 |
|
128 # toolchain |
|
129 __EOF__ |
|
130 echo "CC = ${TOOLCHAIN_CC}" >> "$TEMP_DIR/config.mk" |
|
131 if [ -n "$TOOLCHAIN_CXX" ]; then |
|
132 echo "CXX = ${TOOLCHAIN_CXX}" >> "$TEMP_DIR/config.mk" |
|
133 fi |
|
134 echo "LD = ${TOOLCHAIN_LD}" >> "$TEMP_DIR/config.mk" |
|
135 echo >> "$TEMP_DIR/config.mk" |
|
136 |
|
137 if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then |
|
138 cat "make/${TOOLCHAIN_NAME}.mk" >> "$TEMP_DIR/config.mk" |
|
139 else |
|
140 cat >> "$TEMP_DIR/config.mk" << __EOF__ |
|
141 CFLAGS = |
|
142 DEBUG_FLAGS = -g |
|
143 RELEASE_FLAGS = -O3 -DNDEBUG |
|
144 LDFLAGS = |
|
145 |
|
146 SHLIB_CFLAGS = -fPIC |
|
147 SHLIB_LDFLAGS = -shared |
|
148 __EOF__ |
|
149 fi |
|
150 fi |
|