Commiting BRAD patch
authorjulie <julielangou@users.noreply.github.com>
Tue, 9 Aug 2011 18:59:44 +0000 (18:59 +0000)
committerjulie <julielangou@users.noreply.github.com>
Tue, 9 Aug 2011 18:59:44 +0000 (18:59 +0000)
Here is a patch for lapack to provide MS-format dll import libraries
from the MinGW GNU toolchain.  It is ready for others to try before it
goes upstream.  You just need to have MinGW GNU Fortran 4.x and one of
the VS IDEs installed.  Configure a MinGW build with BUILD_SHARED_LIBS
set to ON.  The resulting build (and install) tree will provide both
GNU-format and MS-format import libraries for the DLLs.

A C application built with MSVC and linked to the MinGW-built lapack
DLLs will run but requires the GNU runtime DLLs from MinGW to be available.
I tested this with both 32-bit and 64-bit builds.  For the latter I used
the mingw64 gfortran.  In both cases I just put the GNU runtime directory
in my PATH.  I think both libgfortran-3.dll and libgcc_s_dw2-1.dll are
needed.

This may be used to create a binary LAPACK distribution for Windows that
will work without any GNU tools installed.  One needs only to provide the
MinGW GNU runtime libraries along with blas.dll and lapack.dll.

-Brad

CMAKE/lapack-config-build.cmake.in
CMAKE/lapack-config-install.cmake.in
CMakeLists.txt

index 8d60cc8..e1ea54f 100644 (file)
@@ -1 +1,2 @@
 include("@LAPACK_BINARY_DIR@/lapack-targets.cmake")
+@LAPACK_GNUtoMS_BUILD@
index 0c55fc1..b0e917d 100644 (file)
@@ -1,2 +1,3 @@
 get_filename_component(_SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 include(${_SELF_DIR}/lapack-targets.cmake)
+@LAPACK_GNUtoMS_INSTALL@
index aea39b3..7322fca 100644 (file)
@@ -17,12 +17,29 @@ if (UNIX)
    endif ()
 endif ()
 
+
+# --------------------------------------------------
+
+# On Windows-GNU builds try to provide MS import libraries too.
+if(BUILD_SHARED_LIBS)
+  include(GNUtoMS)
+endif()
+
+if(GNUtoMS)
+  set(LAPACK_GNUtoMS_IMPORT ${LAPACK_SOURCE_DIR}/CMAKE/lapack-GNUtoMS.cmake)
+  set(LAPACK_GNUtoMS_INSTALL "include(\${_SELF_DIR}/lapack-GNUtoMS.cmake)")
+  set(LAPACK_GNUtoMS_BUILD "include(\"${LAPACK_GNUtoMS_IMPORT}\")")
+endif()
+
 macro(lapack_install_library lib)
   install(TARGETS ${lib} EXPORT lapack-targets
     ARCHIVE DESTINATION lib${LIB_SUFFIX}
     LIBRARY DESTINATION lib${LIB_SUFFIX}
     RUNTIME DESTINATION bin
   )
+  if(GNUtoMS)
+    install(FILES ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/lib${lib}.lib DESTINATION lib)
+  endif()
 endmacro()
 
 # --------------------------------------------------
@@ -170,6 +187,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lapack.pc.in ${CMAKE_CURRENT_BINARY_D
 configure_file(${LAPACK_SOURCE_DIR}/CMAKE/lapack-config-install.cmake.in
   ${LAPACK_BINARY_DIR}/CMakeFiles/lapack-config.cmake @ONLY)
 install(FILES
+  ${LAPACK_GNUtoMS_IMPORT}
   ${LAPACK_BINARY_DIR}/CMakeFiles/lapack-config.cmake
   ${LAPACK_BINARY_DIR}/lapack-config-version.cmake
   DESTINATION lib/cmake/lapack-${LAPACK_VERSION}