diff --git a/CMakeLists.txt b/CMakeLists.txt index b5789119a..936a64e58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,7 @@ if (MSVC OR NOT NOFORTRAN) add_subdirectory(utest) endif() -if (NOT MSVC AND NOT NOFORTRAN) +if ((NOT MSVC OR NOT BUILD_WITHOUT_LAPACK) AND NOT NOFORTRAN) # Build test and ctest add_subdirectory(test) if(NOT NO_CBLAS) diff --git a/appveyor.yml b/appveyor.yml index 141d3a130..b7fc9b401 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -30,10 +30,9 @@ environment: CONDA_INSTALL_LOCN: C:\\Miniconda36-x64 matrix: - COMPILER: clang-cl - WITH_FORTRAN: yes + FORTRAN: ON - COMPILER: clang-cl DYNAMIC_ARCH: ON - WITH_FORTRAN: no - COMPILER: cl install: @@ -41,9 +40,9 @@ install: - if [%COMPILER%]==[clang-cl] conda config --add channels conda-forge --force - if [%COMPILER%]==[clang-cl] conda install --yes --quiet clangdev cmake - - if [%WITH_FORTRAN%]==[no] conda install --yes --quiet ninja - - if [%WITH_FORTRAN%]==[yes] conda install --yes --quiet -c isuruf kitware-ninja - - if [%WITH_FORTRAN%]==[yes] conda install --yes --quiet flang + - if [%FORTRAN%]==[] conda install --yes --quiet ninja + - if [%FORTRAN%]==[ON] conda install --yes --quiet -c isuruf kitware-ninja + - if [%FORTRAN%]==[ON] conda install --yes --quiet flang - if [%COMPILER%]==[clang-cl] call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 - if [%COMPILER%]==[clang-cl] set "LIB=%CONDA_INSTALL_LOCN%\Library\lib;%LIB%" @@ -52,15 +51,14 @@ install: before_build: - ps: if (-Not (Test-Path .\build)) { mkdir build } - cd build - - if [%COMPILER%]==[cl] cmake -G "Visual Studio 15 2017 Win64" .. - - if [%WITH_FORTRAN%]==[no] cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl .. - - if [%WITH_FORTRAN%]==[yes] cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_Fortran_COMPILER=flang -DBUILD_WITHOUT_LAPACK=no -DNOFORTRAN=0 .. + - if [%COMPILER%]==[cl] cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release .. + - if [%FORTRAN%]==[] cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=Release .. + - if [%FORTRAN%]==[ON] cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_Fortran_COMPILER=flang -DBUILD_WITHOUT_LAPACK=OFF -DCMAKE_BUILD_TYPE=Release .. - if [%DYNAMIC_ARCH%]==[ON] cmake -DDYNAMIC_ARCH=ON .. build_script: - cmake --build . + test_script: - - echo Running Test - - cd utest - - openblas_utest + - ctest -VV diff --git a/ctest/CMakeLists.txt b/ctest/CMakeLists.txt index 14c9d1944..873d2ea1a 100644 --- a/ctest/CMakeLists.txt +++ b/ctest/CMakeLists.txt @@ -5,10 +5,6 @@ enable_language(Fortran) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DADD${BU} -DCBLAS") -FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh -"$1 < $2\n" -) - foreach(float_type ${FLOAT_TYPES}) string(SUBSTRING ${float_type} 0 1 float_char_upper) string(TOLOWER ${float_char_upper} float_char) @@ -18,7 +14,7 @@ foreach(float_type ${FLOAT_TYPES}) c_${float_char}blas1.c) target_link_libraries(x${float_char}cblat1 ${OpenBLAS_LIBNAME}) add_test(NAME "x${float_char}cblat1" - COMMAND "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat1") + COMMAND "$") #level2 add_executable(x${float_char}cblat2 @@ -30,7 +26,11 @@ foreach(float_type ${FLOAT_TYPES}) constant.c) target_link_libraries(x${float_char}cblat2 ${OpenBLAS_LIBNAME}) add_test(NAME "x${float_char}cblat2" - COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat2" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in2") + COMMAND ${CMAKE_COMMAND} + "-DTEST_COMMAND=$" + "-DTEST_INPUT=${PROJECT_SOURCE_DIR}/ctest/${float_char}in2" + -P "${CMAKE_CURRENT_SOURCE_DIR}/test_cblas_helper.cmake" + ) #level3 add_executable(x${float_char}cblat3 @@ -42,6 +42,10 @@ foreach(float_type ${FLOAT_TYPES}) constant.c) target_link_libraries(x${float_char}cblat3 ${OpenBLAS_LIBNAME}) add_test(NAME "x${float_char}cblat3" - COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/x${float_char}cblat3" "${PROJECT_SOURCE_DIR}/ctest/${float_char}in3") + COMMAND ${CMAKE_COMMAND} + "-DTEST_COMMAND=$" + "-DTEST_INPUT=${PROJECT_SOURCE_DIR}/ctest/${float_char}in3" + -P "${CMAKE_CURRENT_SOURCE_DIR}/test_cblas_helper.cmake" + ) endforeach() diff --git a/ctest/c_xerbla.c b/ctest/c_xerbla.c index 9c5357653..91d07e047 100644 --- a/ctest/c_xerbla.c +++ b/ctest/c_xerbla.c @@ -81,7 +81,7 @@ void cblas_xerbla(blasint info, char *rout, char *form, ...) printf("***** XERBLA WAS CALLED WITH INFO = %d INSTEAD OF %d in %s *******\n",info, cblas_info, rout); cblas_lerr = PASSED; cblas_ok = FALSE; - } else cblas_lerr = FAILED; + } else cblas_lerr = OPENBLAS_FAILED; } #ifdef F77_Char diff --git a/ctest/cblas_test.h b/ctest/cblas_test.h index 3eeb46ac2..5dd75c6d9 100644 --- a/ctest/cblas_test.h +++ b/ctest/cblas_test.h @@ -15,7 +15,9 @@ #define TEST_ROW_MJR 1 #define FALSE 0 -#define FAILED 0 + +/* Needed because failed is already defined on MSVC */ +#define OPENBLAS_FAILED 0 #define TEST_COL_MJR 0 #define INVALID -1 diff --git a/ctest/test_cblas_helper.cmake b/ctest/test_cblas_helper.cmake new file mode 100644 index 000000000..06d116dce --- /dev/null +++ b/ctest/test_cblas_helper.cmake @@ -0,0 +1,3 @@ +execute_process(COMMAND ${TEST_COMMAND} + INPUT_FILE ${TEST_INPUT} +) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index adeee3452..f5cbd544d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,26 +14,23 @@ add_executable(${test_bin} ${test_bin}.f) target_link_libraries(${test_bin} ${OpenBLAS_LIBNAME}) endforeach() -# $1 exec, $2 input, $3 output_result -FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_helper.sh -"rm -f $3\n" -"$1 < $2\n" -"grep -q FATAL $3\n" -"if [ $? -eq 0 ]; then\n" -"echo Error\n" -"exit 1\n" -"else\n" -"exit 0\n" -"fi\n" -) - set(float_types s d c z) foreach(float_type ${float_types}) -string(TOUPPER ${float_type} float_type_upper) -add_test(NAME "${float_type}blas1" - COMMAND "${CMAKE_CURRENT_BINARY_DIR}/${float_type}blat1") -add_test(NAME "${float_type}blas2" - COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/${float_type}blat2" "${PROJECT_SOURCE_DIR}/test/${float_type}blat2.dat" ${float_type_upper}BLAT2.SUMM) -add_test(NAME "${float_type}blas3" - COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/test_helper.sh" "${CMAKE_CURRENT_BINARY_DIR}/${float_type}blat3" "${PROJECT_SOURCE_DIR}/test/${float_type}blat3.dat" ${float_type_upper}BLAT3.SUMM) -endforeach() + string(TOUPPER ${float_type} float_type_upper) + add_test(NAME "${float_type}blas1" + COMMAND "$") + add_test(NAME "${float_type}blas2" + COMMAND ${CMAKE_COMMAND} + "-DTEST_COMMAND=$" + "-DTEST_INPUT=${PROJECT_SOURCE_DIR}/test/${float_type}blat2.dat" + "-DTEST_FILE=${CMAKE_BINARY_DIR}/test/${float_type}blas2/${float_type_upper}BLAT2.SUMM" + -P "${CMAKE_CURRENT_SOURCE_DIR}/test_helper.cmake" + ) + add_test(NAME "${float_type}blas3" + COMMAND ${CMAKE_COMMAND} + "-DTEST_COMMAND=$" + "-DTEST_INPUT=${PROJECT_SOURCE_DIR}/test/${float_type}blat3.dat" + "-DTEST_FILE=${CMAKE_BINARY_DIR}/test/${float_type}blas2/${float_type_upper}BLAT3.SUMM" + -P "${CMAKE_CURRENT_SOURCE_DIR}/test_helper.cmake" + ) + endforeach() diff --git a/test/test_helper.cmake b/test/test_helper.cmake new file mode 100644 index 000000000..6dfe63a78 --- /dev/null +++ b/test/test_helper.cmake @@ -0,0 +1,12 @@ +get_filename_component(TEST_DIRECTORY ${TEST_FILE} DIRECTORY) +file(MAKE_DIRECTORY ${TEST_DIRECTORY}) +file(REMOVE ${TEST_FILE}) +execute_process(COMMAND ${TEST_COMMAND} + INPUT_FILE ${TEST_INPUT} + WORKING_DIRECTORY ${TEST_DIRECTORY} +) +FILE(READ ${TEST_FILE} TEST_FILE_CONTENTS) +STRING(FIND "${TEST_FILE_CONTENTS}" "FATAL" CONTAINS_FATAL) +IF(NOT (${CONTAINS_FATAL} EQUAL -1)) + MESSAGE(FATAL_ERROR "Error") +ENDIF() \ No newline at end of file