Skip to content

Commit

Permalink
llvmPackage_{3.4,3.5,3.7,3.8,3.9}: fix output of llvm-config
Browse files Browse the repository at this point in the history
llvm-config is a tool to output compile and linker flags, when compiling against llvm.

The tool however outputs static library names despite libllvm is build
as shared library on nixos. This was fixed for llvm 3.4, 3.5 and 3.7.

For llvm 3.8 and 3.9 it printed the library extension twice (.so.so).
This was fixed in 4.0 and the patch is backported to 3.8 and 3.9 in
this pull request.

```
$ for i in 34 35 37 38 39; do echo "\nllvm-$i"; nix-shell -p llvmPackages_$i.llvm --run 'llvm-config --libnames'; done

llvm-34
libLLVMInstrumentation.so libLLVMIRReader.so libLLVMAsmParser.so
...

llvm-35
libLLVMLTO.so libLLVMObjCARCOpts.so libLLVMLinker.so libLLVMipo.so
...

llvm-37
libLLVMLTO.so libLLVMObjCARCOpts.so libLLVMLinker.so libLLVMBitWriter.so
...

llvm-38
libLLVM-3.8.1.so

llvm-39
libLLVM-3.9.so
```

fixes #26713
  • Loading branch information
Mic92 committed Jun 20, 2017
1 parent fe9c7ad commit b6bacc4
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 17 deletions.
2 changes: 1 addition & 1 deletion pkgs/development/compilers/llvm/3.4/llvm.nix
Expand Up @@ -36,7 +36,7 @@ in stdenv.mkDerivation rec {

patches = stdenv.lib.optionals (!stdenv.isDarwin) [
# llvm-config --libfiles returns (non-existing) static libs
./fix-llvm-config.patch
../fix-llvm-config.patch
];

# hacky fix: created binaries need to be run before installation
Expand Down
3 changes: 2 additions & 1 deletion pkgs/development/compilers/llvm/3.5/llvm.nix
Expand Up @@ -53,7 +53,8 @@ in stdenv.mkDerivation rec {
"-DCAN_TARGET_i386=false"
];

patches = [ ./fix-15974.patch ];
patches = [ ./fix-15974.patch ] ++
stdenv.lib.optionals (!stdenv.isDarwin) [../fix-llvm-config.patch ];

postBuild = ''
rm -fR $out
Expand Down
13 changes: 0 additions & 13 deletions pkgs/development/compilers/llvm/3.7/fix-llvm-config.patch

This file was deleted.

2 changes: 1 addition & 1 deletion pkgs/development/compilers/llvm/3.7/llvm.nix
Expand Up @@ -55,7 +55,7 @@ in stdenv.mkDerivation rec {

patches = stdenv.lib.optionals (!stdenv.isDarwin) [
# llvm-config --libfiles returns (non-existing) static libs
./fix-llvm-config.patch
../fix-llvm-config.patch
];

cmakeFlags = with stdenv; [
Expand Down
11 changes: 11 additions & 0 deletions pkgs/development/compilers/llvm/3.8/fix-llvm-config.patch
@@ -0,0 +1,11 @@
--- llvm.org/utils/llvm-build/llvmbuild/main.py 2015-10-07 00:24:35.000000000 +0100
+++ llvm/utils/llvm-build/llvmbuild/main.py 2017-06-16 17:08:39.866586578 +0100
@@ -413,7 +413,7 @@
if library_name is None:
library_name_as_cstr = 'nullptr'
else:
- library_name_as_cstr = '"lib%s.a"' % library_name
+ library_name_as_cstr = '"lib%s.so"' % library_name
if is_installed:
is_installed_as_cstr = 'true'
else:
3 changes: 2 additions & 1 deletion pkgs/development/compilers/llvm/3.8/llvm.nix
Expand Up @@ -37,7 +37,8 @@ in stdenv.mkDerivation rec {

# Fix a segfault in llc
# See http://lists.llvm.org/pipermail/llvm-dev/2016-October/106500.html
patches = [ ./D17533-1.patch ];
patches = [ ./D17533-1.patch ] ++
stdenv.lib.optionals (!stdenv.isDarwin) [./fix-llvm-config.patch];

# hacky fix: New LLVM releases require a newer OS X SDK than
# 10.9. This is a temporary measure until nixpkgs darwin support is
Expand Down
8 changes: 8 additions & 0 deletions pkgs/development/compilers/llvm/3.9/llvm.nix
Expand Up @@ -58,6 +58,14 @@ in stdenv.mkDerivation rec {

propagatedBuildInputs = [ ncurses zlib ];

patches = [
# fix output of llvm-config (fixed in llvm 4.0)
(fetchpatch {
url = https://github.com/llvm-mirror/llvm/commit/5340b5b3d970069aebf3dde49d8964583742e01a.patch;
sha256 = "095f8knplwqbc2p7rad1kq8633i34qynni9jna93an7kyc80wdxl";
})
];

postPatch = ""
+ ''
patch -p1 --reverse < ${fetchpatch {
Expand Down

3 comments on commit b6bacc4

@copumpkin
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious how this affects darwin, since .a is used on both platforms but .so is Linux-only.

@copumpkin
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the patch is guarded by not Darwin, so it's still doing the wrong thing on Darwin

@Mic92
Copy link
Member Author

@Mic92 Mic92 commented on b6bacc4 Jun 22, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know what the output on darwin is. So I skipped this platform. Newer llvm version are no longer affected.

Please sign in to comment.