configure

changeset 48
c7b37d5e26cf
parent 45
2cb7fdd2ba18
equal deleted inserted replaced
47:c1046605091a 48:c7b37d5e26cf
110 --debug add extra compile flags for debug builds 110 --debug add extra compile flags for debug builds
111 --release add extra compile flags for release builds 111 --release add extra compile flags for release builds
112 112
113 Optional Features: 113 Optional Features:
114 --enable-static statically link libstdc++ 114 --enable-static statically link libstdc++
115 --enable-asan compile with address sanitizer
116 --enable-ubsan compile with undefined behavior sanitizer
115 117
116 __EOF__ 118 __EOF__
117 } 119 }
118 120
119 # create temporary directory 121 # create temporary directory
177 "--help"*) printhelp; abort_configure ;; 179 "--help"*) printhelp; abort_configure ;;
178 "--debug") BUILD_TYPE="debug" ;; 180 "--debug") BUILD_TYPE="debug" ;;
179 "--release") BUILD_TYPE="release" ;; 181 "--release") BUILD_TYPE="release" ;;
180 "--enable-static") FEATURE_STATIC=on ;; 182 "--enable-static") FEATURE_STATIC=on ;;
181 "--disable-static") unset FEATURE_STATIC ;; 183 "--disable-static") unset FEATURE_STATIC ;;
184 "--enable-asan") FEATURE_ASAN=on ;;
185 "--disable-asan") unset FEATURE_ASAN ;;
186 "--enable-ubsan") FEATURE_UBSAN=on ;;
187 "--disable-ubsan") unset FEATURE_UBSAN ;;
182 "-"*) echo "unknown option: $ARG"; abort_configure ;; 188 "-"*) echo "unknown option: $ARG"; abort_configure ;;
183 esac 189 esac
184 done 190 done
185 191
186 192
293 shift 299 shift
294 printf "$@" 300 printf "$@"
295 fi 301 fi
296 } 302 }
297 303
304 dependency_error_asan()
305 {
306 print_check_msg "$dep_checked_asan" "checking for asan... "
307 # dependency asan toolchain="gnuc"
308 while true
309 do
310 if notistoolchain "gnuc"; then
311 break
312 fi
313 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -fsanitize=address"
314 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address"
315 print_check_msg "$dep_checked_asan" "yes\n"
316 dep_checked_asan=1
317 return 1
318 done
319
320 print_check_msg "$dep_checked_asan" "no\n"
321 dep_checked_asan=1
322 return 0
323 }
298 dependency_error_static() 324 dependency_error_static()
299 { 325 {
300 print_check_msg "$dep_checked_static" "checking for static... " 326 print_check_msg "$dep_checked_static" "checking for static... "
301 # dependency static toolchain="gcc" 327 # dependency static toolchain="gnuc"
302 while true 328 while true
303 do 329 do
304 if notistoolchain "gcc"; then 330 if notistoolchain "gnuc"; then
305 break 331 break
306 fi 332 fi
307 TEMP_LDFLAGS="$TEMP_LDFLAGS -static" 333 TEMP_LDFLAGS="$TEMP_LDFLAGS -static"
308 print_check_msg "$dep_checked_static" "yes\n" 334 print_check_msg "$dep_checked_static" "yes\n"
309 dep_checked_static=1 335 dep_checked_static=1
310 return 1 336 return 1
311 done 337 done
312 338
313 # dependency static toolchain="clang"
314 while true
315 do
316 if notistoolchain "clang"; then
317 break
318 fi
319 TEMP_LDFLAGS="$TEMP_LDFLAGS -static"
320 print_check_msg "$dep_checked_static" "yes\n"
321 dep_checked_static=1
322 return 1
323 done
324
325 print_check_msg "$dep_checked_static" "no\n" 339 print_check_msg "$dep_checked_static" "no\n"
326 dep_checked_static=1 340 dep_checked_static=1
341 return 0
342 }
343 dependency_error_ubsan()
344 {
345 print_check_msg "$dep_checked_ubsan" "checking for ubsan... "
346 # dependency ubsan toolchain="gnuc"
347 while true
348 do
349 if notistoolchain "gnuc"; then
350 break
351 fi
352 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -fsanitize=undefined"
353 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined"
354 print_check_msg "$dep_checked_ubsan" "yes\n"
355 dep_checked_ubsan=1
356 return 1
357 done
358
359 print_check_msg "$dep_checked_ubsan" "no\n"
360 dep_checked_ubsan=1
327 return 0 361 return 0
328 } 362 }
329 363
330 # start collecting dependency information 364 # start collecting dependency information
331 echo > "$TEMP_DIR/flags.mk" 365 echo > "$TEMP_DIR/flags.mk"
408 if [ -n "$FEATURE_STATIC" ]; then 442 if [ -n "$FEATURE_STATIC" ]; then
409 : 443 :
410 else 444 else
411 : 445 :
412 fi 446 fi
447 if [ -n "$FEATURE_ASAN" ]; then
448 # check dependency
449 if dependency_error_asan ; then
450 # "auto" features can fail and are just disabled in this case
451 if [ "$FEATURE_ASAN" = "auto" ]; then
452 DISABLE_FEATURE_ASAN=1
453 else
454 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan "
455 ERROR=1
456 fi
457 fi
458 if [ -n "$DISABLE_FEATURE_ASAN" ]; then
459 unset FEATURE_ASAN
460 fi
461 fi
462 if [ -n "$FEATURE_ASAN" ]; then
463 :
464 else
465 :
466 fi
467 if [ -n "$FEATURE_UBSAN" ]; then
468 # check dependency
469 if dependency_error_ubsan ; then
470 # "auto" features can fail and are just disabled in this case
471 if [ "$FEATURE_UBSAN" = "auto" ]; then
472 DISABLE_FEATURE_UBSAN=1
473 else
474 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan "
475 ERROR=1
476 fi
477 fi
478 if [ -n "$DISABLE_FEATURE_UBSAN" ]; then
479 unset FEATURE_UBSAN
480 fi
481 fi
482 if [ -n "$FEATURE_UBSAN" ]; then
483 :
484 else
485 :
486 fi
413 487
414 488
415 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 489 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
416 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 490 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
417 fi 491 fi
498 if [ -n "$FEATURE_STATIC" ]; then 572 if [ -n "$FEATURE_STATIC" ]; then
499 echo " static: on" 573 echo " static: on"
500 else 574 else
501 echo " static: off" 575 echo " static: off"
502 fi 576 fi
577 if [ -n "$FEATURE_ASAN" ]; then
578 echo " asan: on"
579 else
580 echo " asan: off"
581 fi
582 if [ -n "$FEATURE_UBSAN" ]; then
583 echo " ubsan: on"
584 else
585 echo " ubsan: off"
586 fi
503 echo 587 echo
504 588
505 # generate the config.mk file 589 # generate the config.mk file
506 pwd=`pwd` 590 pwd=`pwd`
507 cat > "$TEMP_DIR/config.mk" << __EOF__ 591 cat > "$TEMP_DIR/config.mk" << __EOF__

mercurial