Test_all_compilers.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/bin/sh -e
  2. export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
  3. export LANG="en_US.UTF-8"
  4. export LANGUAGE="en_US.UTF-8"
  5. export LC_CTYPE="en_US.UTF-8"
  6. export LC_NUMERIC="en_US.UTF-8"
  7. export LC_TIME="en_US.UTF-8"
  8. export LC_MESSAGES="en_US.UTF-8"
  9. unset CFLAGS CXXFLAGS
  10. cd "`dirname "$0"`"
  11. test -z "dashboard_model" && export dashboard_model=Experimental
  12. runTest() {
  13. CFLAGS="$1" CXXFLAGS="$1" ctest -S test.cmake || true
  14. }
  15. tested_compilers="lsakdfjwowleqirjodfisj"
  16. runAllTests() {
  17. # first make sure we don't test a compiler a second time
  18. id="`which $CXX`"
  19. id="`readlink -f $id`"
  20. echo "$id"|grep -qF "$tested_compilers" && return
  21. tested_compilers="$tested_compilers
  22. $id"
  23. # alright run the ctest script
  24. runTest
  25. supports32Bit && runTest -m32 || true
  26. supportsx32 && runTest -mx32 || true
  27. }
  28. supports32Bit() {
  29. test `uname -m` = "x86_64" || return 1
  30. CXX=${CXX:-c++}
  31. cat > /tmp/m32test.cpp <<END
  32. #include <algorithm>
  33. #include <string>
  34. #include <iostream>
  35. #include <cerrno>
  36. void foo(int x) { switch (x) { case 0x0A: break; case 0x0B: break; case 0x0C: break; case 0x0D: break; case 0x0E: break; } }
  37. int main() { std::cout << "Hello World!\n"; return 0; }
  38. END
  39. $CXX -m32 -o /tmp/m32test /tmp/m32test.cpp >/dev/null 2>&1 || return 1
  40. rm /tmp/m32test*
  41. return 0
  42. }
  43. supportsx32() {
  44. test `uname -m` = "x86_64" || return 1
  45. CXX=${CXX:-c++}
  46. cat > /tmp/mx32test.cpp <<END
  47. #include <algorithm>
  48. #include <string>
  49. #include <iostream>
  50. #include <cerrno>
  51. void foo(int x) { switch (x) { case 0x0A: break; case 0x0B: break; case 0x0C: break; case 0x0D: break; case 0x0E: break; } }
  52. int main() { std::cout << "Hello World!\n"; return 0; }
  53. END
  54. $CXX -mx32 -o /tmp/mx32test /tmp/mx32test.cpp >/dev/null 2>&1 || return 1
  55. rm /tmp/mx32test*
  56. return 0
  57. }
  58. system_compilers() {
  59. cxxlist="`find /usr/bin/ /usr/local/bin/ -name '*++-[0-9]*'|grep -v -- -linux-gnu`"
  60. if test -z "$cxxlist"; then
  61. cxxlist="`find /usr/bin/ /usr/local/bin/ -name '*++'|grep -v -- -linux-gnu`"
  62. fi
  63. if test -z "$cxxlist"; then
  64. # default compiler
  65. runAllTests
  66. else
  67. for CXX in $cxxlist; do
  68. CC=`echo "$CXX"|sed 's/clang++/clang/;s/g++/gcc/'`
  69. if test -x "$CC" -a -x "$CXX"; then
  70. export CC
  71. export CXX
  72. runAllTests
  73. fi
  74. done
  75. fi
  76. }
  77. modules_compilers() {
  78. if test -r /etc/profile.d/modules.sh; then
  79. source /etc/profile.d/modules.sh
  80. for mod in `module avail -t 2>&1`; do
  81. case `echo $mod|tr '[:upper:]' '[:lower:]'` in
  82. *intel*|*icc*) export CC=icc CXX=icpc;;
  83. *gnu*|*gcc*) export CC=gcc CXX=g++;;
  84. *llvm*|*clang*) export CC=clang CXX=clang++;;
  85. *) continue;;
  86. esac
  87. module load $mod
  88. runAllTests
  89. module unload $mod
  90. done
  91. fi
  92. }
  93. gccbuild_compilers() {
  94. for VcEnv in `find /opt/ -mindepth 2 -maxdepth 2 -name Vc.env`; do (
  95. . "$VcEnv"
  96. case "$VcEnv" in
  97. *-snapshot/Vc.env)
  98. ( cd $HOME/src/gcc-build && ./update.sh "`dirname "$VcEnv"`" )
  99. ;;
  100. esac
  101. runAllTests
  102. ) done
  103. }
  104. icc_compilers() {
  105. test -d /opt/intel || return
  106. export CC=icc
  107. export CXX=icpc
  108. icclist="`find /opt/intel/compiler* -name 'iccvars.sh' | xargs readlink -e | sort -ur`"
  109. case `uname -m` in
  110. x86_64)
  111. COMPILERVARS_ARCHITECTURE=intel64
  112. ;;
  113. i[345678]86)
  114. COMPILERVARS_ARCHITECTURE=ia32
  115. ;;
  116. esac
  117. export COMPILERVARS_ARCHITECTURE
  118. test -n "$icclist" && for IccEnv in $icclist; do (
  119. . $IccEnv $COMPILERVARS_ARCHITECTURE
  120. runAllTests
  121. ) done
  122. }
  123. system_compilers
  124. modules_compilers
  125. gccbuild_compilers
  126. icc_compilers