@@ -236,7 +236,11 @@ install(TARGETS ${OpenBLAS_LIBNAME} | |||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h | ||||
COMMAND ${GENCONFIG_BIN} ${CMAKE_CURRENT_SOURCE_DIR}/config.h ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h > ${CMAKE_BINARY_DIR}/openblas_config.h | COMMAND ${GENCONFIG_BIN} ${CMAKE_CURRENT_SOURCE_DIR}/config.h ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h > ${CMAKE_BINARY_DIR}/openblas_config.h | ||||
) | ) | ||||
ADD_CUSTOM_TARGET(genconfig DEPENDS openblas_config.h) | |||||
ADD_CUSTOM_TARGET(genconfig | |||||
ALL | |||||
DEPENDS openblas_config.h | |||||
) | |||||
add_dependencies(genconfig ${OpenBLAS_LIBNAME}) | add_dependencies(genconfig ${OpenBLAS_LIBNAME}) | ||||
install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||||
@@ -244,6 +248,7 @@ install(TARGETS ${OpenBLAS_LIBNAME} | |||||
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}") | message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}") | ||||
ADD_CUSTOM_TARGET(genf77blas | ADD_CUSTOM_TARGET(genf77blas | ||||
ALL | |||||
COMMAND ${AWK} 'BEGIN{print \"\#ifndef OPENBLAS_F77BLAS_H\" \; print \"\#define OPENBLAS_F77BLAS_H\" \; print \"\#include \\"openblas_config.h\\" \"}; NF {print}; END{print \"\#endif\"}' ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h > ${CMAKE_BINARY_DIR}/f77blas.h | COMMAND ${AWK} 'BEGIN{print \"\#ifndef OPENBLAS_F77BLAS_H\" \; print \"\#define OPENBLAS_F77BLAS_H\" \; print \"\#include \\"openblas_config.h\\" \"}; NF {print}; END{print \"\#endif\"}' ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h > ${CMAKE_BINARY_DIR}/f77blas.h | ||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h | ||||
) | ) | ||||
@@ -255,11 +260,11 @@ if(NOT NO_CBLAS) | |||||
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}") | message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}") | ||||
ADD_CUSTOM_TARGET(gencblas | ADD_CUSTOM_TARGET(gencblas | ||||
ALL | |||||
COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.tmp" | COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.tmp" | ||||
COMMAND cp "${CMAKE_BINARY_DIR}/cblas.tmp" "${CMAKE_BINARY_DIR}/cblas.h" | COMMAND cp "${CMAKE_BINARY_DIR}/cblas.tmp" "${CMAKE_BINARY_DIR}/cblas.h" | ||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h | ||||
) | ) | ||||
add_dependencies(gencblas ${OpenBLAS_LIBNAME}) | add_dependencies(gencblas ${OpenBLAS_LIBNAME}) | ||||
install (FILES ${CMAKE_BINARY_DIR}/cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | install (FILES ${CMAKE_BINARY_DIR}/cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||||
@@ -91,3 +91,8 @@ file(WRITE ${TARGET_CONF} | |||||
"#define __${BINARY}BIT__\t1\n" | "#define __${BINARY}BIT__\t1\n" | ||||
"#define FUNDERSCORE\t${FU}\n") | "#define FUNDERSCORE\t${FU}\n") | ||||
if (${HOST_OS} STREQUAL "WINDOWSSTORE") | |||||
file(APPEND ${TARGET_CONF} | |||||
"#define OS_WINNT\t1\n") | |||||
endif () | |||||
@@ -72,20 +72,26 @@ if (MSVC) | |||||
set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC) | set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC) | ||||
endif() | endif() | ||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") | |||||
# disable WindowsStore strict CRT checks | |||||
set(GETARCH_FLAGS ${GETARCH_FLAGS} -D_CRT_SECURE_NO_WARNINGS) | |||||
endif () | |||||
set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build") | set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build") | ||||
set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}") | set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}") | ||||
file(MAKE_DIRECTORY ${GETARCH_DIR}) | file(MAKE_DIRECTORY ${GETARCH_DIR}) | ||||
try_compile(GETARCH_RESULT ${GETARCH_DIR} | |||||
SOURCES ${GETARCH_SRC} | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GETARCH_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN} | |||||
) | |||||
if (NOT ${GETARCH_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}") | |||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") | |||||
try_compile(GETARCH_RESULT ${GETARCH_DIR} | |||||
SOURCES ${GETARCH_SRC} | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GETARCH_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN} | |||||
) | |||||
if (NOT ${GETARCH_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}") | |||||
endif () | |||||
endif () | endif () | ||||
message(STATUS "Running getarch") | message(STATUS "Running getarch") | ||||
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way | # use the cmake binary w/ the -E param to run a shell command in a cross-platform way | ||||
@@ -101,15 +107,17 @@ ParseGetArchVars(${GETARCH_MAKE_OUT}) | |||||
set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build") | set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build") | ||||
set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}") | set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}") | ||||
file(MAKE_DIRECTORY ${GETARCH2_DIR}) | file(MAKE_DIRECTORY ${GETARCH2_DIR}) | ||||
try_compile(GETARCH2_RESULT ${GETARCH2_DIR} | |||||
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GETARCH2_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} | |||||
) | |||||
if (NOT ${GETARCH2_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}") | |||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") | |||||
try_compile(GETARCH2_RESULT ${GETARCH2_DIR} | |||||
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GETARCH2_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} | |||||
) | |||||
if (NOT ${GETARCH2_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}") | |||||
endif () | |||||
endif () | endif () | ||||
# use the cmake binary w/ the -E param to run a shell command in a cross-platform way | # use the cmake binary w/ the -E param to run a shell command in a cross-platform way | ||||
@@ -126,13 +134,15 @@ set(GEN_CONFIG_H_BIN "gen_config_h${CMAKE_EXECUTABLE_SUFFIX}") | |||||
set(GEN_CONFIG_H_FLAGS "-DVERSION=\"${OpenBLAS_VERSION}\"") | set(GEN_CONFIG_H_FLAGS "-DVERSION=\"${OpenBLAS_VERSION}\"") | ||||
file(MAKE_DIRECTORY ${GEN_CONFIG_H_DIR}) | file(MAKE_DIRECTORY ${GEN_CONFIG_H_DIR}) | ||||
try_compile(GEN_CONFIG_H_RESULT ${GEN_CONFIG_H_DIR} | |||||
SOURCES ${PROJECT_SOURCE_DIR}/gen_config_h.c | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GEN_CONFIG_H_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GEN_CONFIG_H_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GEN_CONFIG_H_BIN} | |||||
) | |||||
if (NOT ${GEN_CONFIG_H_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling gen_config_h failed ${GEN_CONFIG_H_LOG}") | |||||
endif () | |||||
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") | |||||
try_compile(GEN_CONFIG_H_RESULT ${GEN_CONFIG_H_DIR} | |||||
SOURCES ${PROJECT_SOURCE_DIR}/gen_config_h.c | |||||
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GEN_CONFIG_H_FLAGS} -I${PROJECT_SOURCE_DIR} | |||||
OUTPUT_VARIABLE GEN_CONFIG_H_LOG | |||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GEN_CONFIG_H_BIN} | |||||
) | |||||
if (NOT ${GEN_CONFIG_H_RESULT}) | |||||
MESSAGE(FATAL_ERROR "Compiling gen_config_h failed ${GEN_CONFIG_H_LOG}") | |||||
endif () | |||||
endif () |
@@ -425,6 +425,10 @@ please https://github.com/xianyi/OpenBLAS/issues/246 | |||||
#endif | #endif | ||||
#ifndef ASSEMBLER | #ifndef ASSEMBLER | ||||
#ifdef OS_WINDOWSSTORE | |||||
typedef char env_var_t[MAX_PATH]; | |||||
#define readenv(p, n) 0 | |||||
#else | |||||
#ifdef OS_WINDOWS | #ifdef OS_WINDOWS | ||||
typedef char env_var_t[MAX_PATH]; | typedef char env_var_t[MAX_PATH]; | ||||
#define readenv(p, n) GetEnvironmentVariable((LPCTSTR)(n), (LPTSTR)(p), sizeof(p)) | #define readenv(p, n) GetEnvironmentVariable((LPCTSTR)(n), (LPTSTR)(p), sizeof(p)) | ||||
@@ -432,6 +436,7 @@ typedef char env_var_t[MAX_PATH]; | |||||
typedef char* env_var_t; | typedef char* env_var_t; | ||||
#define readenv(p, n) ((p)=getenv(n)) | #define readenv(p, n) ((p)=getenv(n)) | ||||
#endif | #endif | ||||
#endif | |||||
#if !defined(RPCC_DEFINED) && !defined(OS_WINDOWS) | #if !defined(RPCC_DEFINED) && !defined(OS_WINDOWS) | ||||
#ifdef _POSIX_MONOTONIC_CLOCK | #ifdef _POSIX_MONOTONIC_CLOCK | ||||
@@ -654,7 +659,11 @@ static __inline void blas_unlock(volatile BLASULONG *address){ | |||||
*address = 0; | *address = 0; | ||||
} | } | ||||
#ifdef OS_WINDOWSSTORE | |||||
static __inline int readenv_atoi(char *env) { | |||||
return 0; | |||||
} | |||||
#else | |||||
#ifdef OS_WINDOWS | #ifdef OS_WINDOWS | ||||
static __inline int readenv_atoi(char *env) { | static __inline int readenv_atoi(char *env) { | ||||
env_var_t p; | env_var_t p; | ||||
@@ -669,7 +678,7 @@ static __inline int readenv_atoi(char *env) { | |||||
return(0); | return(0); | ||||
} | } | ||||
#endif | #endif | ||||
#endif | |||||
#if !defined(XDOUBLE) || !defined(QUAD_PRECISION) | #if !defined(XDOUBLE) || !defined(QUAD_PRECISION) | ||||
@@ -12,6 +12,8 @@ if (SMP) | |||||
set(BLAS_SERVER blas_server_omp.c) | set(BLAS_SERVER blas_server_omp.c) | ||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") | elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") | ||||
set(BLAS_SERVER blas_server_win32.c) | set(BLAS_SERVER blas_server_win32.c) | ||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore") | |||||
set(BLAS_SERVER blas_server_win32.c) | |||||
endif () | endif () | ||||
if (NOT DEFINED BLAS_SERVER) | if (NOT DEFINED BLAS_SERVER) | ||||
@@ -443,8 +443,11 @@ int BLASFUNC(blas_thread_shutdown)(void){ | |||||
SetEvent(pool.killed); | SetEvent(pool.killed); | ||||
for(i = 0; i < blas_num_threads - 1; i++){ | for(i = 0; i < blas_num_threads - 1; i++){ | ||||
WaitForSingleObject(blas_threads[i], 5); //INFINITE); | |||||
TerminateThread(blas_threads[i],0); | |||||
WaitForSingleObject(blas_threads[i], 5); //INFINITE); | |||||
#ifndef OS_WINDOWSSTORE | |||||
// TerminateThread is only available with WINAPI_DESKTOP and WINAPI_SYSTEM not WINAPI_APP in UWP | |||||
TerminateThread(blas_threads[i],0); | |||||
#endif | |||||
} | } | ||||
blas_server_avail = 0; | blas_server_avail = 0; | ||||
@@ -21,6 +21,10 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") | |||||
target_link_libraries(${OpenBLAS_utest_bin} m) | target_link_libraries(${OpenBLAS_utest_bin} m) | ||||
endif() | endif() | ||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore") | |||||
set_target_properties( ${OpenBLAS_utest_bin} PROPERTIES COMPILE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS") | |||||
endif() | |||||
#Set output for utest | #Set output for utest | ||||
set_target_properties( ${OpenBLAS_utest_bin} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) | set_target_properties( ${OpenBLAS_utest_bin} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) | ||||
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) | foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) | ||||