Skip to content

Commit c66b842

Browse files
authored
Merge pull request #1212 from neilsh-msft/develop
Add Microsoft Windows 10 UWP build support
2 parents e5e47cf + 34513be commit c66b842

File tree

7 files changed

+73
-35
lines changed

7 files changed

+73
-35
lines changed

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,19 @@ install(TARGETS ${OpenBLAS_LIBNAME}
236236
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h
237237
COMMAND ${GENCONFIG_BIN} ${CMAKE_CURRENT_SOURCE_DIR}/config.h ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h > ${CMAKE_BINARY_DIR}/openblas_config.h
238238
)
239-
ADD_CUSTOM_TARGET(genconfig DEPENDS openblas_config.h)
239+
240+
ADD_CUSTOM_TARGET(genconfig
241+
ALL
242+
DEPENDS openblas_config.h
243+
)
240244
add_dependencies(genconfig ${OpenBLAS_LIBNAME})
241245

242246
install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
243247

244248
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
245249

246250
ADD_CUSTOM_TARGET(genf77blas
251+
ALL
247252
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
248253
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h
249254
)
@@ -255,11 +260,11 @@ if(NOT NO_CBLAS)
255260
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
256261
257262
ADD_CUSTOM_TARGET(gencblas
263+
ALL
258264
COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.tmp"
259265
COMMAND cp "${CMAKE_BINARY_DIR}/cblas.tmp" "${CMAKE_BINARY_DIR}/cblas.h"
260266
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h
261267
)
262-
263268
add_dependencies(gencblas ${OpenBLAS_LIBNAME})
264269
265270
install (FILES ${CMAKE_BINARY_DIR}/cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

cmake/c_check.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,8 @@ file(WRITE ${TARGET_CONF}
9191
"#define __${BINARY}BIT__\t1\n"
9292
"#define FUNDERSCORE\t${FU}\n")
9393

94+
if (${HOST_OS} STREQUAL "WINDOWSSTORE")
95+
file(APPEND ${TARGET_CONF}
96+
"#define OS_WINNT\t1\n")
97+
endif ()
98+

cmake/prebuild.cmake

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,26 @@ if (MSVC)
7272
set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC)
7373
endif()
7474

75+
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
76+
# disable WindowsStore strict CRT checks
77+
set(GETARCH_FLAGS ${GETARCH_FLAGS} -D_CRT_SECURE_NO_WARNINGS)
78+
endif ()
79+
7580
set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build")
7681
set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}")
7782
file(MAKE_DIRECTORY ${GETARCH_DIR})
78-
try_compile(GETARCH_RESULT ${GETARCH_DIR}
79-
SOURCES ${GETARCH_SRC}
80-
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${PROJECT_SOURCE_DIR}
81-
OUTPUT_VARIABLE GETARCH_LOG
82-
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
83-
)
84-
85-
if (NOT ${GETARCH_RESULT})
86-
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
83+
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
84+
try_compile(GETARCH_RESULT ${GETARCH_DIR}
85+
SOURCES ${GETARCH_SRC}
86+
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${PROJECT_SOURCE_DIR}
87+
OUTPUT_VARIABLE GETARCH_LOG
88+
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
89+
)
90+
91+
if (NOT ${GETARCH_RESULT})
92+
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
93+
endif ()
8794
endif ()
88-
8995
message(STATUS "Running getarch")
9096

9197
# 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})
101107
set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build")
102108
set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}")
103109
file(MAKE_DIRECTORY ${GETARCH2_DIR})
104-
try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
105-
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
106-
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${PROJECT_SOURCE_DIR}
107-
OUTPUT_VARIABLE GETARCH2_LOG
108-
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
109-
)
110-
111-
if (NOT ${GETARCH2_RESULT})
112-
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
110+
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
111+
try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
112+
SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
113+
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${PROJECT_SOURCE_DIR}
114+
OUTPUT_VARIABLE GETARCH2_LOG
115+
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
116+
)
117+
118+
if (NOT ${GETARCH2_RESULT})
119+
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
120+
endif ()
113121
endif ()
114122

115123
# 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}")
126134
set(GEN_CONFIG_H_FLAGS "-DVERSION=\"${OpenBLAS_VERSION}\"")
127135
file(MAKE_DIRECTORY ${GEN_CONFIG_H_DIR})
128136

129-
try_compile(GEN_CONFIG_H_RESULT ${GEN_CONFIG_H_DIR}
130-
SOURCES ${PROJECT_SOURCE_DIR}/gen_config_h.c
131-
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GEN_CONFIG_H_FLAGS} -I${PROJECT_SOURCE_DIR}
132-
OUTPUT_VARIABLE GEN_CONFIG_H_LOG
133-
COPY_FILE ${PROJECT_BINARY_DIR}/${GEN_CONFIG_H_BIN}
134-
)
135-
136-
if (NOT ${GEN_CONFIG_H_RESULT})
137-
MESSAGE(FATAL_ERROR "Compiling gen_config_h failed ${GEN_CONFIG_H_LOG}")
138-
endif ()
137+
if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
138+
try_compile(GEN_CONFIG_H_RESULT ${GEN_CONFIG_H_DIR}
139+
SOURCES ${PROJECT_SOURCE_DIR}/gen_config_h.c
140+
COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GEN_CONFIG_H_FLAGS} -I${PROJECT_SOURCE_DIR}
141+
OUTPUT_VARIABLE GEN_CONFIG_H_LOG
142+
COPY_FILE ${PROJECT_BINARY_DIR}/${GEN_CONFIG_H_BIN}
143+
)
144+
145+
if (NOT ${GEN_CONFIG_H_RESULT})
146+
MESSAGE(FATAL_ERROR "Compiling gen_config_h failed ${GEN_CONFIG_H_LOG}")
147+
endif ()
148+
endif ()

common.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,13 +425,18 @@ please https://github.com/xianyi/OpenBLAS/issues/246
425425
#endif
426426

427427
#ifndef ASSEMBLER
428+
#ifdef OS_WINDOWSSTORE
429+
typedef char env_var_t[MAX_PATH];
430+
#define readenv(p, n) 0
431+
#else
428432
#ifdef OS_WINDOWS
429433
typedef char env_var_t[MAX_PATH];
430434
#define readenv(p, n) GetEnvironmentVariable((LPCTSTR)(n), (LPTSTR)(p), sizeof(p))
431435
#else
432436
typedef char* env_var_t;
433437
#define readenv(p, n) ((p)=getenv(n))
434438
#endif
439+
#endif
435440

436441
#if !defined(RPCC_DEFINED) && !defined(OS_WINDOWS)
437442
#ifdef _POSIX_MONOTONIC_CLOCK
@@ -654,7 +659,11 @@ static __inline void blas_unlock(volatile BLASULONG *address){
654659
*address = 0;
655660
}
656661

657-
662+
#ifdef OS_WINDOWSSTORE
663+
static __inline int readenv_atoi(char *env) {
664+
return 0;
665+
}
666+
#else
658667
#ifdef OS_WINDOWS
659668
static __inline int readenv_atoi(char *env) {
660669
env_var_t p;
@@ -669,7 +678,7 @@ static __inline int readenv_atoi(char *env) {
669678
return(0);
670679
}
671680
#endif
672-
681+
#endif
673682

674683
#if !defined(XDOUBLE) || !defined(QUAD_PRECISION)
675684

driver/others/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ if (SMP)
1212
set(BLAS_SERVER blas_server_omp.c)
1313
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
1414
set(BLAS_SERVER blas_server_win32.c)
15+
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore")
16+
set(BLAS_SERVER blas_server_win32.c)
1517
endif ()
1618

1719
if (NOT DEFINED BLAS_SERVER)

driver/others/blas_server_win32.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -443,8 +443,11 @@ int BLASFUNC(blas_thread_shutdown)(void){
443443
SetEvent(pool.killed);
444444

445445
for(i = 0; i < blas_num_threads - 1; i++){
446-
WaitForSingleObject(blas_threads[i], 5); //INFINITE);
447-
TerminateThread(blas_threads[i],0);
446+
WaitForSingleObject(blas_threads[i], 5); //INFINITE);
447+
#ifndef OS_WINDOWSSTORE
448+
// TerminateThread is only available with WINAPI_DESKTOP and WINAPI_SYSTEM not WINAPI_APP in UWP
449+
TerminateThread(blas_threads[i],0);
450+
#endif
448451
}
449452

450453
blas_server_avail = 0;

utest/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
2121
target_link_libraries(${OpenBLAS_utest_bin} m)
2222
endif()
2323

24+
if (${CMAKE_SYSTEM_NAME} STREQUAL "WindowsStore")
25+
set_target_properties( ${OpenBLAS_utest_bin} PROPERTIES COMPILE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS")
26+
endif()
27+
2428
#Set output for utest
2529
set_target_properties( ${OpenBLAS_utest_bin} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
2630
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})

0 commit comments

Comments
 (0)