From 53b6023a6cd458eecf22d03361881fda57d85f06 Mon Sep 17 00:00:00 2001 From: Zhang Xianyi Date: Mon, 26 Oct 2015 14:52:13 -0500 Subject: [PATCH] Fix cmake bug on MSVC 32-bit. --- cmake/system.cmake | 4 ++++ kernel/CMakeLists.txt | 4 ++++ kernel/x86/cpuid_win.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 kernel/x86/cpuid_win.c diff --git a/cmake/system.cmake b/cmake/system.cmake index 71bf5c2cc..134e9c12d 100644 --- a/cmake/system.cmake +++ b/cmake/system.cmake @@ -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}") diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 43837a0f3..8a3b021cc 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -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 index 000000000..a1b00016b --- /dev/null +++ b/kernel/x86/cpuid_win.c @@ -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 + +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