Fix cmake bug on MSVC 32-bit.
authorZhang Xianyi <traits.zhang@gmail.com>
Mon, 26 Oct 2015 19:52:13 +0000 (14:52 -0500)
committerZhang Xianyi <traits.zhang@gmail.com>
Mon, 26 Oct 2015 19:52:13 +0000 (14:52 -0500)
cmake/system.cmake
kernel/CMakeLists.txt
kernel/x86/cpuid_win.c [new file with mode: 0644]

index 71bf5c2..134e9c1 100644 (file)
@@ -325,11 +325,15 @@ endif ()
 
 #For x86 32-bit
 if (DEFINED BINARY AND BINARY EQUAL 32)
+if (NOT MSVC)
   set(COMMON_OPT "${COMMON_OPT} -m32")
 endif()
+endif()
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_OPT} ${CCOMMON_OPT}")
+if(NOT MSVC)
 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMMON_OPT} ${CCOMMON_OPT}")
+endif()
 # TODO: not sure what PFLAGS is -hpa
 set(PFLAGS "${PFLAGS} ${COMMON_OPT} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
 
index 43837a0..8a3b021 100644 (file)
@@ -22,7 +22,11 @@ ParseMakefileVars("${KERNELDIR}/KERNEL")
 ParseMakefileVars("${KERNELDIR}/KERNEL.${TARGET_CORE}")
 
 if (${ARCH} STREQUAL "x86")
+if (NOT MSVC)
   GenerateNamedObjects("${KERNELDIR}/cpuid.S" "" "" false "" "" true)
+else()
+  GenerateNamedObjects("${KERNELDIR}/cpuid_win.c" "" "" false "" "" true)
+endif()
 endif ()
 
 # don't use float type name mangling here
diff --git a/kernel/x86/cpuid_win.c b/kernel/x86/cpuid_win.c
new file mode 100644 (file)
index 0000000..a1b0001
--- /dev/null
@@ -0,0 +1,41 @@
+/***************************************************************************
+Copyright (c) 2015, The OpenBLAS Project
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. 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.
+3. Neither the name of the OpenBLAS project 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 OPENBLAS PROJECT 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.
+*****************************************************************************/
+
+#if defined(_MSC_VER) && !defined(__clang__)
+
+#include<intrin.h>
+
+void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
+{
+  int cpuInfo[4] = {-1};
+  __cpuid(cpuInfo, op);
+  *eax = cpuInfo[0];
+  *ebx = cpuInfo[1];
+  *ecx = cpuInfo[2];
+  *edx = cpuInfo[3];
+}
+#endif