[Openmp-commits] [PATCH] D143992: [openmp] Fix building for mingw targets after import library changes

Martin Storsjö via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Tue Feb 14 14:49:01 PST 2023


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG96fcaf0cc06a: [openmp] Fix building for mingw targets after import library changes (authored by mstorsjo).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143992/new/

https://reviews.llvm.org/D143992

Files:
  openmp/runtime/cmake/LibompMicroTests.cmake
  openmp/runtime/src/CMakeLists.txt


Index: openmp/runtime/src/CMakeLists.txt
===================================================================
--- openmp/runtime/src/CMakeLists.txt
+++ openmp/runtime/src/CMakeLists.txt
@@ -272,6 +272,12 @@
     ARCHIVE_OUTPUT_NAME ${LIBOMP_GENERATED_IMP_LIB_FILENAME}
   )
 
+  if(MSVC)
+    set(LIBOMP_IMP_LIB_TARGET ompimp)
+  else()
+    set(LIBOMP_IMP_LIB_TARGET omp)
+  endif()
+
   # Create def files to designate exported functions
   libomp_get_gdflags(LIBOMP_GDFLAGS) # generate-def.pl flags (Windows only)
   libomp_string_to_list("${LIBOMP_GDFLAGS}" LIBOMP_GDFLAGS)
@@ -289,18 +295,31 @@
     DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dllexports ${LIBOMP_TOOLS_DIR}/generate-def.pl
   )
 
-  # Regenerate the import library to import by name, not ordinal
-  add_library(ompimp STATIC ${LIBOMP_SOURCE_FILES})
-    set_target_properties(ompimp PROPERTIES
-      PREFIX "" SUFFIX "" OUTPUT_NAME "${LIBOMP_IMP_LIB_FILE}"
-    LINKER_LANGUAGE C
-  )
-  set_target_properties(ompimp PROPERTIES STATIC_LIBRARY_OPTIONS 
-      "${CMAKE_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_BINARY_DIR}/${LIBOMPIMP_GENERATED_DEF_FILE_IMP}"
-  )
-  add_dependencies(ompimp libomp-needed-headers)
-  
- 
+  if (MSVC)
+    # Regenerate the import library to import by name, not ordinal.
+    #
+    # For mingw, we can't regenerate an import library by passing
+    # CMAKE_LINK_DEF_FILE_FLAG to the static library archiver; that just
+    # ends up creating a regular static library that contains the def file.
+    # For mingw, we would have to call the suitable dlltool for regenerating
+    # an import library. However, neither GNU nor LLVM based mingw tools
+    # generate import libraries that actually link by ordinal, so this step
+    # isn't strictly necessary.
+    #
+    # Also, in mingw builds, LIBOMP_GENERATED_IMP_LIB_FILENAME and
+    # LIBOMP_IMP_LIB_FILE currently end up equal, while they need to differ
+    # for this second step to work.
+    add_library(ompimp STATIC ${LIBOMP_SOURCE_FILES})
+      set_target_properties(ompimp PROPERTIES
+        PREFIX "" SUFFIX "" OUTPUT_NAME "${LIBOMP_IMP_LIB_FILE}"
+      LINKER_LANGUAGE C
+    )
+    set_target_properties(ompimp PROPERTIES STATIC_LIBRARY_OPTIONS
+        "${CMAKE_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_BINARY_DIR}/${LIBOMPIMP_GENERATED_DEF_FILE_IMP}"
+    )
+    add_dependencies(ompimp libomp-needed-headers)
+  endif()
+
 endif()
 
 # Building the Fortran module files
@@ -357,7 +376,7 @@
 # We want to install headers in ${DESTDIR}/${CMAKE_INSTALL_FULL_INCLUDEDIR}
 if(WIN32)
   install(TARGETS omp RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
-  install(TARGETS ompimp ARCHIVE DESTINATION "${OPENMP_INSTALL_LIBDIR}")
+  install(TARGETS ${LIBOMP_IMP_LIB_TARGET} ARCHIVE DESTINATION "${OPENMP_INSTALL_LIBDIR}")
   # Create aliases (regular copies) of the library for backwards compatibility
   set(LIBOMP_ALIASES "libiomp5md")
   foreach(alias IN LISTS LIBOMP_ALIASES)
Index: openmp/runtime/cmake/LibompMicroTests.cmake
===================================================================
--- openmp/runtime/cmake/LibompMicroTests.cmake
+++ openmp/runtime/cmake/LibompMicroTests.cmake
@@ -40,7 +40,7 @@
 # get library location
 if(WIN32)
   get_target_property(LIBOMP_OUTPUT_DIRECTORY omp RUNTIME_OUTPUT_DIRECTORY)
-  get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ompimp ARCHIVE_OUTPUT_DIRECTORY)
+  get_target_property(LIBOMPIMP_OUTPUT_DIRECTORY ${LIBOMP_IMP_LIB_TARGET} ARCHIVE_OUTPUT_DIRECTORY)
   if(NOT LIBOMPIMP_OUTPUT_DIRECTORY)
     set(LIBOMPIMP_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
   endif()


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143992.497449.patch
Type: text/x-patch
Size: 3572 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20230214/4029f957/attachment.bin>


More information about the Openmp-commits mailing list