Add 64bit support for Microsoft Visual Studio
This commit is contained in:
parent
8f0d6c06a9
commit
65e56cb29d
|
@ -120,9 +120,12 @@ if (${NO_STATIC} AND ${NO_SHARED})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
#Set default output directory
|
#Set default output directory
|
||||||
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
|
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||||
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
|
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
||||||
|
if(MSVC)
|
||||||
|
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/lib/Debug)
|
||||||
|
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/lib/Release)
|
||||||
|
endif ()
|
||||||
# get obj vars into format that add_library likes: $<TARGET_OBJS:objlib> (see http://www.cmake.org/cmake/help/v3.0/command/add_library.html)
|
# get obj vars into format that add_library likes: $<TARGET_OBJS:objlib> (see http://www.cmake.org/cmake/help/v3.0/command/add_library.html)
|
||||||
set(TARGET_OBJS "")
|
set(TARGET_OBJS "")
|
||||||
foreach (SUBDIR ${SUBDIRS})
|
foreach (SUBDIR ${SUBDIRS})
|
||||||
|
@ -142,9 +145,12 @@ if (NOT NO_LAPACKE)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
#Only generate .def for dll on MSVC
|
# Only generate .def for dll on MSVC and always produce pdb files for debug and release
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR}/openblas.def")
|
set(OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR}/openblas.def")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# add objects to the openblas lib
|
# add objects to the openblas lib
|
||||||
|
@ -159,15 +165,15 @@ set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG
|
||||||
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
||||||
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
|
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
|
||||||
|
|
||||||
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib)
|
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib/${OUTPUTCONFIG} )
|
||||||
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib)
|
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib/${OUTPUTCONFIG} )
|
||||||
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib)
|
set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR}/lib/${OUTPUTCONFIG} )
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(utest)
|
add_subdirectory(utest)
|
||||||
|
|
||||||
if(NOT MSVC)
|
if (NOT MSVC)
|
||||||
#only build shared library for MSVC
|
#only build shared library for MSVC
|
||||||
|
|
||||||
add_library(${OpenBLAS_LIBNAME}_static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS})
|
add_library(${OpenBLAS_LIBNAME}_static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS})
|
||||||
|
@ -224,10 +230,7 @@ install(TARGETS ${OpenBLAS_LIBNAME}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
|
||||||
|
|
||||||
# Install include files
|
# Install include files
|
||||||
add_executable(gen_config_h gen_config_h.c)
|
set (GENCONFIG_BIN ${CMAKE_BINARY_DIR}/gen_config_h${CMAKE_EXECUTABLE_SUFFIX})
|
||||||
target_compile_definitions(gen_config_h PRIVATE VERSION=\"${OpenBLAS_VERSION}\")
|
|
||||||
message (STATUS "Generating openblas_config.h in ${CMAKE_BINARY_DIR}")
|
|
||||||
GET_TARGET_PROPERTY(GENCONFIG_BIN gen_config_h LOCATION)
|
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/openblas_config.h
|
OUTPUT ${CMAKE_BINARY_DIR}/openblas_config.h
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.h
|
||||||
|
@ -238,19 +241,32 @@ install(TARGETS ${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})
|
||||||
|
|
||||||
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
|
if (NOT MSVC)
|
||||||
ADD_CUSTOM_TARGET(genf77blas
|
ADD_CUSTOM_TARGET(genf77blas
|
||||||
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
|
||||||
)
|
)
|
||||||
|
else ()
|
||||||
|
ADD_CUSTOM_TARGET(genf77blas
|
||||||
|
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
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
install (FILES ${CMAKE_BINARY_DIR}/f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
install (FILES ${CMAKE_BINARY_DIR}/f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
||||||
if(NOT NO_CBLAS)
|
if(NOT NO_CBLAS)
|
||||||
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||||
|
if(NOT MSVC)
|
||||||
ADD_CUSTOM_TARGET(gencblas
|
ADD_CUSTOM_TARGET(gencblas
|
||||||
COMMAND sed 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.h"
|
COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.h"
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h
|
||||||
)
|
)
|
||||||
|
else ()
|
||||||
|
ADD_CUSTOM_TARGET(gencblas
|
||||||
|
COMMAND ${SED} "s/common/openblas_config/g" ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h > "${CMAKE_BINARY_DIR}/cblas.h"
|
||||||
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
add_dependencies( ${OpenBLAS_LIBNAME} gencblas)
|
add_dependencies( ${OpenBLAS_LIBNAME} gencblas)
|
||||||
install (FILES ${CMAKE_BINARY_DIR}/cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
install (FILES ${CMAKE_BINARY_DIR}/cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
endif()
|
endif()
|
||||||
|
@ -277,3 +293,15 @@ if(PKG_CONFIG_FOUND)
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas.pc @ONLY)
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas.pc @ONLY)
|
||||||
install (FILES ${PROJECT_BINARY_DIR}/openblas.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/)
|
install (FILES ${PROJECT_BINARY_DIR}/openblas.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# build dependencies graph
|
||||||
|
# add_dependencies(genconfig gen_config_h genf77blas gencblas)
|
||||||
|
add_dependencies(genconfig genf77blas gencblas)
|
||||||
|
add_dependencies(interface genconfig)
|
||||||
|
add_dependencies(kernel genconfig)
|
||||||
|
add_dependencies(driver_level2 genconfig)
|
||||||
|
add_dependencies(driver_level3 genconfig)
|
||||||
|
add_dependencies(driver_others genconfig)
|
||||||
|
add_dependencies(${OpenBLAS_LIBNAME} kernel driver_level2 driver_level3 driver_others interface)
|
||||||
|
add_dependencies(openblas_utest ${OpenBLAS_LIBNAME})
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
## This is triggered by system.cmake and runs before any of the code is built.
|
## This is triggered by system.cmake and runs before any of the code is built.
|
||||||
## Creates config.h and Makefile.conf by first running the c_check perl script (which creates those files).
|
## Creates config.h and Makefile.conf by first running the c_check perl script (which creates those files).
|
||||||
## Next it runs f_check and appends some fortran information to the files.
|
## Next it runs f_check and appends some fortran information to the files.
|
||||||
## Finally it runs getarch and getarch_2nd for even more environment information.
|
## Then it runs getarch and getarch_2nd for even more environment information.
|
||||||
|
## Finally it builds gen_config_h for use at build time to generate config.h.
|
||||||
|
|
||||||
# CMake vars set by this file:
|
# CMake vars set by this file:
|
||||||
# CORE
|
# CORE
|
||||||
|
@ -81,6 +82,10 @@ try_compile(GETARCH_RESULT ${GETARCH_DIR}
|
||||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
|
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (NOT ${GETARCH_RESULT})
|
||||||
|
MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
|
||||||
|
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
|
||||||
|
@ -103,6 +108,10 @@ try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
|
||||||
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
|
COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (NOT ${GETARCH2_RESULT})
|
||||||
|
MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
|
||||||
|
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
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
|
||||||
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
|
execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
|
||||||
|
@ -111,3 +120,19 @@ execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE
|
||||||
file(APPEND ${TARGET_CONF} ${GETARCH2_CONF_OUT})
|
file(APPEND ${TARGET_CONF} ${GETARCH2_CONF_OUT})
|
||||||
ParseGetArchVars(${GETARCH2_MAKE_OUT})
|
ParseGetArchVars(${GETARCH2_MAKE_OUT})
|
||||||
|
|
||||||
|
# compile get_config_h
|
||||||
|
set(GEN_CONFIG_H_DIR "${PROJECT_BINARY_DIR}/genconfig_h_build")
|
||||||
|
set(GEN_CONFIG_H_BIN "gen_config_h${CMAKE_EXECUTABLE_SUFFIX}")
|
||||||
|
set(GEN_CONFIG_H_FLAGS "-DVERSION=\"${OpenBLAS_VERSION}\"")
|
||||||
|
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 ()
|
||||||
|
|
|
@ -312,6 +312,8 @@ endif ()
|
||||||
|
|
||||||
set(AWK awk)
|
set(AWK awk)
|
||||||
|
|
||||||
|
set(SED sed)
|
||||||
|
|
||||||
set(REVISION "-r${OpenBLAS_VERSION}")
|
set(REVISION "-r${OpenBLAS_VERSION}")
|
||||||
set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
|
set(MAJOR_VERSION ${OpenBLAS_MAJOR_VERSION})
|
||||||
|
|
||||||
|
|
|
@ -1479,12 +1479,30 @@ static int on_process_term(void)
|
||||||
#else
|
#else
|
||||||
#pragma comment(linker, "/INCLUDE:__tls_used")
|
#pragma comment(linker, "/INCLUDE:__tls_used")
|
||||||
#endif
|
#endif
|
||||||
#pragma data_seg(push, old_seg)
|
|
||||||
|
#ifdef _WIN64
|
||||||
|
#pragma const_seg(".CRT$XLB")
|
||||||
|
#else
|
||||||
#pragma data_seg(".CRT$XLB")
|
#pragma data_seg(".CRT$XLB")
|
||||||
|
#endif
|
||||||
static void (APIENTRY *dll_callback)(HINSTANCE h, DWORD ul_reason_for_call, PVOID pv) = DllMain;
|
static void (APIENTRY *dll_callback)(HINSTANCE h, DWORD ul_reason_for_call, PVOID pv) = DllMain;
|
||||||
|
#ifdef _WIN64
|
||||||
|
#pragma const_seg()
|
||||||
|
#else
|
||||||
|
#pragma data_seg()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN64
|
||||||
|
#pragma const_seg(".CRT$XTU")
|
||||||
|
#else
|
||||||
#pragma data_seg(".CRT$XTU")
|
#pragma data_seg(".CRT$XTU")
|
||||||
|
#endif
|
||||||
static int(*p_process_term)(void) = on_process_term;
|
static int(*p_process_term)(void) = on_process_term;
|
||||||
#pragma data_seg(pop, old_seg)
|
#ifdef _WIN64
|
||||||
|
#pragma const_seg()
|
||||||
|
#else
|
||||||
|
#pragma data_seg()
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(C_PGI) || (!defined(C_SUN) && defined(F_INTERFACE_SUN))) && (defined(ARCH_X86) || defined(ARCH_X86_64))
|
#if (defined(C_PGI) || (!defined(C_SUN) && defined(F_INTERFACE_SUN))) && (defined(ARCH_X86) || defined(ARCH_X86_64))
|
||||||
|
|
|
@ -16,7 +16,7 @@ s=fgets(line,80,fp);
|
||||||
if (s== NULL) break;
|
if (s== NULL) break;
|
||||||
memset(line2,0,80);
|
memset(line2,0,80);
|
||||||
i=sscanf(line,"#define %70c",line2);
|
i=sscanf(line,"#define %70c",line2);
|
||||||
if (i>0) {
|
if (i!=0) {
|
||||||
fprintf(stdout,"#define OPENBLAS_%s",line2);
|
fprintf(stdout,"#define OPENBLAS_%s",line2);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
|
|
|
@ -31,7 +31,7 @@ endforeach()
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
add_custom_command(TARGET ${OpenBLAS_utest_bin}
|
add_custom_command(TARGET ${OpenBLAS_utest_bin}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lib/${OpenBLAS_LIBNAME}.dll ${CMAKE_CURRENT_BINARY_DIR}/.
|
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lib/$<CONFIG>/${OpenBLAS_LIBNAME}.dll ${CMAKE_CURRENT_BINARY_DIR}/.
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue