changeset 5489:0e70b5b31362

Update LLVM to v7.0.0 (bug #58689). * src/llvm.mk: Update version, checksum and download url. Update build rule. Install (native) llvm-config. * src/mingw-llvm-1-config.patch: Patch llvm-config so also the native version returns the settings that are needed for a cross build. * dist-files.mk: Add new patch to list.
author Markus Mützel <markus.muetzel@gmx.de>
date Sun, 05 Jul 2020 20:57:50 +0200
parents 005f1b76cbab
children a65cacd05892
files dist-files.mk src/llvm.mk src/mingw-llvm-1-config.patch
diffstat 3 files changed, 81 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/dist-files.mk	Sat Jul 11 10:57:25 2020 +0200
+++ b/dist-files.mk	Sun Jul 05 20:57:50 2020 +0200
@@ -335,6 +335,7 @@
   mingw-lapack-1-xerbla.patch \
   mingw-libgcrypt-1-fixes.patch \
   mingw-libmng-1-noundefines.patch \
+  mingw-llvm-1-config.patch \
   mingw-openblas-1-xerbla.patch \
   mingw-portaudio-1-pkgconfig.patch \
   mingw-s2tc-1-fixes.patch \
--- a/src/llvm.mk	Sat Jul 11 10:57:25 2020 +0200
+++ b/src/llvm.mk	Sun Jul 05 20:57:50 2020 +0200
@@ -3,11 +3,11 @@
 
 PKG             := llvm
 $(PKG)_IGNORE   :=
-$(PKG)_VERSION  := 6.0.1
-$(PKG)_CHECKSUM := 09a6316c5225cab255ba12391e7abe5ff4d28935
+$(PKG)_VERSION  := 7.0.0
+$(PKG)_CHECKSUM := 27503a22614626e935a05b609ab4211be72cd78b
 $(PKG)_SUBDIR   := llvm-$($(PKG)_VERSION).src
 $(PKG)_FILE     := llvm-$($(PKG)_VERSION).src.tar.xz
-$(PKG)_URL      := http://releases.llvm.org/$($(PKG)_VERSION)/$($(PKG)_FILE)
+$(PKG)_URL      := https://releases.llvm.org/$($(PKG)_VERSION)/$($(PKG)_FILE)
 $(PKG)_DEPS     :=
 
 define $(PKG)_UPDATE
@@ -60,7 +60,7 @@
     $(PKG)_CCACHE_OPTIONS += \
       -DLLVM_CCACHE_BUILD=On
   endif
-  # build cross-compiler
+
   define $(PKG)_BUILD
     mkdir '$(1)/.build'
     cd '$(1)/.build' && 'cmake' .. \
@@ -88,7 +88,18 @@
       -DLLVM_BUILD_RUNTIMES=OFF \
       -DLLVM_INCLUDE_RUNTIMES=OFF \
       $($(PKG)_CCACHE_OPTIONS)
-    $(MAKE) -C '$(1)/.build' -j $(JOBS) llvm-tblgen
+
+    $(MAKE) -C '$(1)/.build' -j $(JOBS) LLVMSupport
+    $(MAKE) -C '$(1)/.build' -j $(JOBS) llvm-config
     $(MAKE) -C '$(1)/.build' -j $(JOBS) install DESTDIR='$(3)'
+
+    # create symlink for shared library so that llvm-config can find it
+    cd '$(3)/$(HOST_BINDIR)' && ln -s LLVM.dll LLVM-$(word 1,$(subst ., ,$($(PKG)_VERSION))).dll
+
+    # install native llvm-config in HOST_BINDIR because it won't find the libs otherwise
+    # FIXME: Some of the configuration flags are hard coded into llvm-config with a patch.
+    # If the configuration flags are changed, the patch might have to be adapted.
+    $(INSTALL) -d '$(HOST_BINDIR)'
+    $(INSTALL) -m755 '$(1)/.build/NATIVE/bin/llvm-config' '$(HOST_BINDIR)/$(MXE_TOOL_PREFIX)llvm-config'
   endef
 endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/mingw-llvm-1-config.patch	Sun Jul 05 20:57:50 2020 +0200
@@ -0,0 +1,64 @@
+diff --git "a/tools/llvm-config/llvm-config.cpp" "b/tools/llvm-config/llvm-config.cpp"
+index 08b096a..a35422e 100644
+--- "a/tools/llvm-config/llvm-config.cpp"	
++++ "b/tools/llvm-config/llvm-config.cpp"
+@@ -352,14 +352,16 @@ int main(int argc, char **argv) {
+   StringRef SharedExt, SharedVersionedExt, SharedDir, SharedPrefix, StaticExt,
+       StaticPrefix, StaticDir = "lib", DirSep = "/";
+   const Triple HostTriple(Triple::normalize(LLVM_HOST_TRIPLE));
+-  if (HostTriple.isOSWindows()) {
++  const Triple TargetTriple(Triple::normalize(LLVM_DEFAULT_TARGET_TRIPLE));
++  if (TargetTriple.isOSWindows()) {
+     SharedExt = "dll";
+     SharedVersionedExt = LLVM_DYLIB_VERSION ".dll";
+-    if (HostTriple.isOSCygMing()) {
++    if (TargetTriple.isOSCygMing()) {
+       StaticExt = "a";
+       StaticPrefix = "lib";
+     } else {
+       StaticExt = "lib";
++      if (HostTriple.isOSWindows()) {
+       DirSep = "\\";
+       std::replace(ActiveObjRoot.begin(), ActiveObjRoot.end(), '/', '\\');
+       std::replace(ActivePrefix.begin(), ActivePrefix.end(), '/', '\\');
+@@ -368,10 +370,11 @@ int main(int argc, char **argv) {
+       std::replace(ActiveCMakeDir.begin(), ActiveCMakeDir.end(), '/', '\\');
+       std::replace(ActiveIncludeOption.begin(), ActiveIncludeOption.end(), '/',
+                    '\\');
++      }
+     }
+     SharedDir = ActiveBinDir;
+     StaticDir = ActiveLibDir;
+-  } else if (HostTriple.isOSDarwin()) {
++  } else if (TargetTriple.isOSDarwin()) {
+     SharedExt = "dylib";
+     SharedVersionedExt = LLVM_DYLIB_VERSION ".dylib";
+     StaticExt = "a";
+@@ -386,7 +389,7 @@ int main(int argc, char **argv) {
+     StaticPrefix = SharedPrefix = "lib";
+   }
+ 
+-  const bool BuiltDyLib = !!LLVM_ENABLE_DYLIB;
++  const bool BuiltDyLib = true;
+ 
+   /// CMake style shared libs, ie each component is in a shared library.
+   const bool BuiltSharedLibs = !!LLVM_ENABLE_SHARED;
+@@ -398,7 +401,7 @@ int main(int argc, char **argv) {
+   // If LLVM_LINK_DYLIB is ON, the single shared library will be returned
+   // for "--libs", etc, if they exist. This behaviour can be overridden with
+   // --link-static or --link-shared.
+-  bool LinkDyLib = !!LLVM_LINK_DYLIB;
++  bool LinkDyLib = true;
+ 
+   if (BuiltDyLib) {
+     std::string path((SharedDir + DirSep + DyLibName).str());
+@@ -670,7 +673,7 @@ int main(int argc, char **argv) {
+         } else if (PrintLibs) {
+           // On Windows, output full path to library without parameters.
+           // Elsewhere, if this is a typical library name, include it using -l.
+-          if (HostTriple.isWindowsMSVCEnvironment()) {
++          if (TargetTriple.isWindowsMSVCEnvironment()) {
+             OS << GetComponentLibraryPath(Lib, Shared);
+           } else {
+             StringRef LibName;
+