diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..ea5673017 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,26 @@ +install: +- set "CONDA_INSTALL_LOCN=C:\\Miniconda36-x64" +- call %CONDA_INSTALL_LOCN%\Scripts\activate.bat +- conda update --yes --quiet conda +- conda config --add channels conda-forge +- conda install --yes clangdev posix m2-make pthreads-win32 +- call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 +- set "LIB=%CONDA_INSTALL_LOCN%\Library\lib;%LIB%" +- set "CPATH=%CONDA_INSTALL_LOCN%\Library\include;%CPATH%" + +build_script: +- set CC=clang +- set RANLIB=echo +- set AR=llvm-ar +- set AS=llvm-as +- set LIBPTHREAD=-lpthreads +- bash -lc "source activate && cd /c/projects/blis && ./configure --disable-shared intel64 && make AR=llvm-ar CPICFLAGS= LIBM= LIBPTHREAD=-lpthreads -j4" + +test_script: +- bash -lc "source activate && cd /c/projects/blis && make AR=llvm-ar CPICFLAGS= LIBM= LIBPTHREAD=-lpthreads check" + +# Enable this to be able to login to the build worker. You can use the +# `remmina` program in Ubuntu, use the login information that the line below +# prints into the log. +#on_finish: +#- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff --git a/blastest/f2c/f2c_config.h b/blastest/f2c/f2c_config.h index 285c76af0..af39bbe5d 100644 --- a/blastest/f2c/f2c_config.h +++ b/blastest/f2c/f2c_config.h @@ -26,10 +26,14 @@ #define HAVE_FORK 1 /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#if !defined(_MSC_VER) #define HAVE_FSEEKO 1 +#endif /* Define to 1 if you have the `ftruncate' function. */ +#if !defined(_MSC_VER) #define HAVE_FTRUNCATE 1 +#endif /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 @@ -181,3 +185,7 @@ /* Define as `fork' if `vfork' does not work. */ /* #undef vfork */ + +#ifdef _MSC_VER +#define NON_UNIX_STDIO 1 +#endif \ No newline at end of file diff --git a/blastest/f2c/f2c_types_win.h b/blastest/f2c/f2c_types_win.h new file mode 100644 index 000000000..c9f13ebe3 --- /dev/null +++ b/blastest/f2c/f2c_types_win.h @@ -0,0 +1,89 @@ +/* include/f2c.h. Generated from f2c.h.in by configure. */ +/* f2c.h -- Standard Fortran to C header file */ + +/** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." + + - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ + +#ifndef F2C_TYPES_WIN_H +#define F2C_TYPES_WIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Define to the number of bits in an integer */ +#define F2C_INT_BITS 32 + +/* Define to the number of bits in a long integer */ +#define F2C_LONG_BITS 64 + +typedef int integer; +typedef unsigned int uinteger; +typedef __int64 longint; +typedef unsigned __int64 ulongint; +/*#define INTEGER_STAR_8*/ + +typedef char integer1; +typedef char *address; +typedef short int shortint; +typedef float real; +typedef double doublereal; +typedef struct { real r, i; } complex; +typedef struct { doublereal r, i; } doublecomplex; +typedef integer logical; +typedef shortint shortlogical; +typedef integer1 logical1; + +#ifdef f2c_i2 +/* for -i2 */ +typedef short flag; +typedef short ftnlen; +typedef short ftnint; +#else +typedef integer flag; +typedef integer ftnlen; +typedef integer ftnint; +#endif + +/* procedure parameter types for -A and -C++ */ + +#define F2C_proc_par_types 1 +#ifdef __cplusplus +typedef int /* Unknown procedure type */ (*U_fp)(...); +typedef shortint (*J_fp)(...); +typedef integer (*I_fp)(...); +typedef real (*R_fp)(...); +typedef doublereal (*D_fp)(...), (*E_fp)(...); +typedef /* Complex */ void (*C_fp)(...); +typedef /* Double Complex */ void (*Z_fp)(...); +typedef logical (*L_fp)(...); +typedef shortlogical (*K_fp)(...); +typedef /* Character */ void (*H_fp)(...); +typedef /* Subroutine */ int (*S_fp)(...); +#else +typedef int /* Unknown procedure type */ (*U_fp)(); +typedef shortint (*J_fp)(); +typedef integer (*I_fp)(); +typedef real (*R_fp)(); +typedef doublereal (*D_fp)(), (*E_fp)(); +typedef /* Complex */ void (*C_fp)(); +typedef /* Double Complex */ void (*Z_fp)(); +typedef logical (*L_fp)(); +typedef shortlogical (*K_fp)(); +typedef /* Character */ void (*H_fp)(); +typedef /* Subroutine */ int (*S_fp)(); +#endif +/* E_fp is for real functions when -R is not specified */ +typedef void C_f; /* complex function */ +typedef void H_f; /* character function */ +typedef void Z_f; /* double complex function */ +typedef doublereal E_f; /* real function with -R not specified */ + + +#ifdef __cplusplus +} +#endif + +#endif /* F2C_TYPES_H */ + diff --git a/blastest/f2c/open.c b/blastest/f2c/open.c index 848384bc3..e58b445ae 100644 --- a/blastest/f2c/open.c +++ b/blastest/f2c/open.c @@ -27,6 +27,9 @@ use or performance of this software. #ifndef NON_UNIX_STDIO #include #endif +#ifdef _MSC_VER +#define access _access +#endif #include "f2c.h" #include "fio.h" diff --git a/common.mk b/common.mk index e383c0d5f..dfedbdb2d 100644 --- a/common.mk +++ b/common.mk @@ -484,7 +484,7 @@ LDFLAGS += -fopenmp endif ifeq ($(THREADING_MODEL),pthreads) CTHREADFLAGS := -pthread -LDFLAGS += -lpthread +LDFLAGS += $(LIBPTHREAD) endif endif @@ -498,7 +498,7 @@ LDFLAGS += -fopenmp endif ifeq ($(THREADING_MODEL),pthreads) CTHREADFLAGS := -pthread -LDFLAGS += -lpthread +LDFLAGS += $(LIBPTHREAD) endif endif @@ -512,7 +512,7 @@ LDFLAGS += -fopenmp endif ifeq ($(THREADING_MODEL),pthreads) CTHREADFLAGS := -pthread -LDFLAGS += -lpthread +LDFLAGS += $(LIBPTHREAD) endif endif diff --git a/config/knc/make_defs.mk b/config/knc/make_defs.mk index 8ca767bf3..7e9b04636 100644 --- a/config/knc/make_defs.mk +++ b/config/knc/make_defs.mk @@ -77,7 +77,7 @@ LDFLAGS := -mmic # Never use libm with Intel compilers. ifneq ($(CC_VENDOR),icc) -LDFLAGS += -lm +LDFLAGS += $(LIBM) endif # Store all of the variables here to new variables containing the diff --git a/configure b/configure index 62f722e1b..906032549 100755 --- a/configure +++ b/configure @@ -914,7 +914,7 @@ auto_detect() # Set the linker flags. We need pthreads because it is needed for # parts of bli_arch.c unrelated to bli_arch_string(), which is called # by the main() function in ${main_c}. - ldflags="-lpthread" + ldflags="${LIBPTHREAD:--lpthread}" # Compile the auto-detect program using source code inside the # framework. @@ -1027,7 +1027,7 @@ echoerr_unsupportedcc() get_binutils_version() { - binutil="as" + binutil=${AS:-as} # Query the full binutils version string output. This includes the # version string along with (potentially) a bunch of other textual @@ -2270,6 +2270,8 @@ main() dist_path_esc=$(echo "${dist_path}" | sed 's/\//\\\//g') cc_esc=$(echo "${found_cc}" | sed 's/\//\\\//g') ranlib_esc=$(echo "${RANLIB:-ranlib}" | sed 's/\//\\\//g') + cflags_preset_esc=$(echo "${cflags_preset}" | sed 's/\//\\\//g') + ldflags_preset_esc=$(echo "${ldflags_preset}" | sed 's/\//\\\//g') # Create a #define for the configuration family (config_name). uconf=$(echo ${config_name} | tr '[:lower:]' '[:upper:]') @@ -2342,8 +2344,8 @@ main() | sed -e "s/@CC@/${cc_esc}/g" \ | sed -e "s/@CC_VENDOR@/${cc_vendor}/g" \ | sed -e "s/@RANLIB@/${ranlib_esc}/g" \ - | sed -e "s/@cflags_preset@/${cflags_preset}/g" \ - | sed -e "s/@ldflags_preset@/${ldflags_preset}/g" \ + | sed -e "s/@cflags_preset@/${cflags_preset_esc}/g" \ + | sed -e "s/@ldflags_preset@/${ldflags_preset_esc}/g" \ | sed -e "s/@debug_type@/${debug_type}/g" \ | sed -e "s/@threading_model@/${threading_model}/g" \ | sed -e "s/@install_libdir@/${install_libdir_esc}/g" \ diff --git a/frame/base/bli_winsys.c b/frame/base/bli_winsys.c new file mode 100644 index 000000000..99e71bc08 --- /dev/null +++ b/frame/base/bli_winsys.c @@ -0,0 +1,44 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of The University of Texas at Austin nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifdef _MSC_VER +#include +int setenv(const char *name, const char *value, int overwrite) { + _putenv_s(name, value); +} + +void sleep(int x) { + Sleep(x*1000); +} +#endif diff --git a/frame/base/bli_winsys.h b/frame/base/bli_winsys.h new file mode 100644 index 000000000..c8fd97a7c --- /dev/null +++ b/frame/base/bli_winsys.h @@ -0,0 +1,40 @@ +/* + + BLIS + An object-based framework for developing high-performance BLAS-like + libraries. + + Copyright (C) 2014, The University of Texas at Austin + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of The University of Texas at Austin nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + + +#ifdef _MSC_VER +#include +int setenv(const char *name, const char *value, int overwrite); +void sleep(int x); +#endif diff --git a/frame/include/blis.h b/frame/include/blis.h index 077d98be8..f07767c61 100644 --- a/frame/include/blis.h +++ b/frame/include/blis.h @@ -173,6 +173,10 @@ extern "C" { #include "bli_cblas.h" +// -- Windows definitions + +#include "bli_winsys.h" + // End extern "C" construct block. #ifdef __cplusplus diff --git a/frame/thread/bli_thread.h b/frame/thread/bli_thread.h index 72a8515a8..061d12d0b 100644 --- a/frame/thread/bli_thread.h +++ b/frame/thread/bli_thread.h @@ -51,6 +51,10 @@ void bli_thread_init( void ); void bli_thread_finalize( void ); +#ifdef _MSC_VER +#define strerror_r(errno,buf,len) strerror_s(buf,len,errno) +#endif + // Thread range-related prototypes. void bli_thread_get_range_sub ( diff --git a/kernels/penryn/1/bli_axpyv_penryn_int.c b/kernels/penryn/1/bli_axpyv_penryn_int.c index f8f218b0d..ba1fc64d0 100644 --- a/kernels/penryn/1/bli_axpyv_penryn_int.c +++ b/kernels/penryn/1/bli_axpyv_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1/bli_dotv_penryn_int.c b/kernels/penryn/1/bli_dotv_penryn_int.c index b6d5400e3..224c04fe2 100644 --- a/kernels/penryn/1/bli_dotv_penryn_int.c +++ b/kernels/penryn/1/bli_dotv_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1f/bli_axpy2v_penryn_int.c b/kernels/penryn/1f/bli_axpy2v_penryn_int.c index 8435fa55a..54afeb35b 100644 --- a/kernels/penryn/1f/bli_axpy2v_penryn_int.c +++ b/kernels/penryn/1f/bli_axpy2v_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1f/bli_axpyf_penryn_int.c b/kernels/penryn/1f/bli_axpyf_penryn_int.c index 0ba0e88c8..649d8b0b6 100644 --- a/kernels/penryn/1f/bli_axpyf_penryn_int.c +++ b/kernels/penryn/1f/bli_axpyf_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1f/bli_dotaxpyv_penryn_int.c b/kernels/penryn/1f/bli_dotaxpyv_penryn_int.c index 0b0c353d3..7e8a33be7 100644 --- a/kernels/penryn/1f/bli_dotaxpyv_penryn_int.c +++ b/kernels/penryn/1f/bli_dotaxpyv_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1f/bli_dotxaxpyf_penryn_int.c b/kernels/penryn/1f/bli_dotxaxpyf_penryn_int.c index dafcde6c7..78486ef12 100644 --- a/kernels/penryn/1f/bli_dotxaxpyf_penryn_int.c +++ b/kernels/penryn/1f/bli_dotxaxpyf_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/penryn/1f/bli_dotxf_penryn_int.c b/kernels/penryn/1f/bli_dotxf_penryn_int.c index e660b7f25..e230efcd6 100644 --- a/kernels/penryn/1f/bli_dotxf_penryn_int.c +++ b/kernels/penryn/1f/bli_dotxf_penryn_int.c @@ -32,10 +32,10 @@ */ +#include "pmmintrin.h" #include "blis.h" -#include "pmmintrin.h" typedef union { __m128d v; diff --git a/kernels/sandybridge/3/bli_gemm_sandybridge_int_d8x4.c b/kernels/sandybridge/3/bli_gemm_sandybridge_int_d8x4.c index 72d9fbc9e..2e116e2ed 100644 --- a/kernels/sandybridge/3/bli_gemm_sandybridge_int_d8x4.c +++ b/kernels/sandybridge/3/bli_gemm_sandybridge_int_d8x4.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include +#include "blis.h" #if 0 diff --git a/kernels/zen/1/bli_amaxv_zen_int.c b/kernels/zen/1/bli_amaxv_zen_int.c index 3df254791..42d71af9a 100644 --- a/kernels/zen/1/bli_amaxv_zen_int.c +++ b/kernels/zen/1/bli_amaxv_zen_int.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1/bli_axpyv_zen_int.c b/kernels/zen/1/bli_axpyv_zen_int.c index cf83ee0fc..6a48a5828 100644 --- a/kernels/zen/1/bli_axpyv_zen_int.c +++ b/kernels/zen/1/bli_axpyv_zen_int.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1/bli_axpyv_zen_int10.c b/kernels/zen/1/bli_axpyv_zen_int10.c index 9070aa279..b474fce7c 100644 --- a/kernels/zen/1/bli_axpyv_zen_int10.c +++ b/kernels/zen/1/bli_axpyv_zen_int10.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1/bli_dotv_zen_int.c b/kernels/zen/1/bli_dotv_zen_int.c index dbb2543df..55d89159e 100644 --- a/kernels/zen/1/bli_dotv_zen_int.c +++ b/kernels/zen/1/bli_dotv_zen_int.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers One 256-bit AVX register holds 8 SP elements. */ diff --git a/kernels/zen/1/bli_dotv_zen_int10.c b/kernels/zen/1/bli_dotv_zen_int10.c index 974226f2c..93a98f7c3 100644 --- a/kernels/zen/1/bli_dotv_zen_int10.c +++ b/kernels/zen/1/bli_dotv_zen_int10.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1/bli_dotxv_zen_int.c b/kernels/zen/1/bli_dotxv_zen_int.c index 48d16e42a..1750559fd 100644 --- a/kernels/zen/1/bli_dotxv_zen_int.c +++ b/kernels/zen/1/bli_dotxv_zen_int.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers One 256-bit AVX register holds 8 SP elements. */ diff --git a/kernels/zen/1/bli_scalv_zen_int.c b/kernels/zen/1/bli_scalv_zen_int.c index d7c89634b..530fd3d7d 100644 --- a/kernels/zen/1/bli_scalv_zen_int.c +++ b/kernels/zen/1/bli_scalv_zen_int.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1/bli_scalv_zen_int10.c b/kernels/zen/1/bli_scalv_zen_int10.c index bed591b39..e3756ee7d 100644 --- a/kernels/zen/1/bli_scalv_zen_int10.c +++ b/kernels/zen/1/bli_scalv_zen_int10.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers diff --git a/kernels/zen/1f/bli_axpyf_zen_int_8.c b/kernels/zen/1f/bli_axpyf_zen_int_8.c index 022ae871c..077ec12e3 100644 --- a/kernels/zen/1f/bli_axpyf_zen_int_8.c +++ b/kernels/zen/1f/bli_axpyf_zen_int_8.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers One 256-bit AVX register holds 8 SP elements. */ diff --git a/kernels/zen/1f/bli_dotxf_zen_int_8.c b/kernels/zen/1f/bli_dotxf_zen_int_8.c index 7bbc14ae0..e23efc830 100644 --- a/kernels/zen/1f/bli_dotxf_zen_int_8.c +++ b/kernels/zen/1f/bli_dotxf_zen_int_8.c @@ -32,8 +32,8 @@ */ -#include "blis.h" #include "immintrin.h" +#include "blis.h" /* Union data structure to access AVX registers One 256-bit AVX register holds 8 SP elements. */ diff --git a/kernels/zen/3/bli_gemm_small.c b/kernels/zen/3/bli_gemm_small.c index 93685f5b4..d0254375a 100644 --- a/kernels/zen/3/bli_gemm_small.c +++ b/kernels/zen/3/bli_gemm_small.c @@ -32,9 +32,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "blis.h" #include "immintrin.h" #include "xmmintrin.h" +#include "blis.h" #ifdef BLIS_ENABLE_SMALL_MATRIX diff --git a/testsuite/src/test_libblis.c b/testsuite/src/test_libblis.c index 419fadbcb..e25040ade 100644 --- a/testsuite/src/test_libblis.c +++ b/testsuite/src/test_libblis.c @@ -35,7 +35,6 @@ #include "blis.h" #include "test_libblis.h" - // Global variables. char libblis_test_binary_name[ MAX_BINARY_NAME_LENGTH + 1 ]; diff --git a/testsuite/src/test_libblis.h b/testsuite/src/test_libblis.h index ac49f8da1..410dc2e01 100644 --- a/testsuite/src/test_libblis.h +++ b/testsuite/src/test_libblis.h @@ -47,8 +47,9 @@ #include // For sleep(). +#ifndef _MSC_VER #include - +#endif // // --- Constants and types -----------------------------------------------------