mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-12 02:40:31 +08:00
Compare commits
42 Commits
d8ca282fc0
...
llvm15-wip
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8684d1f47d | ||
|
|
f200a5f0b8 | ||
|
|
6deefe145c | ||
|
|
d93b7f7675 | ||
|
|
684365ec51 | ||
|
|
0d4ec84ad3 | ||
|
|
f61f8c2c5e | ||
|
|
707e814fba | ||
|
|
e00d6df617 | ||
|
|
1c126ededf | ||
|
|
f91b5a2137 | ||
|
|
96e9bbfb03 | ||
|
|
56a48ae2ee | ||
|
|
e3e0f0fc4a | ||
|
|
8174d851b7 | ||
|
|
65abcfe0e3 | ||
|
|
5d3657d189 | ||
|
|
43302e0576 | ||
|
|
36407b92ef | ||
|
|
1743048cc0 | ||
|
|
7d20031049 | ||
|
|
16cef3b4c3 | ||
|
|
f2fc795b02 | ||
|
|
a1a5cd99a4 | ||
|
|
c8e17344ff | ||
|
|
eebfee120e | ||
|
|
c38f8362c6 | ||
|
|
8d3a186e51 | ||
|
|
6fbdf5e1f7 | ||
|
|
fde7598b4d | ||
|
|
4ded494bf4 | ||
|
|
694c7b2798 | ||
|
|
5ec42b03e1 | ||
|
|
4aae860429 | ||
|
|
1c00043697 | ||
|
|
55b8f72a93 | ||
|
|
e2b34aba2e | ||
|
|
2d17af45cc | ||
|
|
735a99c3f8 | ||
|
|
87e4857acd | ||
|
|
62d6429d8a | ||
|
|
226ebbb8ed |
@@ -2,12 +2,12 @@
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "JuliaMono-ttf";
|
||||
version = "0.046";
|
||||
version = "0.047";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/cormullion/juliamono/releases/download/v${version}/${pname}.tar.gz";
|
||||
stripRoot = false;
|
||||
hash = "sha256-mq37L3bhUhdjB8z3I9i8+wyLrMSsu/nZrZXOuqE3JlU=";
|
||||
hash = "sha256-tCZo48SBGdhcsP1wgaWkfWr3L3Yz+p/iqesLmarSWbk=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "public-sans";
|
||||
version = "2.001";
|
||||
in (fetchzip {
|
||||
name = "public-sans-${version}";
|
||||
|
||||
url = "https://github.com/uswds/public-sans/releases/download/v${version}/public-sans-v${version}.zip";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/uswds/public-sans/releases/download/v${version}/public-sans-v${version}.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-XFs/UMXI/kdrW+53t8Mj26+Rn5p+LQ6KW2K2/ShoIag=";
|
||||
};
|
||||
|
||||
sha256 = "sha256-Ba7D4J72GZQsGn0KINRib9BmHsAnoEsAwAOC+M3CkMU=";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 */*/*.otf -t $out/share/fonts/opentype
|
||||
install -Dm644 */*/*.ttf -t $out/share/fonts/truetype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A strong, neutral, principles-driven, open source typeface for text or display";
|
||||
@@ -18,10 +27,4 @@ in (fetchzip {
|
||||
maintainers = with maintainers; [ dtzWill ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,27 +1,29 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "quattrocento-sans";
|
||||
version = "2.0";
|
||||
name = "quattrocento-sans-${version}";
|
||||
in (fetchzip rec {
|
||||
inherit name;
|
||||
|
||||
url = "https://web.archive.org/web/20170709124317/http://www.impallari.com/media/releases/quattrocento-sans-v${version}.zip";
|
||||
src = fetchzip {
|
||||
url = "https://web.archive.org/web/20170709124317/http://www.impallari.com/media/releases/quattrocento-sans-v${version}.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-L3aFZmaA94B9APxsp8bSBpocIlK3Ehvj/RFXVcW2nso=";
|
||||
};
|
||||
|
||||
sha256 = "0g8hnn92ks4y0jbizwj7yfa097lk887wqkqpqjdmc09sd2n44343";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 */*/QuattrocentoSans*.otf -t $out/share/fonts/opentype
|
||||
install -Dm644 */FONTLOG.txt -t $out/share/doc/${pname}-${version}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://www.impallari.com/quattrocentosans/";
|
||||
description = "A classic, elegant and sober sans-serif typeface";
|
||||
license = licenses.ofl;
|
||||
platforms = platforms.all;
|
||||
maintainers = [maintainers.rycee];
|
||||
maintainers = [ maintainers.rycee ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/{fonts,doc}
|
||||
unzip -j $downloadedFile '*/QuattrocentoSans*.otf' -d $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile '*/FONTLOG.txt' -d $out/share/doc/${name}
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "quattrocento";
|
||||
version = "1.1";
|
||||
name = "quattrocento-${version}";
|
||||
in (fetchzip rec {
|
||||
inherit name;
|
||||
|
||||
url = "https://web.archive.org/web/20170707001804/http://www.impallari.com/media/releases/quattrocento-v${version}.zip";
|
||||
src = fetchzip {
|
||||
url = "https://web.archive.org/web/20170707001804/http://www.impallari.com/media/releases/quattrocento-v${version}.zip";
|
||||
hash = "sha256-ntY6Wl6TI8F7SShMyD8mdOxVg4oz9kvJ7vKTyGdPLtE=";
|
||||
};
|
||||
|
||||
sha256 = "0f8l19y61y20sszn8ni8h9kgl0zy1gyzychg22z5k93ip4h7kfd0";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 */*.otf -t $out/share/fonts/opentype
|
||||
install -Dm644 FONTLOG.txt -t $out/share/doc/${pname}-${version}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://www.impallari.com/quattrocento/";
|
||||
description = "A classic, elegant, sober and strong serif typeface";
|
||||
license = licenses.ofl;
|
||||
platforms = platforms.all;
|
||||
maintainers = [maintainers.rycee];
|
||||
maintainers = [ maintainers.rycee ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/{fonts,doc}
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile \*FONTLOG.txt -d $out/share/doc/${name}
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "roboto";
|
||||
version = "2.138";
|
||||
in (fetchzip {
|
||||
name = "roboto-${version}";
|
||||
|
||||
url = "https://github.com/google/roboto/releases/download/v${version}/roboto-unhinted.zip";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/google/roboto/releases/download/v${version}/roboto-unhinted.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-ue3PUZinBpcYgSho1Zrw1KHl7gc/GlN1GhWFk6g5QXE=";
|
||||
};
|
||||
|
||||
sha256 = "1s3c48wwvvwd3p4w3hfkri5v2c54j2bdxmd3bjv54klc5mrlh6z3";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 *.ttf -t $out/share/fonts/truetype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/google/roboto";
|
||||
@@ -22,9 +30,4 @@ in (fetchzip {
|
||||
platforms = lib.platforms.all;
|
||||
maintainers = [ lib.maintainers.romildo ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile \*.ttf -x __MACOSX/\* -d $out/share/fonts/truetype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,20 +1,30 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip, version ? "3.300" }:
|
||||
{ lib, stdenvNoCC, fetchzip, version ? "3.300" }:
|
||||
|
||||
let
|
||||
new = lib.versionAtLeast version "3.000";
|
||||
sha256 = {
|
||||
"2.100" = "1g5f5f9gzamkq3kqyf7vbzvl4rdj3wmjf6chdrbxksrm3rnb926z";
|
||||
"3.300" = "1bja1ma1mnna0qlk3dis31cvq5z1kgcqj7wjp8ml03zc5mpa2wb2";
|
||||
hash = {
|
||||
"2.100" = "sha256-d2UyOOOnmE1afCwyIrM1bL3lQC7XRwh03hzetk/4V30=";
|
||||
"3.300" = "sha256-LaaA6DWAE2dcwVVX4go9cJaiuwI6efYbPk82ym3W3IY=";
|
||||
}."${version}";
|
||||
name = "scheherazade${lib.optionalString new "-new"}-${version}";
|
||||
pname = "scheherazade${lib.optionalString new "-new"}";
|
||||
in
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
inherit pname version;
|
||||
|
||||
in (fetchzip rec {
|
||||
inherit name;
|
||||
src = fetchzip {
|
||||
url = "http://software.sil.org/downloads/r/scheherazade/Scheherazade${lib.optionalString new "New"}-${version}.zip";
|
||||
inherit hash;
|
||||
};
|
||||
|
||||
url = "http://software.sil.org/downloads/r/scheherazade/Scheherazade${lib.optionalString new "New"}-${version}.zip";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
inherit sha256;
|
||||
install -Dm644 *.ttf -t $out/share/fonts/truetype
|
||||
install -Dm644 FONTLOG.txt README.txt -t $out/share/doc
|
||||
cp -r documentation $out/share/doc/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://software.sil.org/scheherazade/";
|
||||
@@ -40,13 +50,4 @@ in (fetchzip rec {
|
||||
license = licenses.ofl;
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/{doc,fonts}
|
||||
unzip -l $downloadedFile
|
||||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
|
||||
unzip $downloadedFile \*/documentation/\* -d $out/share/doc/
|
||||
mv $out/share/doc/* $out/share/doc/${name}
|
||||
unzip -j $downloadedFile \*/FONTLOG.txt \*/README.txt -d $out/share/doc/${name}
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
let
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "stix-two";
|
||||
version = "2.13";
|
||||
in
|
||||
(fetchzip {
|
||||
name = "stix-two-${version}";
|
||||
|
||||
url = "https://github.com/stipub/stixfonts/raw/v${version}/zipfiles/STIX${builtins.replaceStrings [ "." ] [ "_" ] version}-all.zip";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/stipub/stixfonts/raw/v${version}/zipfiles/STIX${builtins.replaceStrings [ "." ] [ "_" ] version}-all.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-hfQmrw7HjlhQSA0rVTs84i3j3iMVR0k7tCRBcB6hEpU=";
|
||||
};
|
||||
|
||||
sha256 = "sha256-cBtZe/oq4bQCscSAhJ4YuTSghDleD9O/+3MHOJyI50o=";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 */*.otf -t $out/share/fonts/opentype
|
||||
install -Dm644 */*.ttf -t $out/share/fonts/truetype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://www.stixfonts.org/";
|
||||
@@ -17,10 +26,4 @@ in
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.rycee ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts/
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "sudo-font";
|
||||
version = "0.64";
|
||||
in (fetchzip {
|
||||
name = "sudo-font-${version}";
|
||||
url = "https://github.com/jenskutilek/sudo-font/releases/download/v${version}/sudo.zip";
|
||||
sha256 = "sha256-ewLTeIVY76eq5mHTnjIsJ5Q2CMuBqXJzxvjZTONPsr8=";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/jenskutilek/sudo-font/releases/download/v${version}/sudo.zip";
|
||||
hash = "sha256-Y99YPoNpe55Wrj5epiqqQ6ddUBTj9uI4oj4M5ARTzJo=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 *.ttf -t $out/share/fonts/truetype/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Font for programmers and command line users";
|
||||
@@ -16,9 +25,4 @@ in (fetchzip {
|
||||
maintainers = with maintainers; [ dtzWill ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts/
|
||||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype/
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,14 +1,26 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "terminus-font-ttf";
|
||||
version = "4.49.1";
|
||||
in (fetchzip {
|
||||
name = "terminus-font-ttf-${version}";
|
||||
|
||||
url = "https://files.ax86.net/terminus-ttf/files/${version}/terminus-ttf-${version}.zip";
|
||||
src = fetchzip {
|
||||
url = "https://files.ax86.net/terminus-ttf/files/${version}/terminus-ttf-${version}.zip";
|
||||
hash = "sha256-NKswkZR05V21mszT56S2x85k//qhfzRShhepYaAybDc=";
|
||||
};
|
||||
|
||||
sha256 = "sha256-UaTnCamIRN/3xZsYt5nYzvykXQ3ri94a047sWOJ2RfU=";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
for i in *.ttf; do
|
||||
local destname="$(echo "$i" | sed -E 's|-[[:digit:].]+\.ttf$|.ttf|')"
|
||||
install -Dm 644 "$i" "$out/share/fonts/truetype/$destname"
|
||||
done
|
||||
|
||||
install -Dm 644 COPYING "$out/share/doc/terminus-font-ttf/COPYING"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A clean fixed width TTF font";
|
||||
@@ -20,15 +32,4 @@ in (fetchzip {
|
||||
license = licenses.ofl;
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
unzip -j $downloadedFile
|
||||
|
||||
for i in *.ttf; do
|
||||
local destname="$(echo "$i" | sed -E 's|-[[:digit:].]+\.ttf$|.ttf|')"
|
||||
install -Dm 644 "$i" "$out/share/fonts/truetype/$destname"
|
||||
done
|
||||
|
||||
install -Dm 644 COPYING "$out/share/doc/terminus-font-ttf/COPYING"
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "theano";
|
||||
version = "2.0";
|
||||
name = "theano-${version}";
|
||||
in (fetchzip rec {
|
||||
inherit name;
|
||||
|
||||
url = "https://github.com/akryukov/theano/releases/download/v${version}/theano-${version}.otf.zip";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/akryukov/theano/releases/download/v${version}/theano-${version}.otf.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-9wnwHcRHB+AToOvGwZSXvHkQ8hqMd7Sdl26Ty/IwbPw=";
|
||||
};
|
||||
|
||||
sha256 = "1my1symb7k80ys33iphsxvmf6432wx6vjdnxhzhkgrang1rhx1h8";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/fonts/opentype
|
||||
mkdir -p $out/share/doc/${pname}-${version}
|
||||
cp *.otf $out/share/fonts/opentype
|
||||
cp *.txt $out/share/doc/${pname}-${version}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/akryukov/theano";
|
||||
@@ -18,11 +28,4 @@ in (fetchzip rec {
|
||||
license = licenses.ofl;
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts/opentype
|
||||
mkdir -p $out/share/doc/${name}
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile \*.txt -d "$out/share/doc/${name}"
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation {
|
||||
pname = "times-newer-roman";
|
||||
version = "unstable-2018-09-11";
|
||||
in
|
||||
(fetchzip {
|
||||
name = "times-newer-roman-${version}";
|
||||
|
||||
url = "https://web.archive.org/web/20210609022835/https://timesnewerroman.com/assets/TimesNewerRoman.zip";
|
||||
src = fetchzip {
|
||||
url = "https://web.archive.org/web/20210609022835/https://timesnewerroman.com/assets/TimesNewerRoman.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-wO4rxyJNQyhRLpswCYKXdeiXy5G+iWyxulYCHZb60QM=";
|
||||
};
|
||||
|
||||
hash = "sha256-Hx59RYLLwfimEQjEEes0lCpg6iql46DFwhQ7kVGiEzc=";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/fonts/opentype
|
||||
cp *.otf $out/share/fonts/opentype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A font that looks just like Times New Roman, except each character is 5-10% wider";
|
||||
@@ -18,9 +26,4 @@ in
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts/opentype
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "ultimate-oldschool-pc-font-pack";
|
||||
version = "2.2";
|
||||
in
|
||||
(fetchzip {
|
||||
name = "ultimate-oldschool-pc-font-pack-${version}";
|
||||
url = "https://int10h.org/oldschool-pc-fonts/download/oldschool_pc_font_pack_v${version}_linux.zip";
|
||||
sha256 = "sha256-BOA2fMa2KT3Bkpvj/0DzrzuZbl3RARvNn4qbI/+dApU=";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://int10h.org/oldschool-pc-fonts/download/oldschool_pc_font_pack_v${version}_linux.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-54U8tZzvivTSOgmGesj9QbIgkSTm9w4quMhsuEc0Xy4=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp */*.ttf $out/share/fonts/truetype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "The Ultimate Oldschool PC Font Pack (TTF Fonts)";
|
||||
@@ -16,9 +26,4 @@ in
|
||||
license = licenses.cc-by-sa-40;
|
||||
maintainers = [ maintainers.endgame ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch= ''
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
let name = "undefined-medium-1.0";
|
||||
in (fetchzip rec {
|
||||
inherit name;
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
url = "https://github.com/andirueckel/undefined-medium/archive/v1.0.zip";
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "undefined-medium";
|
||||
version = "1.0";
|
||||
|
||||
sha256 = "1wa04jzbffshwcxm705yb5wja8wakn8j7fvim1mlih2z1sqw0njk";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/andirueckel/undefined-medium/archive/v1.0.zip";
|
||||
hash = "sha256-HG+V7jR7dDI6LeoiCg/8F38lW8Zdo6CyLj2DXy/ff64=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 fonts/otf/*.otf -t $out/share/fonts/opentype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://undefined-medium.com/";
|
||||
@@ -19,9 +28,4 @@ in (fetchzip rec {
|
||||
license = licenses.ofl;
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile ${name}/fonts/otf/\*.otf -d $out/share/fonts/opentype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,14 +1,27 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, stdenv, fetchzip }:
|
||||
let
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "vollkorn";
|
||||
version = "4.105";
|
||||
in
|
||||
(fetchzip {
|
||||
name = "${pname}-${version}";
|
||||
url = "http://vollkorn-typeface.com/download/vollkorn-${builtins.replaceStrings ["."] ["-"] version}.zip";
|
||||
sha256 = "0srff2nqs7353mqcpmvaq156lamfh621py4h1771n0l9ix2c8mss";
|
||||
stripRoot = false;
|
||||
|
||||
src = fetchzip {
|
||||
url = "http://vollkorn-typeface.com/download/vollkorn-${builtins.replaceStrings ["."] ["-"] version}.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-oG79GgCwCavbMFAPakza08IPmt13Gwujrkc/NKTai7g=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -pv $out/share/{doc/${pname}-${version},fonts/{opentype,truetype,WOFF,WOFF2}}
|
||||
cp -v {Fontlog,OFL-FAQ,OFL}.txt $out/share/doc/${pname}-${version}/
|
||||
cp -v PS-OTF/*.otf $out/share/fonts/opentype
|
||||
cp -v TTF/*.ttf $out/share/fonts/truetype
|
||||
cp -v WOFF/*.woff $out/share/fonts/WOFF
|
||||
cp -v WOFF2/*.woff2 $out/share/fonts/WOFF2
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "http://vollkorn-typeface.com/";
|
||||
@@ -17,14 +30,4 @@ in
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.schmittlauch ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -pv $out/share/{doc/${pname}-${version},fonts/{opentype,truetype,WOFF,WOFF2}}
|
||||
unzip $downloadedFile
|
||||
cp -v {Fontlog,OFL-FAQ,OFL}.txt $out/share/doc/${pname}-${version}/
|
||||
cp -v PS-OTF/*.otf $out/share/fonts/opentype
|
||||
cp -v TTF/*.ttf $out/share/fonts/truetype
|
||||
cp -v WOFF/*.woff $out/share/fonts/WOFF
|
||||
cp -v WOFF2/*.woff2 $out/share/fonts/WOFF2
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "weather-icons";
|
||||
version = "2.0.12";
|
||||
in (fetchzip {
|
||||
name = "weather-icons-${version}";
|
||||
|
||||
url = "https://github.com/erikflowers/weather-icons/archive/refs/tags/${version}.zip";
|
||||
sha256 = "sha256-NGPzAloeZa1nCazb+mjAbYw7ZYYDoKpLwcvzg1Ly9oM=";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/erikflowers/weather-icons/archive/refs/tags/${version}.zip";
|
||||
hash = "sha256-0ZFH2awUo4BkTpK1OsWZ4YKczJHo+HHM6ezGBJAmT+U=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 _docs/font-source/weathericons-regular.otf -t $out/share/fonts/opentype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Weather Icons";
|
||||
@@ -21,9 +29,4 @@ in (fetchzip {
|
||||
platforms = platforms.all;
|
||||
maintainers = with maintainers; [ pnelson ];
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile weather-icons-${version}/_docs/font-source/weathericons-regular.otf -d $out/share/fonts/opentype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,15 +1,21 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "work-sans";
|
||||
version = "2.010";
|
||||
in
|
||||
(fetchzip {
|
||||
name = "work-sans-${version}";
|
||||
|
||||
url = "https://github.com/weiweihuanghuang/Work-Sans/archive/refs/tags/v${version}.zip";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/weiweihuanghuang/Work-Sans/archive/refs/tags/v${version}.zip";
|
||||
hash = "sha256-cedcx3CpcPZk3jxxIs5Bz78dxZNtOemvXnUBO6zl2dw=";
|
||||
};
|
||||
|
||||
sha256 = "sha256-S4O5EoKY4w/p+MHeHRCmPyQRAOUfEwNiETxMgNcsrws=";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 fonts/variable/*.ttf fonts/static/TTF/*.ttf -t $out/share/fonts/opentype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A grotesque sans";
|
||||
@@ -18,9 +24,4 @@ in
|
||||
maintainers = [ maintainers.marsam ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile "*/fonts/*.ttf" -d $out/share/fonts/opentype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,12 +1,22 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
(fetchzip {
|
||||
name = "yanone-kaffeesatz-2004";
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "yanone-kaffeesatz";
|
||||
version = "2004";
|
||||
|
||||
url = "https://yanone.de/2015/data/UIdownloads/Yanone%20Kaffeesatz.zip";
|
||||
src = fetchzip {
|
||||
url = "https://yanone.de/2015/data/UIdownloads/Yanone%20Kaffeesatz.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-8yAB73UJ77/c8/VLqiFeT1KtoBQzOh+vWrI+JA2dCoY=";
|
||||
};
|
||||
|
||||
sha256 = "190c4wx7avy3kp98lsyml7kc0jw7csf5n79af2ypbkhsadfsy8di";
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 *.otf -t $out/share/fonts/opentype
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "The free font classic";
|
||||
@@ -15,9 +25,4 @@
|
||||
homepage = "https://yanone.de/fonts/kaffeesatz/";
|
||||
license = lib.licenses.ofl;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts
|
||||
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
# when changing this expression convert it from 'fetchzip' to 'stdenvNoCC.mkDerivation'
|
||||
{ lib, fetchzip }:
|
||||
{ lib, stdenvNoCC, fetchzip }:
|
||||
|
||||
let
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "zilla-slab";
|
||||
version = "1.002";
|
||||
in (fetchzip {
|
||||
name = "zilla-slab-${version}";
|
||||
|
||||
url = "https://github.com/mozilla/zilla-slab/releases/download/v${version}/Zilla-Slab-Fonts-v${version}.zip";
|
||||
sha256 = "1b1ys28hyjcl4qwbnsyi6527nj01g3d6id9jl23fv6f8fjm4ph0f";
|
||||
src = fetchzip {
|
||||
url = "https://github.com/mozilla/zilla-slab/releases/download/v${version}/Zilla-Slab-Fonts-v${version}.zip";
|
||||
stripRoot = false;
|
||||
hash = "sha256-yOHu+dSWlyI7w1N1teED9R1Fphso2bKAlYDC1KdqBCc=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp -v zilla-slab/ttf/*.ttf $out/share/fonts/truetype/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/mozilla/zilla-slab";
|
||||
@@ -26,10 +36,4 @@ in (fetchzip {
|
||||
maintainers = with maintainers; [ caugner ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}).overrideAttrs (_: {
|
||||
postFetch = ''
|
||||
unzip $downloadedFile
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp -v zilla-slab/ttf/*.ttf $out/share/fonts/truetype/
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
||||
40
pkgs/development/compilers/llvm/15/bintools/default.nix
Normal file
40
pkgs/development/compilers/llvm/15/bintools/default.nix
Normal file
@@ -0,0 +1,40 @@
|
||||
{ runCommand, stdenv, llvm, lld, version }:
|
||||
|
||||
let
|
||||
prefix =
|
||||
if stdenv.hostPlatform != stdenv.targetPlatform
|
||||
then "${stdenv.targetPlatform.config}-"
|
||||
else "";
|
||||
in runCommand "llvm-binutils-${version}" {
|
||||
preferLocalBuild = true;
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
};
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
for prog in ${lld}/bin/*; do
|
||||
ln -s $prog $out/bin/${prefix}$(basename $prog)
|
||||
done
|
||||
for prog in ${llvm}/bin/*; do
|
||||
ln -sf $prog $out/bin/${prefix}$(basename $prog)
|
||||
done
|
||||
|
||||
ln -s ${llvm}/bin/llvm-ar $out/bin/${prefix}ar
|
||||
ln -s ${llvm}/bin/llvm-ar $out/bin/${prefix}dlltool
|
||||
ln -s ${llvm}/bin/llvm-ar $out/bin/${prefix}ranlib
|
||||
ln -s ${llvm}/bin/llvm-cxxfilt $out/bin/${prefix}c++filt
|
||||
ln -s ${llvm}/bin/llvm-debuginfod $out/bin/${prefix}debuginfod
|
||||
ln -s ${llvm}/bin/llvm-debuginfod-find $out/bin/${prefix}debuginfod-find
|
||||
ln -s ${llvm}/bin/llvm-dwp $out/bin/${prefix}dwp
|
||||
ln -s ${llvm}/bin/llvm-nm $out/bin/${prefix}nm
|
||||
ln -s ${llvm}/bin/llvm-objcopy $out/bin/${prefix}objcopy
|
||||
ln -s ${llvm}/bin/llvm-objcopy $out/bin/${prefix}strip
|
||||
ln -s ${llvm}/bin/llvm-objdump $out/bin/${prefix}objdump
|
||||
ln -s ${llvm}/bin/llvm-rc $out/bin/${prefix}windres
|
||||
ln -s ${llvm}/bin/llvm-readobj $out/bin/${prefix}readelf
|
||||
ln -s ${llvm}/bin/llvm-size $out/bin/${prefix}size
|
||||
ln -s ${llvm}/bin/llvm-strings $out/bin/${prefix}strings
|
||||
ln -s ${llvm}/bin/llvm-symbolizer $out/bin/${prefix}addr2line
|
||||
|
||||
ln -s ${lld}/bin/lld $out/bin/${prefix}ld
|
||||
''
|
||||
129
pkgs/development/compilers/llvm/15/clang/default.nix
Normal file
129
pkgs/development/compilers/llvm/15/clang/default.nix
Normal file
@@ -0,0 +1,129 @@
|
||||
{ lib, stdenv, llvm_meta
|
||||
, monorepoSrc, runCommand
|
||||
, substituteAll, cmake, ninja, libxml2, libllvm, version, python3
|
||||
, buildLlvmTools
|
||||
, fixDarwinDylibNames
|
||||
, enableManpages ? false
|
||||
}:
|
||||
|
||||
let
|
||||
self = stdenv.mkDerivation (rec {
|
||||
pname = "clang";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
cp -r ${monorepoSrc}/clang-tools-extra "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ]
|
||||
++ lib.optional enableManpages python3.pkgs.sphinx
|
||||
++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
|
||||
|
||||
buildInputs = [ libxml2 libllvm ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang"
|
||||
"-DCLANGD_BUILD_XPC=OFF"
|
||||
"-DLLVM_ENABLE_RTTI=ON"
|
||||
] ++ lib.optionals enableManpages [
|
||||
"-DCLANG_INCLUDE_DOCS=ON"
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
"-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen"
|
||||
];
|
||||
|
||||
patches = [
|
||||
./purity.patch
|
||||
# https://reviews.llvm.org/D51899
|
||||
./gnu-install-dirs.patch
|
||||
(substituteAll {
|
||||
src = ../../clang-11-12-LLVMgold-path.patch;
|
||||
libllvmLibdir = "${libllvm.lib}/lib";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
(cd tools && ln -s ../../clang-tools-extra extra)
|
||||
|
||||
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
-e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
lib/Driver/ToolChains/*.cpp
|
||||
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
|
||||
'';
|
||||
|
||||
outputs = [ "out" "lib" "dev" "python" ];
|
||||
|
||||
postInstall = ''
|
||||
ln -sv $out/bin/clang $out/bin/cpp
|
||||
|
||||
# Move libclang to 'lib' output
|
||||
moveToOutput "lib/libclang.*" "$lib"
|
||||
moveToOutput "lib/libclang-cpp.*" "$lib"
|
||||
substituteInPlace $dev/lib/cmake/clang/ClangTargets-release.cmake \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
|
||||
|
||||
mkdir -p $python/bin $python/share/clang/
|
||||
mv $out/bin/{git-clang-format,scan-view} $python/bin
|
||||
if [ -e $out/bin/set-xcode-analyzer ]; then
|
||||
mv $out/bin/set-xcode-analyzer $python/bin
|
||||
fi
|
||||
mv $out/share/clang/*.py $python/share/clang
|
||||
rm $out/bin/c-index-test
|
||||
patchShebangs $python/bin
|
||||
|
||||
mkdir -p $dev/bin
|
||||
cp bin/clang-tblgen $dev/bin
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
isClang = true;
|
||||
inherit libllvm;
|
||||
};
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://clang.llvm.org/";
|
||||
description = "A C language family frontend for LLVM";
|
||||
longDescription = ''
|
||||
The Clang project provides a language front-end and tooling
|
||||
infrastructure for languages in the C language family (C, C++, Objective
|
||||
C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project.
|
||||
It aims to deliver amazingly fast compiles, extremely useful error and
|
||||
warning messages and to provide a platform for building great source
|
||||
level tools. The Clang Static Analyzer and clang-tidy are tools that
|
||||
automatically find bugs in your code, and are great examples of the sort
|
||||
of tools that can be built using the Clang frontend as a library to
|
||||
parse C/C++ code.
|
||||
'';
|
||||
mainProgram = "clang";
|
||||
};
|
||||
} // lib.optionalAttrs enableManpages {
|
||||
pname = "clang-manpages";
|
||||
|
||||
ninjaFlags = [ "docs-clang-man" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
# Manually install clang manpage
|
||||
cp docs/man/*.1 $out/share/man/man1/
|
||||
'';
|
||||
|
||||
outputs = [ "out" ];
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = llvm_meta // {
|
||||
description = "man page for Clang ${version}";
|
||||
};
|
||||
});
|
||||
in self
|
||||
105
pkgs/development/compilers/llvm/15/clang/gnu-install-dirs.patch
Normal file
105
pkgs/development/compilers/llvm/15/clang/gnu-install-dirs.patch
Normal file
@@ -0,0 +1,105 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index c27beec313d7..480f13e73c9f 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -78,15 +78,17 @@ if(CLANG_BUILT_STANDALONE)
|
||||
if (NOT LLVM_CONFIG_FOUND)
|
||||
# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config
|
||||
# path is removed.
|
||||
- set(MAIN_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")
|
||||
+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
|
||||
set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}")
|
||||
# N.B. this is just a default value, the CACHE PATHs below can be overriden.
|
||||
set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm")
|
||||
set(TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")
|
||||
set(LIBRARY_DIR "${LLVM_LIBRARY_DIR}")
|
||||
+ else()
|
||||
+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
- set(LLVM_MAIN_INCLUDE_DIR "${MAIN_INCLUDE_DIR}" CACHE PATH "Path to llvm/include")
|
||||
+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed")
|
||||
set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree")
|
||||
set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree")
|
||||
set(LLVM_TOOLS_BINARY_DIR "${TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin")
|
||||
@@ -128,7 +130,7 @@ if(CLANG_BUILT_STANDALONE)
|
||||
set(LLVM_INCLUDE_TESTS ON)
|
||||
endif()
|
||||
|
||||
- include_directories("${LLVM_BINARY_DIR}/include" "${LLVM_MAIN_INCLUDE_DIR}")
|
||||
+ include_directories(${LLVM_INCLUDE_DIRS})
|
||||
link_directories("${LLVM_LIBRARY_DIR}")
|
||||
|
||||
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
|
||||
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake
|
||||
index 21ac332e4f5f..b16c314bd1e2 100644
|
||||
--- a/cmake/modules/AddClang.cmake
|
||||
+++ b/cmake/modules/AddClang.cmake
|
||||
@@ -119,8 +119,8 @@ macro(add_clang_library name)
|
||||
install(TARGETS ${lib}
|
||||
COMPONENT ${lib}
|
||||
${export_to_clangtargets}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
|
||||
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
|
||||
if (NOT LLVM_ENABLE_IDE)
|
||||
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
|
||||
index 6e2060991b92..b9bc930d26b8 100644
|
||||
--- a/lib/Headers/CMakeLists.txt
|
||||
+++ b/lib/Headers/CMakeLists.txt
|
||||
@@ -420,7 +420,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files})
|
||||
add_header_target("windows-resource-headers" ${windows_only_files})
|
||||
add_header_target("utility-resource-headers" ${utility_files})
|
||||
|
||||
-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
|
||||
+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
|
||||
|
||||
#############################################################
|
||||
# Install rules for the catch-all clang-resource-headers target
|
||||
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
|
||||
index 8d95d0900e8c..ebc70ff7526d 100644
|
||||
--- a/tools/libclang/CMakeLists.txt
|
||||
+++ b/tools/libclang/CMakeLists.txt
|
||||
@@ -180,7 +180,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
|
||||
COMPONENT
|
||||
libclang-python-bindings
|
||||
DESTINATION
|
||||
- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
|
||||
+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
|
||||
endforeach()
|
||||
if(NOT LLVM_ENABLE_IDE)
|
||||
add_custom_target(libclang-python-bindings)
|
||||
diff --git a/tools/scan-build-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt
|
||||
index 061dc7ef4dd9..adc54b2edc32 100644
|
||||
--- a/tools/scan-build-py/CMakeLists.txt
|
||||
+++ b/tools/scan-build-py/CMakeLists.txt
|
||||
@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild})
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
|
||||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
|
||||
install(PROGRAMS lib/libscanbuild/${lib}
|
||||
- DESTINATION lib/libscanbuild
|
||||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild"
|
||||
COMPONENT scan-build-py)
|
||||
endforeach()
|
||||
|
||||
@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources})
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
|
||||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
|
||||
install(PROGRAMS lib/libscanbuild/resources/${resource}
|
||||
- DESTINATION lib/libscanbuild/resources
|
||||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources"
|
||||
COMPONENT scan-build-py)
|
||||
endforeach()
|
||||
|
||||
@@ -122,7 +122,7 @@ foreach(lib ${LibEar})
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
|
||||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
|
||||
install(PROGRAMS lib/libear/${lib}
|
||||
- DESTINATION lib/libear
|
||||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear"
|
||||
COMPONENT scan-build-py)
|
||||
endforeach()
|
||||
|
||||
29
pkgs/development/compilers/llvm/15/clang/purity.patch
Normal file
29
pkgs/development/compilers/llvm/15/clang/purity.patch
Normal file
@@ -0,0 +1,29 @@
|
||||
From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001
|
||||
From: Will Dietz <w@wdtz.org>
|
||||
Date: Thu, 18 May 2017 11:56:12 -0500
|
||||
Subject: [PATCH] "purity" patch for 5.0
|
||||
|
||||
---
|
||||
lib/Driver/ToolChains/Gnu.cpp | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
|
||||
index fe3c0191bb..c6a482bece 100644
|
||||
--- a/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -487,13 +487,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
} else {
|
||||
if (Args.hasArg(options::OPT_rdynamic))
|
||||
CmdArgs.push_back("-export-dynamic");
|
||||
|
||||
- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE &&
|
||||
- !Args.hasArg(options::OPT_r)) {
|
||||
- CmdArgs.push_back("-dynamic-linker");
|
||||
- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) +
|
||||
- ToolChain.getDynamicLinker(Args)));
|
||||
- }
|
||||
}
|
||||
|
||||
CmdArgs.push_back("-o");
|
||||
--
|
||||
2.11.0
|
||||
@@ -0,0 +1,21 @@
|
||||
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt
|
||||
index 3a66dd9c3fb..7efc85d9f9f 100644
|
||||
--- a/lib/builtins/CMakeLists.txt
|
||||
+++ b/lib/builtins/CMakeLists.txt
|
||||
@@ -348,4 +348,8 @@ if (NOT MSVC)
|
||||
|
||||
+ set(i486_SOURCES ${i386_SOURCES})
|
||||
+ set(i586_SOURCES ${i386_SOURCES})
|
||||
+ set(i686_SOURCES ${i386_SOURCES})
|
||||
+
|
||||
if (WIN32)
|
||||
set(i386_SOURCES
|
||||
${i386_SOURCES}
|
||||
@@ -723,6 +723,7 @@ else ()
|
||||
endif()
|
||||
|
||||
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
|
||||
+ message("arch: ${arch}")
|
||||
if (CAN_TARGET_${arch})
|
||||
# For ARM archs, exclude any VFP builtins if VFP is not supported
|
||||
if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
|
||||
32
pkgs/development/compilers/llvm/15/compiler-rt/armv7l.patch
Normal file
32
pkgs/development/compilers/llvm/15/compiler-rt/armv7l.patch
Normal file
@@ -0,0 +1,32 @@
|
||||
diff -ur a/cmake/builtin-config-ix.cmake b/cmake/builtin-config-ix.cmake
|
||||
--- a/cmake/builtin-config-ix.cmake @llvm 15.0.6
|
||||
+++ b/cmake/builtin-config-ix.cmake
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
set(ARM64 aarch64)
|
||||
-set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k armv8m.main armv8.1m.main)
|
||||
+set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k armv7l armv8m.main armv8.1m.main)
|
||||
set(AVR avr)
|
||||
set(HEXAGON hexagon)
|
||||
set(X86 i386)
|
||||
set(X86_64 x86_64)
|
||||
diff -ur a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt
|
||||
--- a/lib/builtins/CMakeLists.txt @llvm 15.0.6
|
||||
+++ b/lib/builtins/CMakeLists.txt
|
||||
@@ -565,6 +565,7 @@
|
||||
set(armv7_SOURCES ${arm_SOURCES})
|
||||
set(armv7s_SOURCES ${arm_SOURCES})
|
||||
set(armv7k_SOURCES ${arm_SOURCES})
|
||||
+set(armv7l_SOURCES ${arm_SOURCES})
|
||||
set(arm64_SOURCES ${aarch64_SOURCES})
|
||||
|
||||
# macho_embedded archs
|
||||
@@ -734,7 +735,7 @@
|
||||
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
|
||||
if (CAN_TARGET_${arch})
|
||||
# For ARM archs, exclude any VFP builtins if VFP is not supported
|
||||
- if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em|armv8m.main|armv8.1m.main)$")
|
||||
+ if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7l|armv7m|armv7em|armv8m.main|armv8.1m.main)$")
|
||||
string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}")
|
||||
check_compile_definition(__VFP_FP__ "${CMAKE_C_FLAGS} ${_TARGET_${arch}_CFLAGS}" COMPILER_RT_HAS_${arch}_VFP)
|
||||
if(NOT COMPILER_RT_HAS_${arch}_VFP)
|
||||
@@ -0,0 +1,71 @@
|
||||
diff --git a/lib/sanitizer_common/sanitizer_mac.cpp b/lib/sanitizer_common/sanitizer_mac.cpp
|
||||
--- a/lib/sanitizer_common/sanitizer_mac.cpp
|
||||
+++ b/lib/sanitizer_common/sanitizer_mac.cpp
|
||||
@@ -613,9 +613,15 @@ HandleSignalMode GetHandleSignalMode(int signum) {
|
||||
// Offset example:
|
||||
// XNU 17 -- macOS 10.13 -- iOS 11 -- tvOS 11 -- watchOS 4
|
||||
constexpr u16 GetOSMajorKernelOffset() {
|
||||
- if (TARGET_OS_OSX) return 4;
|
||||
- if (TARGET_OS_IOS || TARGET_OS_TV) return 6;
|
||||
- if (TARGET_OS_WATCH) return 13;
|
||||
+#if TARGET_OS_OSX
|
||||
+ return 4;
|
||||
+#endif
|
||||
+#if TARGET_OS_IOS || TARGET_OS_TV
|
||||
+ return 6;
|
||||
+#endif
|
||||
+#if TARGET_OS_WATCH
|
||||
+ return 13;
|
||||
+#endif
|
||||
}
|
||||
|
||||
using VersStr = char[64];
|
||||
@@ -627,13 +633,13 @@ static uptr ApproximateOSVersionViaKernelVersion(VersStr vers) {
|
||||
u16 os_major = kernel_major - offset;
|
||||
|
||||
const char *format = "%d.0";
|
||||
- if (TARGET_OS_OSX) {
|
||||
- if (os_major >= 16) { // macOS 11+
|
||||
- os_major -= 5;
|
||||
- } else { // macOS 10.15 and below
|
||||
- format = "10.%d";
|
||||
- }
|
||||
+#if TARGET_OS_OSX
|
||||
+ if (os_major >= 16) { // macOS 11+
|
||||
+ os_major -= 5;
|
||||
+ } else { // macOS 10.15 and below
|
||||
+ format = "10.%d";
|
||||
}
|
||||
+#endif
|
||||
return internal_snprintf(vers, sizeof(VersStr), format, os_major);
|
||||
}
|
||||
|
||||
@@ -681,15 +687,14 @@ void ParseVersion(const char *vers, u16 *major, u16 *minor) {
|
||||
// Aligned versions example:
|
||||
// macOS 10.15 -- iOS 13 -- tvOS 13 -- watchOS 6
|
||||
static void MapToMacos(u16 *major, u16 *minor) {
|
||||
- if (TARGET_OS_OSX)
|
||||
- return;
|
||||
-
|
||||
- if (TARGET_OS_IOS || TARGET_OS_TV)
|
||||
+#if !TARGET_OS_OSX
|
||||
+#if TARGET_OS_IOS || TARGET_OS_TV
|
||||
*major += 2;
|
||||
- else if (TARGET_OS_WATCH)
|
||||
+#elif TARGET_OS_WATCH
|
||||
*major += 9;
|
||||
- else
|
||||
+#else
|
||||
UNREACHABLE("unsupported platform");
|
||||
+#endif
|
||||
|
||||
if (*major >= 16) { // macOS 11+
|
||||
*major -= 5;
|
||||
@@ -697,6 +702,7 @@ static void MapToMacos(u16 *major, u16 *minor) {
|
||||
*minor = *major;
|
||||
*major = 10;
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
static MacosVersion GetMacosAlignedVersionInternal() {
|
||||
156
pkgs/development/compilers/llvm/15/compiler-rt/default.nix
Normal file
156
pkgs/development/compilers/llvm/15/compiler-rt/default.nix
Normal file
@@ -0,0 +1,156 @@
|
||||
{ lib, stdenv, llvm_meta, version
|
||||
, monorepoSrc, runCommand
|
||||
, cmake, ninja, python3, xcbuild, libllvm, libcxxabi, libxcrypt
|
||||
, doFakeLibgcc ? stdenv.hostPlatform.isFreeBSD
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
useLLVM = stdenv.hostPlatform.useLLVM or false;
|
||||
bareMetal = stdenv.hostPlatform.parsed.kernel.name == "none";
|
||||
haveLibc = stdenv.cc.libc != null;
|
||||
inherit (stdenv.hostPlatform) isMusl isGnu;
|
||||
|
||||
baseName = "compiler-rt";
|
||||
|
||||
src = runCommand "${baseName}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${baseName} "$out"
|
||||
'';
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = baseName + lib.optionalString (haveLibc) "-libc";
|
||||
inherit version;
|
||||
|
||||
inherit src;
|
||||
sourceRoot = "${src.name}/${baseName}";
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 libllvm.dev ]
|
||||
++ lib.optional stdenv.isDarwin xcbuild.xcrun;
|
||||
buildInputs = lib.optional stdenv.hostPlatform.isDarwin libcxxabi;
|
||||
|
||||
NIX_CFLAGS_COMPILE = [
|
||||
"-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0"
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON"
|
||||
"-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
"-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
] ++ lib.optionals (haveLibc && stdenv.hostPlatform.libc == "glibc") [
|
||||
"-DSANITIZER_COMMON_CFLAGS=-I${libxcrypt}/include"
|
||||
] ++ lib.optionals (useLLVM || bareMetal || isMusl) [
|
||||
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
|
||||
"-DCOMPILER_RT_BUILD_XRAY=OFF"
|
||||
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
|
||||
"-DCOMPILER_RT_BUILD_PROFILE=OFF"
|
||||
"-DCOMPILER_RT_BUILD_MEMPROF=OFF"
|
||||
"-DCOMPILER_RT_BUILD_ORC=OFF" # may be possible to build with musl if necessary
|
||||
] ++ lib.optionals (useLLVM || bareMetal) [
|
||||
"-DCOMPILER_RT_BUILD_PROFILE=OFF"
|
||||
] ++ lib.optionals ((useLLVM && !haveLibc) || bareMetal) [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
"-DCOMPILER_RT_BAREMETAL_BUILD=ON"
|
||||
"-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}"
|
||||
] ++ lib.optionals (useLLVM && !haveLibc) [
|
||||
"-DCMAKE_C_FLAGS=-nodefaultlibs"
|
||||
] ++ lib.optionals (useLLVM) [
|
||||
"-DCOMPILER_RT_BUILD_BUILTINS=ON"
|
||||
#https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
"-DDARWIN_macosx_OVERRIDE_SDK_VERSION=ON"
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
"-DDARWIN_osx_BUILTIN_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
|
||||
# `COMPILER_RT_DEFAULT_TARGET_ONLY` does not apply to Darwin:
|
||||
# https://github.com/llvm/llvm-project/blob/27ef42bec80b6c010b7b3729ed0528619521a690/compiler-rt/cmake/base-config-ix.cmake#L153
|
||||
"-DCOMPILER_RT_ENABLE_IOS=OFF"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
patches = [
|
||||
./X86-support-extension.patch # Add support for i486 i586 i686 by reusing i386 config
|
||||
./gnu-install-dirs.patch
|
||||
# ld-wrapper dislikes `-rpath-link //nix/store`, so we normalize away the
|
||||
# extra `/`.
|
||||
./normalize-var.patch
|
||||
# Prevent a compilation error on darwin
|
||||
./darwin-targetconditionals.patch
|
||||
# See: https://github.com/NixOS/nixpkgs/pull/186575
|
||||
../../common/compiler-rt/darwin-plistbuddy-workaround.patch
|
||||
# See: https://github.com/NixOS/nixpkgs/pull/194634#discussion_r999829893
|
||||
./armv7l.patch
|
||||
]
|
||||
# The `compiler-rt` build inspects `ld` to figure out whether it needs to
|
||||
# explicitly call `codesign`:
|
||||
# https://github.com/llvm/llvm-project/blob/27ef42bec80b6c010b7b3729ed0528619521a690/compiler-rt/cmake/Modules/AddCompilerRT.cmake#L409-L422
|
||||
#
|
||||
# In our case, despite (currently) having an `ld` version than 609, we don't
|
||||
# need an explicit codesigning step because `postLinkSignHook` handles this
|
||||
# for us.
|
||||
#
|
||||
# Unfortunately there isn't an easy way to override
|
||||
# `NEED_EXPLICIT_ADHOC_CODESIGN`.
|
||||
#
|
||||
# Adding `codesign` as a build input also doesn't currently work because, as
|
||||
# of this writing, `codesign` in nixpkgs doesn't support the `--sign` alias
|
||||
# which the `compiler-rt` build uses. See here for context:
|
||||
# https://github.com/NixOS/nixpkgs/pull/194634#issuecomment-1272116014
|
||||
#
|
||||
# So, for now, we patch `compiler-rt` to skip the explicit codesigning step.
|
||||
++ lib.optional stdenv.hostPlatform.isDarwin ./skip-explicit-codesign.patch;
|
||||
|
||||
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks
|
||||
# to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra
|
||||
# can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd
|
||||
# get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by
|
||||
# a flag and turn the flag off during the stdenv build.
|
||||
postPatch = lib.optionalString (!stdenv.isDarwin) ''
|
||||
substituteInPlace cmake/builtin-config-ix.cmake \
|
||||
--replace 'set(X86 i386)' 'set(X86 i386 i486 i586 i686)'
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
substituteInPlace cmake/builtin-config-ix.cmake \
|
||||
--replace 'set(ARM64 arm64 arm64e)' 'set(ARM64)'
|
||||
substituteInPlace cmake/config-ix.cmake \
|
||||
--replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)'
|
||||
'' + lib.optionalString (useLLVM) ''
|
||||
substituteInPlace lib/builtins/int_util.c \
|
||||
--replace "#include <stdlib.h>" ""
|
||||
substituteInPlace lib/builtins/clear_cache.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
substituteInPlace lib/builtins/cpu_model.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
'';
|
||||
|
||||
# Hack around weird upsream RPATH bug
|
||||
postInstall = lib.optionalString (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isWasm) ''
|
||||
ln -s "$out/lib"/*/* "$out/lib"
|
||||
'' + lib.optionalString (useLLVM) ''
|
||||
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o
|
||||
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o
|
||||
ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o
|
||||
ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o
|
||||
'' + lib.optionalString doFakeLibgcc ''
|
||||
ln -s $out/lib/freebsd/libclang_rt.builtins-*.a $out/lib/libgcc.a
|
||||
'';
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://compiler-rt.llvm.org/";
|
||||
description = "Compiler runtime libraries";
|
||||
longDescription = ''
|
||||
The compiler-rt project provides highly tuned implementations of the
|
||||
low-level code generator support routines like "__fixunsdfdi" and other
|
||||
calls generated when a target doesn't have a short sequence of native
|
||||
instructions to implement a core IR operation. It also provides
|
||||
implementations of run-time libraries for dynamic testing tools such as
|
||||
AddressSanitizer, ThreadSanitizer, MemorySanitizer, and DataFlowSanitizer.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
diff --git a/cmake/base-config-ix.cmake b/cmake/base-config-ix.cmake
|
||||
index 8a6219568b3f..30ee68a47ccf 100644
|
||||
--- a/cmake/base-config-ix.cmake
|
||||
+++ b/cmake/base-config-ix.cmake
|
||||
@@ -100,13 +100,13 @@ endif()
|
||||
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(COMPILER_RT_OUTPUT_LIBRARY_DIR
|
||||
${COMPILER_RT_OUTPUT_DIR}/lib)
|
||||
- extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" lib)
|
||||
+ extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "${CMAKE_INSTALL_LIBDIR}")
|
||||
set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
|
||||
"Path where built compiler-rt libraries should be installed.")
|
||||
else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(COMPILER_RT_OUTPUT_LIBRARY_DIR
|
||||
${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
|
||||
- extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "lib/${COMPILER_RT_OS_DIR}")
|
||||
+ extend_path(default_install_path "${COMPILER_RT_INSTALL_PATH}" "${CMAKE_INSTALL_LIBDIR}/${COMPILER_RT_OS_DIR}")
|
||||
set(COMPILER_RT_INSTALL_LIBRARY_DIR "${default_install_path}" CACHE PATH
|
||||
"Path where built compiler-rt libraries should be installed.")
|
||||
endif()
|
||||
@@ -0,0 +1,16 @@
|
||||
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
|
||||
index f1f46fb9599c..6f19e69507ba 100644
|
||||
--- a/cmake/Modules/CompilerRTUtils.cmake
|
||||
+++ b/cmake/Modules/CompilerRTUtils.cmake
|
||||
@@ -302,8 +302,9 @@ macro(load_llvm_config)
|
||||
# Get some LLVM variables from LLVMConfig.
|
||||
include("${LLVM_CMAKE_PATH}/LLVMConfig.cmake")
|
||||
|
||||
- set(LLVM_LIBRARY_OUTPUT_INTDIR
|
||||
- ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ get_filename_component(LLVM_LIBRARY_OUTPUT_INTDIR
|
||||
+ ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ REALPATH)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake
|
||||
--- a/cmake/Modules/AddCompilerRT.cmake
|
||||
+++ b/cmake/Modules/AddCompilerRT.cmake
|
||||
@@ -406,7 +406,7 @@ function(add_compiler_rt_runtime name type)
|
||||
if (HAD_ERROR)
|
||||
message(FATAL_ERROR "${CMAKE_LINKER} failed with status ${HAD_ERROR}")
|
||||
endif()
|
||||
- set(NEED_EXPLICIT_ADHOC_CODESIGN 1)
|
||||
+ set(NEED_EXPLICIT_ADHOC_CODESIGN 0) # `postLinkSignHook` handles this for us
|
||||
if ("${LD_V_OUTPUT}" MATCHES ".*ld64-([0-9.]+).*")
|
||||
string(REGEX REPLACE ".*ld64-([0-9.]+).*" "\\1" HOST_LINK_VERSION ${LD_V_OUTPUT})
|
||||
if (HOST_LINK_VERSION VERSION_GREATER_EQUAL 609)
|
||||
354
pkgs/development/compilers/llvm/15/default.nix
Normal file
354
pkgs/development/compilers/llvm/15/default.nix
Normal file
@@ -0,0 +1,354 @@
|
||||
{ lowPrio, newScope, pkgs, lib, stdenv, stdenvNoCC, cmake, ninja
|
||||
, gccForLibs, preLibcCrossHeaders
|
||||
, libxml2, python3, fetchFromGitHub, overrideCC, wrapCCWith, wrapBintoolsWith
|
||||
, buildLlvmTools # tools, but from the previous stage, for cross
|
||||
, targetLlvmLibraries # libraries, but from the next stage, for cross
|
||||
, targetLlvm
|
||||
# This is the default binutils, but with *this* version of LLD rather
|
||||
# than the default LLVM verion's, if LLD is the choice. We use these for
|
||||
# the `useLLVM` bootstrapping below.
|
||||
, bootBintoolsNoLibc ?
|
||||
if stdenv.targetPlatform.linker == "lld"
|
||||
then null
|
||||
else pkgs.bintoolsNoLibc
|
||||
, bootBintools ?
|
||||
if stdenv.targetPlatform.linker == "lld"
|
||||
then null
|
||||
else pkgs.bintools
|
||||
, darwin
|
||||
# LLVM release information; specify one of these but not both:
|
||||
, gitRelease ? null
|
||||
# i.e.:
|
||||
# {
|
||||
# version = /* i.e. "15.0.0" */;
|
||||
# rev = /* commit SHA */;
|
||||
# rev-version = /* human readable version; i.e. "unstable-2022-26-07" */;
|
||||
# sha256 = /* checksum for this release, can omit if specifying your own `monorepoSrc` */;
|
||||
# }
|
||||
, officialRelease ? { version = "15.0.7"; sha256 = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s="; }
|
||||
# i.e.:
|
||||
# {
|
||||
# version = /* i.e. "15.0.0" */;
|
||||
# candidate = /* optional; if specified, should be: "rcN" */
|
||||
# sha256 = /* checksum for this release, can omit if specifying your own `monorepoSrc` */;
|
||||
# }
|
||||
# By default, we'll try to fetch a release from `github:llvm/llvm-project`
|
||||
# corresponding to the `gitRelease` or `officialRelease` specified.
|
||||
#
|
||||
# You can provide your own LLVM source by specifying this arg but then it's up
|
||||
# to you to make sure that the LLVM repo given matches the release configuration
|
||||
# specified.
|
||||
, monorepoSrc ? null
|
||||
}:
|
||||
|
||||
assert let
|
||||
int = a: if a then 1 else 0;
|
||||
xor = a: b: ((builtins.bitXor (int a) (int b)) == 1);
|
||||
in
|
||||
lib.assertMsg
|
||||
(xor
|
||||
(gitRelease != null)
|
||||
(officialRelease != null))
|
||||
("must specify `gitRelease` or `officialRelease`" +
|
||||
(lib.optionalString (gitRelease != null) " — not both"));
|
||||
let
|
||||
monorepoSrc' = monorepoSrc;
|
||||
in let
|
||||
releaseInfo = if gitRelease != null then rec {
|
||||
original = gitRelease;
|
||||
release_version = original.version;
|
||||
version = gitRelease.rev-version;
|
||||
} else rec {
|
||||
original = officialRelease;
|
||||
release_version = original.version;
|
||||
version = if original ? candidate then
|
||||
"${release_version}-${original.candidate}"
|
||||
else
|
||||
release_version;
|
||||
};
|
||||
|
||||
monorepoSrc = if monorepoSrc' != null then
|
||||
monorepoSrc'
|
||||
else let
|
||||
sha256 = releaseInfo.original.sha256;
|
||||
rev = if gitRelease != null then
|
||||
gitRelease.rev
|
||||
else
|
||||
"llvmorg-${releaseInfo.version}";
|
||||
in fetchFromGitHub {
|
||||
owner = "llvm";
|
||||
repo = "llvm-project";
|
||||
inherit rev sha256;
|
||||
};
|
||||
|
||||
inherit (releaseInfo) release_version version;
|
||||
|
||||
llvm_meta = {
|
||||
license = with lib.licenses; [ ncsa llvm-exception ];
|
||||
maintainers = lib.teams.llvm.members;
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
|
||||
tools = lib.makeExtensible (tools: let
|
||||
callPackage = newScope (tools // { inherit stdenv cmake ninja libxml2 python3 release_version version monorepoSrc buildLlvmTools; });
|
||||
mkExtraBuildCommands0 = cc: ''
|
||||
rsrc="$out/resource-root"
|
||||
mkdir "$rsrc"
|
||||
ln -s "${cc.lib}/lib/clang/${release_version}/include" "$rsrc"
|
||||
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
||||
'';
|
||||
mkExtraBuildCommands = cc: mkExtraBuildCommands0 cc + ''
|
||||
ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib"
|
||||
ln -s "${targetLlvmLibraries.compiler-rt.out}/share" "$rsrc/share"
|
||||
'';
|
||||
|
||||
bintoolsNoLibc' =
|
||||
if bootBintoolsNoLibc == null
|
||||
then tools.bintoolsNoLibc
|
||||
else bootBintoolsNoLibc;
|
||||
bintools' =
|
||||
if bootBintools == null
|
||||
then tools.bintools
|
||||
else bootBintools;
|
||||
|
||||
in {
|
||||
|
||||
libllvm = callPackage ./llvm {
|
||||
inherit llvm_meta;
|
||||
};
|
||||
|
||||
# `llvm` historically had the binaries. When choosing an output explicitly,
|
||||
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
|
||||
llvm = tools.libllvm.out // { outputSpecified = false; };
|
||||
|
||||
libclang = callPackage ./clang {
|
||||
inherit llvm_meta;
|
||||
};
|
||||
|
||||
clang-unwrapped = tools.libclang.out // { outputSpecified = false; };
|
||||
|
||||
llvm-manpages = lowPrio (tools.libllvm.override {
|
||||
enableManpages = true;
|
||||
python3 = pkgs.python3; # don't use python-boot
|
||||
});
|
||||
|
||||
clang-manpages = lowPrio (tools.libclang.override {
|
||||
enableManpages = true;
|
||||
python3 = pkgs.python3; # don't use python-boot
|
||||
});
|
||||
|
||||
lldb-manpages = lowPrio (tools.lldb.override {
|
||||
enableManpages = true;
|
||||
python3 = pkgs.python3; # don't use python-boot
|
||||
});
|
||||
|
||||
# pick clang appropriate for package set we are targeting
|
||||
clang =
|
||||
/**/ if stdenv.targetPlatform.useLLVM or false then tools.clangUseLLVM
|
||||
else if (pkgs.targetPackages.stdenv or stdenv).cc.isGNU then tools.libstdcxxClang
|
||||
else tools.libcxxClang;
|
||||
|
||||
libstdcxxClang = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
# libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper.
|
||||
libcxx = null;
|
||||
extraPackages = [
|
||||
targetLlvmLibraries.compiler-rt
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
};
|
||||
|
||||
libcxxClang = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = targetLlvmLibraries.libcxx;
|
||||
extraPackages = [
|
||||
libcxx.cxxabi
|
||||
targetLlvmLibraries.compiler-rt
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
};
|
||||
|
||||
lld = callPackage ./lld {
|
||||
inherit llvm_meta;
|
||||
};
|
||||
|
||||
lldb = callPackage ./lldb {
|
||||
inherit llvm_meta;
|
||||
inherit (darwin) libobjc bootstrap_cmds;
|
||||
inherit (darwin.apple_sdk.libs) xpc;
|
||||
inherit (darwin.apple_sdk.frameworks) Foundation Carbon Cocoa;
|
||||
};
|
||||
|
||||
# Below, is the LLVM bootstrapping logic. It handles building a
|
||||
# fully LLVM toolchain from scratch. No GCC toolchain should be
|
||||
# pulled in. As a consequence, it is very quick to build different
|
||||
# targets provided by LLVM and we can also build for what GCC
|
||||
# doesn’t support like LLVM. Probably we should move to some other
|
||||
# file.
|
||||
|
||||
bintools-unwrapped = callPackage ./bintools {};
|
||||
|
||||
bintoolsNoLibc = wrapBintoolsWith {
|
||||
bintools = tools.bintools-unwrapped;
|
||||
libc = preLibcCrossHeaders;
|
||||
};
|
||||
|
||||
bintools = wrapBintoolsWith {
|
||||
bintools = tools.bintools-unwrapped;
|
||||
};
|
||||
|
||||
clangUseLLVM = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = targetLlvmLibraries.libcxx;
|
||||
bintools = bintools';
|
||||
extraPackages = [
|
||||
libcxx.cxxabi
|
||||
targetLlvmLibraries.compiler-rt
|
||||
] ++ lib.optionals (!stdenv.targetPlatform.isWasm) [
|
||||
targetLlvmLibraries.libunwind
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
nixSupport.cc-cflags =
|
||||
[ "-rtlib=compiler-rt"
|
||||
"-Wno-unused-command-line-argument"
|
||||
"-B${targetLlvmLibraries.compiler-rt}/lib"
|
||||
]
|
||||
++ lib.optional (!stdenv.targetPlatform.isWasm) "--unwindlib=libunwind"
|
||||
++ lib.optional
|
||||
(!stdenv.targetPlatform.isWasm && stdenv.targetPlatform.useLLVM or false)
|
||||
"-lunwind"
|
||||
++ lib.optional stdenv.targetPlatform.isWasm "-fno-exceptions";
|
||||
};
|
||||
|
||||
clangNoLibcxx = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = null;
|
||||
bintools = bintools';
|
||||
extraPackages = [
|
||||
targetLlvmLibraries.compiler-rt
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
nixSupport.cc-cflags = [
|
||||
"-rtlib=compiler-rt"
|
||||
"-B${targetLlvmLibraries.compiler-rt}/lib"
|
||||
"-nostdlib++"
|
||||
];
|
||||
};
|
||||
|
||||
clangNoLibc = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = null;
|
||||
bintools = bintoolsNoLibc';
|
||||
extraPackages = [
|
||||
targetLlvmLibraries.compiler-rt
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
nixSupport.cc-cflags = [
|
||||
"-rtlib=compiler-rt"
|
||||
"-B${targetLlvmLibraries.compiler-rt}/lib"
|
||||
];
|
||||
};
|
||||
|
||||
clangNoCompilerRt = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = null;
|
||||
bintools = bintoolsNoLibc';
|
||||
extraPackages = [ ];
|
||||
extraBuildCommands = mkExtraBuildCommands0 cc;
|
||||
nixSupport.cc-cflags = [ "-nostartfiles" ];
|
||||
};
|
||||
|
||||
clangNoCompilerRtWithLibc = wrapCCWith rec {
|
||||
cc = tools.clang-unwrapped;
|
||||
libcxx = null;
|
||||
bintools = bintools';
|
||||
extraPackages = [ ];
|
||||
extraBuildCommands = mkExtraBuildCommands0 cc;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
libraries = lib.makeExtensible (libraries: let
|
||||
callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake ninja libxml2 python3 release_version version monorepoSrc; });
|
||||
in {
|
||||
|
||||
compiler-rt-libc = callPackage ./compiler-rt {
|
||||
inherit llvm_meta;
|
||||
stdenv = if stdenv.hostPlatform.useLLVM or false
|
||||
then overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc
|
||||
else stdenv;
|
||||
};
|
||||
|
||||
compiler-rt-no-libc = callPackage ./compiler-rt {
|
||||
inherit llvm_meta;
|
||||
stdenv = if stdenv.hostPlatform.useLLVM or false
|
||||
then overrideCC stdenv buildLlvmTools.clangNoCompilerRt
|
||||
else stdenv;
|
||||
};
|
||||
|
||||
# N.B. condition is safe because without useLLVM both are the same.
|
||||
compiler-rt = if stdenv.hostPlatform.isAndroid
|
||||
then libraries.compiler-rt-libc
|
||||
else libraries.compiler-rt-no-libc;
|
||||
|
||||
stdenv = overrideCC stdenv buildLlvmTools.clang;
|
||||
|
||||
libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang;
|
||||
|
||||
libcxxabi = let
|
||||
# CMake will "require" a compiler capable of compiling C++ programs
|
||||
# cxx-header's build does not actually use one so it doesn't really matter
|
||||
# what stdenv we use here, as long as CMake is happy.
|
||||
cxx-headers = callPackage ./libcxx {
|
||||
inherit llvm_meta;
|
||||
# Note that if we use the regular stdenv here we'll get cycle errors
|
||||
# when attempting to use this compiler in the stdenv.
|
||||
#
|
||||
# The final stdenv pulls `cxx-headers` from the package set where
|
||||
# hostPlatform *is* the target platform which means that `stdenv` at
|
||||
# that point attempts to use this toolchain.
|
||||
#
|
||||
# So, we use `stdenv_` (the stdenv containing `clang` from this package
|
||||
# set, defined below) to sidestep this issue.
|
||||
#
|
||||
# Because we only use `cxx-headers` in `libcxxabi` (which depends on the
|
||||
# clang stdenv _anyways_), this is okay.
|
||||
stdenv = stdenv_;
|
||||
headersOnly = true;
|
||||
};
|
||||
|
||||
# `libcxxabi` *doesn't* need a compiler with a working C++ stdlib but it
|
||||
# *does* need a relatively modern C++ compiler (see:
|
||||
# https://releases.llvm.org/15.0.0/projects/libcxx/docs/index.html#platform-and-compiler-support).
|
||||
#
|
||||
# So, we use the clang from this LLVM package set, like libc++
|
||||
# "boostrapping builds" do:
|
||||
# https://releases.llvm.org/15.0.0/projects/libcxx/docs/BuildingLibcxx.html#bootstrapping-build
|
||||
#
|
||||
# We cannot use `clangNoLibcxx` because that contains `compiler-rt` which,
|
||||
# on macOS, depends on `libcxxabi`, thus forming a cycle.
|
||||
stdenv_ = overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc;
|
||||
in callPackage ./libcxxabi {
|
||||
stdenv = stdenv_;
|
||||
inherit llvm_meta cxx-headers;
|
||||
};
|
||||
|
||||
# Like `libcxxabi` above, `libcxx` requires a fairly modern C++ compiler,
|
||||
# so: we use the clang from this LLVM package set instead of the regular
|
||||
# stdenv's compiler.
|
||||
libcxx = callPackage ./libcxx {
|
||||
inherit llvm_meta;
|
||||
stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
|
||||
};
|
||||
|
||||
libunwind = callPackage ./libunwind {
|
||||
inherit llvm_meta;
|
||||
stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
|
||||
};
|
||||
|
||||
openmp = callPackage ./openmp {
|
||||
inherit llvm_meta targetLlvm;
|
||||
};
|
||||
});
|
||||
|
||||
in { inherit tools libraries release_version; } // libraries // tools
|
||||
107
pkgs/development/compilers/llvm/15/libcxx/default.nix
Normal file
107
pkgs/development/compilers/llvm/15/libcxx/default.nix
Normal file
@@ -0,0 +1,107 @@
|
||||
{ lib, stdenv, llvm_meta
|
||||
, monorepoSrc, runCommand
|
||||
, cmake, ninja, python3, fixDarwinDylibNames, version
|
||||
, cxxabi ? if stdenv.hostPlatform.isFreeBSD then libcxxrt else libcxxabi
|
||||
, libcxxabi, libcxxrt
|
||||
, enableShared ? !stdenv.hostPlatform.isStatic
|
||||
|
||||
# If headersOnly is true, the resulting package would only include the headers.
|
||||
# Use this to break the circular dependency between libcxx and libcxxabi.
|
||||
#
|
||||
# Some context:
|
||||
# https://reviews.llvm.org/rG1687f2bbe2e2aaa092f942d4a97d41fad43eedfb
|
||||
, headersOnly ? false
|
||||
}:
|
||||
|
||||
let
|
||||
basename = "libcxx";
|
||||
in
|
||||
|
||||
assert stdenv.isDarwin -> cxxabi.libName == "c++abi";
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = basename + lib.optionalString headersOnly "-headers";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${basename} "$out"
|
||||
mkdir -p "$out/libcxxabi"
|
||||
cp -r ${monorepoSrc}/libcxxabi/include "$out/libcxxabi"
|
||||
mkdir -p "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
cp -r ${monorepoSrc}/third-party "$out"
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/runtimes";
|
||||
|
||||
outputs = [ "out" ] ++ lib.optional (!headersOnly) "dev";
|
||||
|
||||
prePatch = ''
|
||||
cd ../${basename}
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
] ++ lib.optionals stdenv.hostPlatform.isMusl [
|
||||
../../libcxx-0001-musl-hacks.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
cd ../runtimes
|
||||
'';
|
||||
|
||||
preConfigure = lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patchShebangs utils/cat_files.py
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ]
|
||||
++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||
|
||||
buildInputs = lib.optionals (!headersOnly) [ cxxabi ];
|
||||
|
||||
cmakeFlags = let
|
||||
# See: https://libcxx.llvm.org/BuildingLibcxx.html#cmdoption-arg-libcxx-cxx-abi-string
|
||||
libcxx_cxx_abi_opt = {
|
||||
"c++abi" = "system-libcxxabi";
|
||||
"cxxrt" = "libcxxrt";
|
||||
}.${cxxabi.libName} or (throw "unknown cxxabi: ${cxxabi.libName} (${cxxabi.pname})");
|
||||
in [
|
||||
"-DLLVM_ENABLE_RUNTIMES=libcxx"
|
||||
"-DLIBCXX_CXX_ABI=${if headersOnly then "none" else libcxx_cxx_abi_opt}"
|
||||
] ++ lib.optional (!headersOnly && cxxabi.libName == "c++abi") "-DLIBCXX_CXX_ABI_INCLUDE_PATHS=${cxxabi.dev}/include/c++/v1"
|
||||
++ lib.optional (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) "-DLIBCXX_HAS_MUSL_LIBC=1"
|
||||
++ lib.optional (stdenv.hostPlatform.useLLVM or false) "-DLIBCXX_USE_COMPILER_RT=ON"
|
||||
++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXX_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXX_ENABLE_FILESYSTEM=OFF"
|
||||
"-DLIBCXX_ENABLE_EXCEPTIONS=OFF"
|
||||
] ++ lib.optional (!enableShared) "-DLIBCXX_ENABLE_SHARED=OFF"
|
||||
# If we're only building the headers we don't actually *need* a functioning
|
||||
# C/C++ compiler:
|
||||
++ lib.optionals (headersOnly) [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
];
|
||||
|
||||
ninjaFlags = lib.optional headersOnly "generate-cxx-headers";
|
||||
installTargets = lib.optional headersOnly "install-cxx-headers";
|
||||
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
inherit cxxabi;
|
||||
};
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://libcxx.llvm.org/";
|
||||
description = "C++ standard library";
|
||||
longDescription = ''
|
||||
libc++ is an implementation of the C++ standard library, targeting C++11,
|
||||
C++14 and above.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 74eff2002fc9..c935d10878bb 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -419,7 +419,7 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
|
||||
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
|
||||
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
|
||||
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
+ set(LIBCXX_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
"Path where built libc++ libraries should be installed.")
|
||||
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1" CACHE PATH
|
||||
"Path where target-specific libc++ headers should be installed.")
|
||||
@@ -436,7 +436,7 @@ else()
|
||||
set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
|
||||
endif()
|
||||
set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LIBCXX_GENERATED_INCLUDE_DIR}")
|
||||
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX} CACHE PATH
|
||||
+ set(LIBCXX_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXX_LIBDIR_SUFFIX} CACHE PATH
|
||||
"Path where built libc++ libraries should be installed.")
|
||||
set(LIBCXX_INSTALL_INCLUDE_TARGET_DIR "${LIBCXX_INSTALL_INCLUDE_DIR}" CACHE PATH
|
||||
"Path where target-specific libc++ headers should be installed.")
|
||||
105
pkgs/development/compilers/llvm/15/libcxxabi/default.nix
Normal file
105
pkgs/development/compilers/llvm/15/libcxxabi/default.nix
Normal file
@@ -0,0 +1,105 @@
|
||||
{ lib, stdenv, llvm_meta, cmake, ninja, python3
|
||||
, monorepoSrc, runCommand, fetchpatch
|
||||
, cxx-headers, libunwind, version
|
||||
, enableShared ? !stdenv.hostPlatform.isStatic
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libcxxabi";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libcxx/src"
|
||||
cp -r ${monorepoSrc}/libcxx/cmake "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/include "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/src/include "$out/libcxx/src"
|
||||
mkdir -p "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/runtimes";
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
postUnpack = lib.optionalString stdenv.isDarwin ''
|
||||
export TRIPLE=x86_64-apple-darwin
|
||||
'' + lib.optionalString stdenv.hostPlatform.isWasm ''
|
||||
patch -p1 -d llvm -i ${./wasm.patch}
|
||||
'';
|
||||
|
||||
prePatch = ''
|
||||
cd ../${pname}
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
|
||||
# https://reviews.llvm.org/D132298, Allow building libcxxabi alone
|
||||
(fetchpatch {
|
||||
url = "https://github.com/llvm/llvm-project/commit/e6a0800532bb409f6d1c62f3698bdd6994a877dc.patch";
|
||||
sha256 = "1xyjd56m4pfwq8p3xh6i8lhkk9kq15jaml7qbhxdf87z4jjkk63a";
|
||||
stripLen = 1;
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
cd ../runtimes
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ];
|
||||
buildInputs = lib.optional (!stdenv.isDarwin && !stdenv.hostPlatform.isWasm) libunwind;
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLVM_ENABLE_RUNTIMES=libcxxabi"
|
||||
"-DLIBCXXABI_LIBCXX_INCLUDES=${cxx-headers}/include/c++/v1"
|
||||
|
||||
# `libcxxabi`'s build does not need a toolchain with a c++ stdlib attached
|
||||
# (we specify the headers it should use explicitly above).
|
||||
#
|
||||
# CMake however checks for this anyways; this flag tells it not to. See:
|
||||
# https://github.com/llvm/llvm-project/blob/4bd3f3759259548e159aeba5c76efb9a0864e6fa/llvm/runtimes/CMakeLists.txt#L243
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
] ++ lib.optionals (stdenv.hostPlatform.useLLVM or false) [
|
||||
"-DLLVM_ENABLE_LIBCXX=ON"
|
||||
"-DLIBCXXABI_USE_LLVM_UNWINDER=ON"
|
||||
] ++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXXABI_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF"
|
||||
] ++ lib.optionals (!enableShared) [
|
||||
"-DLIBCXXABI_ENABLE_SHARED=OFF"
|
||||
];
|
||||
|
||||
preInstall = lib.optionalString stdenv.isDarwin ''
|
||||
for file in lib/*.dylib; do
|
||||
# this should be done in CMake, but having trouble figuring out
|
||||
# the magic combination of necessary CMake variables
|
||||
# if you fancy a try, take a look at
|
||||
# https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
|
||||
install_name_tool -id $out/$file $file
|
||||
done
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p "$dev/include"
|
||||
install -m 644 ../../${pname}/include/${if stdenv.isDarwin then "*" else "cxxabi.h"} "$dev/include"
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
libName = "c++abi";
|
||||
};
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://libcxxabi.llvm.org/";
|
||||
description = "Provides C++ standard library support";
|
||||
longDescription = ''
|
||||
libc++abi is a new implementation of low level support for a standard C++ library.
|
||||
'';
|
||||
maintainers = llvm_meta.maintainers ++ [ lib.maintainers.vlstill ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index b8326d08d23a..a1e36f713161 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -187,7 +187,7 @@ set(LIBCXXABI_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
|
||||
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(LIBCXXABI_HEADER_DIR ${LLVM_BINARY_DIR})
|
||||
set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
|
||||
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
+ set(LIBCXXABI_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
"Path where built libc++abi libraries should be installed.")
|
||||
if(LIBCXX_LIBDIR_SUBDIR)
|
||||
string(APPEND LIBCXXABI_LIBRARY_DIR /${LIBCXXABI_LIBDIR_SUBDIR})
|
||||
@@ -201,7 +201,7 @@ else()
|
||||
set(LIBCXXABI_HEADER_DIR ${CMAKE_BINARY_DIR})
|
||||
set(LIBCXXABI_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
|
||||
endif()
|
||||
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LIBCXXABI_LIBDIR_SUFFIX} CACHE PATH
|
||||
+ set(LIBCXXABI_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXXABI_LIBDIR_SUFFIX} CACHE PATH
|
||||
"Path where built libc++abi libraries should be installed.")
|
||||
endif()
|
||||
|
||||
16
pkgs/development/compilers/llvm/15/libcxxabi/wasm.patch
Normal file
16
pkgs/development/compilers/llvm/15/libcxxabi/wasm.patch
Normal file
@@ -0,0 +1,16 @@
|
||||
diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake
|
||||
index 15497d405e0..33f7f18193a 100644
|
||||
--- a/cmake/modules/HandleLLVMOptions.cmake
|
||||
+++ b/cmake/modules/HandleLLVMOptions.cmake
|
||||
@@ -127,7 +127,10 @@ else(WIN32)
|
||||
set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
|
||||
endif()
|
||||
else(FUCHSIA OR UNIX)
|
||||
- MESSAGE(SEND_ERROR "Unable to determine platform")
|
||||
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Wasi")
|
||||
+ else()
|
||||
+ MESSAGE(SEND_ERROR "Unable to determine platform")
|
||||
+ endif()
|
||||
endif(FUCHSIA OR UNIX)
|
||||
endif(WIN32)
|
||||
|
||||
62
pkgs/development/compilers/llvm/15/libunwind/default.nix
Normal file
62
pkgs/development/compilers/llvm/15/libunwind/default.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
{ lib, stdenv, llvm_meta, version
|
||||
, monorepoSrc, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, python3
|
||||
, enableShared ? !stdenv.hostPlatform.isStatic
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libunwind";
|
||||
inherit version;
|
||||
|
||||
# I am not so comfortable giving libc++ and friends the whole monorepo as
|
||||
# requested, so I filter it to what is needed.
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/cmake "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/utils "$out/libcxx"
|
||||
mkdir -p "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/runtimes";
|
||||
|
||||
prePatch = ''
|
||||
cd ../${pname}
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
cd ../runtimes
|
||||
'';
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLVM_ENABLE_RUNTIMES=libunwind"
|
||||
] ++ lib.optional (!enableShared) "-DLIBUNWIND_ENABLE_SHARED=OFF";
|
||||
|
||||
meta = llvm_meta // {
|
||||
# Details: https://github.com/llvm/llvm-project/blob/main/libunwind/docs/index.rst
|
||||
homepage = "https://clang.llvm.org/docs/Toolchain.html#unwind-library";
|
||||
description = "LLVM's unwinder library";
|
||||
longDescription = ''
|
||||
The unwind library provides a family of _Unwind_* functions implementing
|
||||
the language-neutral stack unwinding portion of the Itanium C++ ABI (Level
|
||||
I). It is a dependency of the C++ ABI library, and sometimes is a
|
||||
dependency of other runtimes.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 5a06805f05f1..86a50329e6a8 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -117,7 +117,7 @@ set(LIBUNWIND_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
|
||||
|
||||
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
|
||||
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
+ set(LIBUNWIND_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE} CACHE PATH
|
||||
"Path where built libunwind libraries should be installed.")
|
||||
if(LIBCXX_LIBDIR_SUBDIR)
|
||||
string(APPEND LIBUNWIND_LIBRARY_DIR /${LIBUNWIND_LIBDIR_SUBDIR})
|
||||
@@ -129,7 +129,7 @@ else()
|
||||
else()
|
||||
set(LIBUNWIND_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBUNWIND_LIBDIR_SUFFIX})
|
||||
endif()
|
||||
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LIBUNWIND_LIBDIR_SUFFIX} CACHE PATH
|
||||
+ set(LIBUNWIND_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBUNWIND_LIBDIR_SUFFIX} CACHE PATH
|
||||
"Path where built libunwind libraries should be installed.")
|
||||
endif()
|
||||
|
||||
55
pkgs/development/compilers/llvm/15/lld/default.nix
Normal file
55
pkgs/development/compilers/llvm/15/lld/default.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
{ lib, stdenv, llvm_meta
|
||||
, buildLlvmTools
|
||||
, monorepoSrc, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, libxml2
|
||||
, libllvm
|
||||
, version
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "lld";
|
||||
inherit version;
|
||||
|
||||
# Blank llvm dir just so relative path works
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libunwind"
|
||||
cp -r ${monorepoSrc}/libunwind/include "$out/libunwind"
|
||||
mkdir -p "$out/llvm"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja ];
|
||||
buildInputs = [ libllvm libxml2 ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLD_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/lld"
|
||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
];
|
||||
LDFLAGS = lib.optionalString stdenv.hostPlatform.isMusl "-Wl,-z,stack-size=2097152";
|
||||
|
||||
outputs = [ "out" "lib" "dev" ];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lld.llvm.org/";
|
||||
description = "The LLVM linker (unwrapped)";
|
||||
longDescription = ''
|
||||
LLD is a linker from the LLVM project that is a drop-in replacement for
|
||||
system linkers and runs much faster than them. It also provides features
|
||||
that are useful for toolchain developers.
|
||||
The linker supports ELF (Unix), PE/COFF (Windows), Mach-O (macOS), and
|
||||
WebAssembly in descending order of completeness. Internally, LLD consists
|
||||
of several different linkers.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index dcc649629a4b..58dca54642e4 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -70,13 +70,15 @@ if(LLD_BUILT_STANDALONE)
|
||||
if (NOT LLVM_CONFIG_FOUND)
|
||||
# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config
|
||||
# path is removed.
|
||||
- set(MAIN_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")
|
||||
+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS})
|
||||
set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}")
|
||||
# N.B. this is just a default value, the CACHE PATHs below can be overridden.
|
||||
set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm")
|
||||
+ else()
|
||||
+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
- set(LLVM_MAIN_INCLUDE_DIR "${MAIN_INCLUDE_DIR}" CACHE PATH "Path to llvm/include")
|
||||
+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed")
|
||||
set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree")
|
||||
set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree")
|
||||
|
||||
@@ -95,7 +97,7 @@ if(LLD_BUILT_STANDALONE)
|
||||
|
||||
set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
|
||||
|
||||
- include_directories("${LLVM_BINARY_DIR}/include" ${LLVM_INCLUDE_DIRS})
|
||||
+ include_directories(${LLVM_INCLUDE_DIRS})
|
||||
link_directories(${LLVM_LIBRARY_DIRS})
|
||||
|
||||
if(LLVM_INCLUDE_TESTS)
|
||||
diff --git a/cmake/modules/AddLLD.cmake b/cmake/modules/AddLLD.cmake
|
||||
index d3924f7243d4..42a7cd62281c 100644
|
||||
--- a/cmake/modules/AddLLD.cmake
|
||||
+++ b/cmake/modules/AddLLD.cmake
|
||||
@@ -18,8 +18,8 @@ macro(add_lld_library name)
|
||||
install(TARGETS ${name}
|
||||
COMPONENT ${name}
|
||||
${export_to_lldtargets}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
|
||||
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
||||
|
||||
if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
@@ -0,0 +1,12 @@
|
||||
diff --git a/source/Host/macosx/objcxx/HostInfoMacOSX.mm b/source/Host/macosx/objcxx/HostInfoMacOSX.mm
|
||||
--- a/source/Host/macosx/objcxx/HostInfoMacOSX.mm
|
||||
+++ b/source/Host/macosx/objcxx/HostInfoMacOSX.mm
|
||||
@@ -233,7 +233,7 @@ void HostInfoMacOSX::ComputeHostArchitectureSupport(ArchSpec &arch_32,
|
||||
len = sizeof(is_64_bit_capable);
|
||||
::sysctlbyname("hw.cpu64bit_capable", &is_64_bit_capable, &len, NULL, 0);
|
||||
|
||||
- if (cputype == CPU_TYPE_ARM64 && cpusubtype == CPU_SUBTYPE_ARM64E) {
|
||||
+ if (cputype == CPU_TYPE_ARM64 && cpusubtype == ((cpu_subtype_t) 2)) { // CPU_SUBTYPE_ARM64E is not available in the macOS 10.12 headers
|
||||
// The arm64e architecture is a preview. Pretend the host architecture
|
||||
// is arm64.
|
||||
cpusubtype = CPU_SUBTYPE_ARM64_ALL;
|
||||
186
pkgs/development/compilers/llvm/15/lldb/default.nix
Normal file
186
pkgs/development/compilers/llvm/15/lldb/default.nix
Normal file
@@ -0,0 +1,186 @@
|
||||
{ lib, stdenv, llvm_meta
|
||||
, runCommand
|
||||
, monorepoSrc
|
||||
, cmake
|
||||
, ninja
|
||||
, zlib
|
||||
, ncurses
|
||||
, swig
|
||||
, which
|
||||
, libedit
|
||||
, libxml2
|
||||
, libllvm
|
||||
, libclang
|
||||
, python3
|
||||
, version
|
||||
, libobjc
|
||||
, xpc
|
||||
, Foundation
|
||||
, bootstrap_cmds
|
||||
, Carbon
|
||||
, Cocoa
|
||||
, lit
|
||||
, makeWrapper
|
||||
, darwin
|
||||
, enableManpages ? false
|
||||
, lua5_3
|
||||
}:
|
||||
|
||||
# TODO: we build the python bindings but don't expose them as a python package
|
||||
# TODO: expose the vscode extension?
|
||||
|
||||
stdenv.mkDerivation (rec {
|
||||
pname = "lldb";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
patches = [
|
||||
./procfs.patch
|
||||
(runCommand "resource-dir.patch" {
|
||||
clangLibDir = "${libclang.lib}/lib";
|
||||
} ''
|
||||
substitute '${./resource-dir.patch}' "$out" --subst-var clangLibDir
|
||||
'')
|
||||
./gnu-install-dirs.patch
|
||||
]
|
||||
# This is a stopgap solution if/until the macOS SDK used for x86_64 is
|
||||
# updated.
|
||||
#
|
||||
# The older 10.12 SDK used on x86_64 as of this writing has a `mach/machine.h`
|
||||
# header that does not define `CPU_SUBTYPE_ARM64E` so we replace the one use
|
||||
# of this preprocessor symbol in `lldb` with its expansion.
|
||||
#
|
||||
# See here for some context:
|
||||
# https://github.com/NixOS/nixpkgs/pull/194634#issuecomment-1272129132
|
||||
++ lib.optional (
|
||||
stdenv.targetPlatform.isDarwin
|
||||
&& !stdenv.targetPlatform.isAarch64
|
||||
&& (lib.versionOlder darwin.apple_sdk.sdk.version "11.0")
|
||||
) ./cpu_subtype_arm64e_replacement.patch;
|
||||
|
||||
outputs = [ "out" "lib" "dev" ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake ninja python3 which swig lit makeWrapper lua5_3
|
||||
] ++ lib.optionals enableManpages [
|
||||
python3.pkgs.sphinx python3.pkgs.recommonmark
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
ncurses
|
||||
zlib
|
||||
libedit
|
||||
libxml2
|
||||
libllvm
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
libobjc
|
||||
xpc
|
||||
Foundation
|
||||
bootstrap_cmds
|
||||
Carbon
|
||||
Cocoa
|
||||
]
|
||||
# The older libSystem used on x86_64 macOS is missing the
|
||||
# `<bsm/audit_session.h>` header which `lldb` uses.
|
||||
#
|
||||
# We copy this header over from macOS 10.12 SDK.
|
||||
#
|
||||
# See here for context:
|
||||
# https://github.com/NixOS/nixpkgs/pull/194634#issuecomment-1272129132
|
||||
++ lib.optional (
|
||||
stdenv.targetPlatform.isDarwin
|
||||
&& !stdenv.targetPlatform.isAarch64
|
||||
) (
|
||||
runCommand "bsm-audit-session-header" { } ''
|
||||
install -Dm444 \
|
||||
"${lib.getDev darwin.apple_sdk.sdk}/include/bsm/audit_session.h" \
|
||||
"$out/include/bsm/audit_session.h"
|
||||
''
|
||||
);
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
|
||||
"-DLLVM_ENABLE_RTTI=OFF"
|
||||
"-DClang_DIR=${libclang.dev}/lib/cmake"
|
||||
"-DLLVM_EXTERNAL_LIT=${lit}/bin/lit"
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
"-DLLDB_USE_SYSTEM_DEBUGSERVER=ON"
|
||||
] ++ lib.optionals (!stdenv.isDarwin) [
|
||||
"-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
|
||||
] ++ lib.optionals enableManpages [
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
|
||||
# docs reference `automodapi` but it's not added to the extensions list when
|
||||
# only building the manpages:
|
||||
# https://github.com/llvm/llvm-project/blob/af6ec9200b09039573d85e349496c4f5b17c3d7f/lldb/docs/conf.py#L54
|
||||
#
|
||||
# so, we just ignore the resulting errors
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
] ++ lib.optionals doCheck [
|
||||
"-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
|
||||
"-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
|
||||
installCheckPhase = ''
|
||||
if [ ! -e "$lib/${python3.sitePackages}/lldb/_lldb.so" ] ; then
|
||||
return 1;
|
||||
fi
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
|
||||
|
||||
# Editor support
|
||||
# vscode:
|
||||
install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
|
||||
mkdir -p $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
|
||||
ln -s $out/bin/lldb-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
|
||||
'';
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lldb.llvm.org/";
|
||||
description = "A next-generation high-performance debugger";
|
||||
longDescription = ''
|
||||
LLDB is a next generation, high-performance debugger. It is built as a set
|
||||
of reusable components which highly leverage existing libraries in the
|
||||
larger LLVM Project, such as the Clang expression parser and LLVM
|
||||
disassembler.
|
||||
'';
|
||||
};
|
||||
} // lib.optionalAttrs enableManpages {
|
||||
pname = "lldb-manpages";
|
||||
|
||||
ninjaFlags = [ "docs-lldb-man" ];
|
||||
|
||||
propagatedBuildInputs = [];
|
||||
|
||||
# manually install lldb man page
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
install docs/man/lldb.1 -t $out/share/man/man1/
|
||||
'';
|
||||
|
||||
postPatch = null;
|
||||
postInstall = null;
|
||||
|
||||
outputs = [ "out" ];
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = llvm_meta // {
|
||||
description = "man pages for LLDB ${version}";
|
||||
};
|
||||
})
|
||||
@@ -0,0 +1,23 @@
|
||||
diff --git a/cmake/modules/AddLLDB.cmake b/cmake/modules/AddLLDB.cmake
|
||||
index 3291a7c808e1..b27d27ce6a87 100644
|
||||
--- a/cmake/modules/AddLLDB.cmake
|
||||
+++ b/cmake/modules/AddLLDB.cmake
|
||||
@@ -109,7 +109,7 @@ function(add_lldb_library name)
|
||||
endif()
|
||||
|
||||
if(PARAM_SHARED)
|
||||
- set(install_dest lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ set(install_dest ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
|
||||
if(PARAM_INSTALL_PREFIX)
|
||||
set(install_dest ${PARAM_INSTALL_PREFIX})
|
||||
endif()
|
||||
diff --git a/tools/intel-features/CMakeLists.txt b/tools/intel-features/CMakeLists.txt
|
||||
index 7d48491ec89a..c04543585588 100644
|
||||
--- a/tools/intel-features/CMakeLists.txt
|
||||
+++ b/tools/intel-features/CMakeLists.txt
|
||||
@@ -30,4 +30,4 @@ add_lldb_library(lldbIntelFeatures SHARED
|
||||
)
|
||||
|
||||
install(TARGETS lldbIntelFeatures
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
|
||||
46
pkgs/development/compilers/llvm/15/lldb/procfs.patch
Normal file
46
pkgs/development/compilers/llvm/15/lldb/procfs.patch
Normal file
@@ -0,0 +1,46 @@
|
||||
--- a/source/Plugins/Process/Linux/Procfs.h
|
||||
+++ b/source/Plugins/Process/Linux/Procfs.h
|
||||
@@ -10,6 +10,13 @@
|
||||
// sys/procfs.h on Android/Linux for all supported architectures.
|
||||
|
||||
#include <sys/ptrace.h>
|
||||
+#include <asm/ptrace.h>
|
||||
+
|
||||
+// on i686 preprocessor symbols with these register names are defined as
|
||||
+// numeric constants; these symbols clash with identifier names used in
|
||||
+// `llvm/Support/VirtualFileSystem.h` and `llvm/ADT/SmallVector.h`
|
||||
+#undef FS
|
||||
+#undef CS
|
||||
|
||||
#include "lldb/lldb-types.h"
|
||||
|
||||
@@ -17,23 +24,13 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
-#ifdef __ANDROID__
|
||||
-#if defined(__arm64__) || defined(__aarch64__)
|
||||
-typedef unsigned long elf_greg_t;
|
||||
-typedef elf_greg_t
|
||||
- elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
|
||||
-typedef struct user_fpsimd_state elf_fpregset_t;
|
||||
-#ifndef NT_FPREGSET
|
||||
-#define NT_FPREGSET NT_PRFPREG
|
||||
-#endif // NT_FPREGSET
|
||||
-#elif defined(__mips__)
|
||||
-#ifndef NT_FPREGSET
|
||||
-#define NT_FPREGSET NT_PRFPREG
|
||||
-#endif // NT_FPREGSET
|
||||
-#endif
|
||||
-#else // __ANDROID__
|
||||
+#if !defined(__GLIBC__) && defined(__powerpc__)
|
||||
+#define pt_regs musl_pt_regs
|
||||
+#include <sys/procfs.h>
|
||||
+#undef pt_regs
|
||||
+#else
|
||||
#include <sys/procfs.h>
|
||||
-#endif // __ANDROID__
|
||||
+#endif
|
||||
|
||||
namespace lldb_private {
|
||||
namespace process_linux {
|
||||
13
pkgs/development/compilers/llvm/15/lldb/resource-dir.patch
Normal file
13
pkgs/development/compilers/llvm/15/lldb/resource-dir.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
|
||||
index 37364341ff8b..7f74c1a3e257 100644
|
||||
--- a/cmake/modules/LLDBConfig.cmake
|
||||
+++ b/cmake/modules/LLDBConfig.cmake
|
||||
@@ -257,7 +257,7 @@ if (NOT TARGET clang-resource-headers)
|
||||
# Iterate over the possible places where the external resource directory
|
||||
# could be and pick the first that exists.
|
||||
foreach(CANDIDATE "${Clang_DIR}/../.." "${LLVM_DIR}" "${LLVM_LIBRARY_DIRS}"
|
||||
- "${LLVM_BUILD_LIBRARY_DIR}"
|
||||
+ "${LLVM_BUILD_LIBRARY_DIR}" "@clangLibDir@"
|
||||
"${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}")
|
||||
# Build the resource directory path by appending 'clang/<version number>'.
|
||||
set(CANDIDATE_RESOURCE_DIR "${CANDIDATE}/clang/${LLDB_CLANG_RESOURCE_DIR_NAME}")
|
||||
429
pkgs/development/compilers/llvm/15/llvm/default.nix
Normal file
429
pkgs/development/compilers/llvm/15/llvm/default.nix
Normal file
@@ -0,0 +1,429 @@
|
||||
{ lib, stdenv, llvm_meta
|
||||
, pkgsBuildBuild
|
||||
, monorepoSrc
|
||||
, runCommand
|
||||
, fetchpatch
|
||||
, cmake
|
||||
, darwin
|
||||
, ninja
|
||||
, python3
|
||||
, python3Packages
|
||||
, libffi
|
||||
, libbfd
|
||||
, libpfm
|
||||
, libxml2
|
||||
, ncurses
|
||||
, version
|
||||
, release_version
|
||||
, zlib
|
||||
, which
|
||||
, sysctl
|
||||
, buildLlvmTools
|
||||
, debugVersion ? false
|
||||
, doCheck ? (!stdenv.isx86_32 /* TODO: why */) && (!stdenv.hostPlatform.isMusl)
|
||||
&& (stdenv.hostPlatform == stdenv.buildPlatform)
|
||||
, enableManpages ? false
|
||||
, enableSharedLibraries ? !stdenv.hostPlatform.isStatic
|
||||
, enablePFM ? stdenv.isLinux /* PFM only supports Linux */
|
||||
# broken for Ampere eMAG 8180 (c2.large.arm on Packet) #56245
|
||||
# broken for the armv7l builder
|
||||
&& !stdenv.hostPlatform.isAarch
|
||||
, enablePolly ? true
|
||||
} @args:
|
||||
|
||||
let
|
||||
inherit (lib) optional optionals optionalString;
|
||||
|
||||
# Used when creating a version-suffixed symlink of libLLVM.dylib
|
||||
shortVersion = with lib;
|
||||
concatStringsSep "." (take 1 (splitString "." release_version));
|
||||
|
||||
# Ordinarily we would just the `doCheck` and `checkDeps` functionality
|
||||
# `mkDerivation` gives us to manage our test dependencies (instead of breaking
|
||||
# out `doCheck` as a package level attribute).
|
||||
#
|
||||
# Unfortunately `lit` does not forward `$PYTHONPATH` to children processes, in
|
||||
# particular the children it uses to do feature detection.
|
||||
#
|
||||
# This means that python deps we add to `checkDeps` (which the python
|
||||
# interpreter is made aware of via `$PYTHONPATH` – populated by the python
|
||||
# setup hook) are not picked up by `lit` which causes it to skip tests.
|
||||
#
|
||||
# Adding `python3.withPackages (ps: [ ... ])` to `checkDeps` also doesn't work
|
||||
# because this package is shadowed in `$PATH` by the regular `python3`
|
||||
# package.
|
||||
#
|
||||
# So, we "manually" assemble one python derivation for the package to depend
|
||||
# on, taking into account whether checks are enabled or not:
|
||||
python = if doCheck then
|
||||
# Note that we _explicitly_ ask for a python interpreter for our host
|
||||
# platform here; the splicing that would ordinarily take care of this for
|
||||
# us does not seem to work once we use `withPackages`.
|
||||
let
|
||||
checkDeps = ps: with ps; [ psutil ];
|
||||
in pkgsBuildBuild.targetPackages.python3.withPackages checkDeps
|
||||
else python3;
|
||||
|
||||
in stdenv.mkDerivation (rec {
|
||||
pname = "llvm";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} (''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
cp -r ${monorepoSrc}/third-party "$out"
|
||||
'' + lib.optionalString enablePolly ''
|
||||
chmod u+w "$out/${pname}/tools"
|
||||
cp -r ${monorepoSrc}/polly "$out/${pname}/tools"
|
||||
'');
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
outputs = [ "out" "lib" "dev" "python" ];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python ]
|
||||
++ optionals enableManpages [
|
||||
# Note: we intentionally use `python3Packages` instead of `python3.pkgs`;
|
||||
# splicing does *not* work with the latter. (TODO: fix)
|
||||
python3Packages.sphinx python3Packages.recommonmark
|
||||
];
|
||||
|
||||
buildInputs = [ libxml2 libffi ]
|
||||
++ optional enablePFM libpfm; # exegesis
|
||||
|
||||
propagatedBuildInputs = [ ncurses zlib ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
which
|
||||
] ++ lib.optional stdenv.isDarwin sysctl;
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
|
||||
# Running the tests involves invoking binaries (like `opt`) that depend on
|
||||
# the LLVM dylibs and reference them by absolute install path (i.e. their
|
||||
# nix store path).
|
||||
#
|
||||
# Because we have not yet run the install phase (we're running these tests
|
||||
# as part of `checkPhase` instead of `installCheckPhase`) these absolute
|
||||
# paths do not exist yet; to work around this we point the loader (`ld` on
|
||||
# unix, `dyld` on macOS) at the `lib` directory which will later become this
|
||||
# package's `lib` output.
|
||||
#
|
||||
# Previously we would just set `LD_LIBRARY_PATH` to include the build `lib`
|
||||
# dir but:
|
||||
# - this doesn't generalize well to other platforms; `lit` doesn't forward
|
||||
# `DYLD_LIBRARY_PATH` (macOS):
|
||||
# + https://github.com/llvm/llvm-project/blob/0d89963df354ee309c15f67dc47c8ab3cb5d0fb2/llvm/utils/lit/lit/TestingConfig.py#L26
|
||||
# - even if `lit` forwarded this env var, we actually cannot set
|
||||
# `DYLD_LIBRARY_PATH` in the child processes `lit` launches because
|
||||
# `DYLD_LIBRARY_PATH` (and `DYLD_FALLBACK_LIBRARY_PATH`) is cleared for
|
||||
# "protected processes" (i.e. the python interpreter that runs `lit`):
|
||||
# https://stackoverflow.com/a/35570229
|
||||
# - other LLVM subprojects deal with this issue by having their `lit`
|
||||
# configuration set these env vars for us; it makes sense to do the same
|
||||
# for LLVM:
|
||||
# + https://github.com/llvm/llvm-project/blob/4c106cfdf7cf7eec861ad3983a3dd9a9e8f3a8ae/clang-tools-extra/test/Unit/lit.cfg.py#L22-L31
|
||||
#
|
||||
# !!! TODO: look into upstreaming this patch
|
||||
./llvm-lit-cfg-add-libs-to-dylib-path.patch
|
||||
|
||||
# `lit` has a mode where it executes run lines as a shell script which is
|
||||
# constructs; this is problematic for macOS because it means that there's
|
||||
# another process in between `lit` and the binaries being tested. As noted
|
||||
# above, this means that `DYLD_LIBRARY_PATH` is cleared which means that our
|
||||
# tests fail with dyld errors.
|
||||
#
|
||||
# To get around this we patch `lit` to reintroduce `DYLD_LIBRARY_PATH`, when
|
||||
# present in the test configuration.
|
||||
#
|
||||
# It's not clear to me why this isn't an issue for LLVM developers running
|
||||
# on macOS (nothing about this _seems_ nix specific)..
|
||||
./lit-shell-script-runner-set-dyld-library-path.patch
|
||||
] ++ lib.optionals enablePolly [
|
||||
./gnu-install-dirs-polly.patch
|
||||
|
||||
# Just like the `llvm-lit-cfg` patch, but for `polly`.
|
||||
./polly-lit-cfg-add-libs-to-dylib-path.patch
|
||||
];
|
||||
|
||||
postPatch = optionalString stdenv.isDarwin ''
|
||||
substituteInPlace cmake/modules/AddLLVM.cmake \
|
||||
--replace 'set(_install_name_dir INSTALL_NAME_DIR "@rpath")' "set(_install_name_dir)" \
|
||||
--replace 'set(_install_rpath "@loader_path/../''${CMAKE_INSTALL_LIBDIR}''${LLVM_LIBDIR_SUFFIX}" ''${extra_libdir})' ""
|
||||
|
||||
# As of LLVM 15, marked as XFAIL on arm64 macOS but lit doesn't seem to pick
|
||||
# this up: https://github.com/llvm/llvm-project/blob/c344d97a125b18f8fed0a64aace73c49a870e079/llvm/test/MC/ELF/cfi-version.ll#L7
|
||||
rm test/MC/ELF/cfi-version.ll
|
||||
|
||||
# This test tries to call `sw_vers` by absolute path (`/usr/bin/sw_vers`)
|
||||
# and thus fails under the sandbox:
|
||||
substituteInPlace unittests/Support/Host.cpp \
|
||||
--replace '/usr/bin/sw_vers' "${(builtins.toString darwin.DarwinTools) + "/bin/sw_vers" }"
|
||||
'' + optionalString (stdenv.isDarwin && stdenv.hostPlatform.isx86) ''
|
||||
# This test tries to call the intrinsics `@llvm.roundeven.f32` and
|
||||
# `@llvm.roundeven.f64` which seem to (incorrectly?) lower to `roundevenf`
|
||||
# and `roundeven` on x86_64 macOS.
|
||||
#
|
||||
# However these functions are glibc specific so the test fails:
|
||||
# - https://www.gnu.org/software/gnulib/manual/html_node/roundevenf.html
|
||||
# - https://www.gnu.org/software/gnulib/manual/html_node/roundeven.html
|
||||
#
|
||||
# TODO(@rrbutani): this seems to run fine on `aarch64-darwin`, why does it
|
||||
# pass there?
|
||||
substituteInPlace test/ExecutionEngine/Interpreter/intrinsics.ll \
|
||||
--replace "%roundeven32 = call float @llvm.roundeven.f32(float 0.000000e+00)" "" \
|
||||
--replace "%roundeven64 = call double @llvm.roundeven.f64(double 0.000000e+00)" ""
|
||||
|
||||
# This test fails on darwin x86_64 because `sw_vers` reports a different
|
||||
# macOS version than what LLVM finds by reading
|
||||
# `/System/Library/CoreServices/SystemVersion.plist` (which is passed into
|
||||
# the sandbox on macOS).
|
||||
#
|
||||
# The `sw_vers` provided by nixpkgs reports the macOS version associated
|
||||
# with the `CoreFoundation` framework with which it was built. Because
|
||||
# nixpkgs pins the SDK for `aarch64-darwin` and `x86_64-darwin` what
|
||||
# `sw_vers` reports is not guaranteed to match the macOS version of the host
|
||||
# that's building this derivation.
|
||||
#
|
||||
# Astute readers will note that we only _patch_ this test on aarch64-darwin
|
||||
# (to use the nixpkgs provided `sw_vers`) instead of disabling it outright.
|
||||
# So why does this test pass on aarch64?
|
||||
#
|
||||
# Well, it seems that `sw_vers` on aarch64 actually links against the _host_
|
||||
# CoreFoundation framework instead of the nixpkgs provided one.
|
||||
#
|
||||
# Not entirely sure what the right fix is here. I'm assuming aarch64
|
||||
# `sw_vers` doesn't intentionally link against the host `CoreFoundation`
|
||||
# (still digging into how this ends up happening, will follow up) but that
|
||||
# aside I think the more pertinent question is: should we be patching LLVM's
|
||||
# macOS version detection logic to use `sw_vers` instead of reading host
|
||||
# paths? This *is* a way in which details about builder machines can creep
|
||||
# into the artifacts that are produced, affecting reproducibility, but it's
|
||||
# not clear to me when/where/for what this even gets used in LLVM.
|
||||
#
|
||||
# TODO(@rrbutani): fix/follow-up
|
||||
substituteInPlace unittests/Support/Host.cpp \
|
||||
--replace "getMacOSHostVersion" "DISABLED_getMacOSHostVersion"
|
||||
|
||||
# This test fails with a `dysmutil` crash; have not yet dug into what's
|
||||
# going on here (TODO(@rrbutani)).
|
||||
rm test/tools/dsymutil/ARM/obfuscated.test
|
||||
'' + ''
|
||||
# FileSystem permissions tests fail with various special bits
|
||||
substituteInPlace unittests/Support/CMakeLists.txt \
|
||||
--replace "Path.cpp" ""
|
||||
rm unittests/Support/Path.cpp
|
||||
substituteInPlace unittests/IR/CMakeLists.txt \
|
||||
--replace "PassBuilderCallbacksTest.cpp" ""
|
||||
rm unittests/IR/PassBuilderCallbacksTest.cpp
|
||||
rm test/tools/llvm-objcopy/ELF/mirror-permissions-unix.test
|
||||
'' + optionalString stdenv.hostPlatform.isMusl ''
|
||||
patch -p1 -i ${../../TLI-musl.patch}
|
||||
substituteInPlace unittests/Support/CMakeLists.txt \
|
||||
--replace "add_subdirectory(DynamicLibrary)" ""
|
||||
rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
|
||||
# valgrind unhappy with musl or glibc, but fails w/musl only
|
||||
rm test/CodeGen/AArch64/wineh4.mir
|
||||
'' + optionalString stdenv.hostPlatform.isAarch32 ''
|
||||
# skip failing X86 test cases on 32-bit ARM
|
||||
rm test/DebugInfo/X86/convert-debugloc.ll
|
||||
rm test/DebugInfo/X86/convert-inlined.ll
|
||||
rm test/DebugInfo/X86/convert-linked.ll
|
||||
rm test/tools/dsymutil/X86/op-convert.test
|
||||
rm test/tools/gold/X86/split-dwarf.ll
|
||||
rm test/tools/llvm-dwarfdump/X86/prettyprint_types.s
|
||||
rm test/tools/llvm-dwarfdump/X86/simplified-template-names.s
|
||||
|
||||
# !!! Note: these tests are removed in LLVM 16.
|
||||
#
|
||||
# See here for context: https://github.com/NixOS/nixpkgs/pull/194634#discussion_r999790443
|
||||
rm test/CodeGen/RISCV/rv32zbp.ll
|
||||
rm test/CodeGen/RISCV/rv64zbp.ll
|
||||
'' + optionalString (stdenv.hostPlatform.system == "armv6l-linux") ''
|
||||
# Seems to require certain floating point hardware (NEON?)
|
||||
rm test/ExecutionEngine/frem.ll
|
||||
'' + ''
|
||||
patchShebangs test/BugPoint/compile-custom.ll.py
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
# Workaround for configure flags that need to have spaces
|
||||
cmakeFlagsArray+=(
|
||||
-DLLVM_LIT_ARGS="-svj''${NIX_BUILD_CORES} --no-progress-bar"
|
||||
)
|
||||
'';
|
||||
|
||||
# Defensive check: some paths (that we make symlinks to) depend on the release
|
||||
# version, for example:
|
||||
# - https://github.com/llvm/llvm-project/blob/406bde9a15136254f2b10d9ef3a42033b3cb1b16/clang/lib/Headers/CMakeLists.txt#L185
|
||||
#
|
||||
# So we want to sure that the version in the source matches the release
|
||||
# version we were given.
|
||||
#
|
||||
# We do this check here, in the LLVM build, because it happens early.
|
||||
postConfigure = let
|
||||
v = lib.versions;
|
||||
major = v.major release_version;
|
||||
minor = v.minor release_version;
|
||||
patch = v.patch release_version;
|
||||
in ''
|
||||
# $1: part, $2: expected
|
||||
check_version() {
|
||||
part="''${1^^}"
|
||||
part="$(cat include/llvm/Config/llvm-config.h | grep "#define LLVM_VERSION_''${part} " | cut -d' ' -f3)"
|
||||
|
||||
if [[ "$part" != "$2" ]]; then
|
||||
echo >&2 \
|
||||
"mismatch in the $1 version! we have version ${release_version}" \
|
||||
"and expected the $1 version to be '$2'; the source has '$part' instead"
|
||||
exit 3
|
||||
fi
|
||||
}
|
||||
|
||||
check_version major ${major}
|
||||
check_version minor ${minor}
|
||||
check_version patch ${patch}
|
||||
'';
|
||||
|
||||
# E.g. mesa.drivers use the build-id as a cache key (see #93946):
|
||||
LDFLAGS = optionalString (enableSharedLibraries && !stdenv.isDarwin) "-Wl,--build-id=sha1";
|
||||
|
||||
cmakeFlags = with stdenv; let
|
||||
# These flags influence llvm-config's BuildVariables.inc in addition to the
|
||||
# general build. We need to make sure these are also passed via
|
||||
# CROSS_TOOLCHAIN_FLAGS_NATIVE when cross-compiling or llvm-config-native
|
||||
# will return different results from the cross llvm-config.
|
||||
#
|
||||
# Some flags don't need to be repassed because LLVM already does so (like
|
||||
# CMAKE_BUILD_TYPE), others are irrelevant to the result.
|
||||
flagsForLlvmConfig = [
|
||||
"-DLLVM_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/llvm"
|
||||
"-DLLVM_ENABLE_RTTI=ON"
|
||||
] ++ optionals enableSharedLibraries [
|
||||
"-DLLVM_LINK_LLVM_DYLIB=ON"
|
||||
];
|
||||
in flagsForLlvmConfig ++ [
|
||||
"-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}"
|
||||
"-DLLVM_INSTALL_UTILS=ON" # Needed by rustc
|
||||
"-DLLVM_BUILD_TESTS=${if doCheck then "ON" else "OFF"}"
|
||||
"-DLLVM_ENABLE_FFI=ON"
|
||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_ENABLE_DUMP=ON"
|
||||
] ++ optionals stdenv.hostPlatform.isStatic [
|
||||
# Disables building of shared libs, -fPIC is still injected by cc-wrapper
|
||||
"-DLLVM_ENABLE_PIC=OFF"
|
||||
"-DLLVM_BUILD_STATIC=ON"
|
||||
"-DLLVM_LINK_LLVM_DYLIB=off"
|
||||
# libxml2 needs to be disabled because the LLVM build system ignores its .la
|
||||
# file and doesn't link zlib as well.
|
||||
# https://github.com/ClangBuiltLinux/tc-build/issues/150#issuecomment-845418812
|
||||
"-DLLVM_ENABLE_LIBXML2=OFF"
|
||||
] ++ optionals enableManpages [
|
||||
"-DLLVM_BUILD_DOCS=ON"
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
] ++ optionals (!isDarwin) [
|
||||
"-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include"
|
||||
] ++ optionals isDarwin [
|
||||
"-DLLVM_ENABLE_LIBCXX=ON"
|
||||
"-DCAN_TARGET_i386=false"
|
||||
] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"-DCMAKE_CROSSCOMPILING=True"
|
||||
"-DLLVM_TABLEGEN=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
(
|
||||
let
|
||||
nativeCC = pkgsBuildBuild.targetPackages.stdenv.cc;
|
||||
nativeBintools = nativeCC.bintools.bintools;
|
||||
nativeToolchainFlags = [
|
||||
"-DCMAKE_C_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}cc"
|
||||
"-DCMAKE_CXX_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}c++"
|
||||
"-DCMAKE_AR=${nativeBintools}/bin/${nativeBintools.targetPrefix}ar"
|
||||
"-DCMAKE_STRIP=${nativeBintools}/bin/${nativeBintools.targetPrefix}strip"
|
||||
"-DCMAKE_RANLIB=${nativeBintools}/bin/${nativeBintools.targetPrefix}ranlib"
|
||||
];
|
||||
# We need to repass the custom GNUInstallDirs values, otherwise CMake
|
||||
# will choose them for us, leading to wrong results in llvm-config-native
|
||||
nativeInstallFlags = [
|
||||
"-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
|
||||
"-DCMAKE_INSTALL_BINDIR=${placeholder "out"}/bin"
|
||||
"-DCMAKE_INSTALL_INCLUDEDIR=${placeholder "dev"}/include"
|
||||
"-DCMAKE_INSTALL_LIBDIR=${placeholder "lib"}/lib"
|
||||
"-DCMAKE_INSTALL_LIBEXECDIR=${placeholder "lib"}/libexec"
|
||||
];
|
||||
in "-DCROSS_TOOLCHAIN_FLAGS_NATIVE:list="
|
||||
+ lib.concatStringsSep ";" (lib.concatLists [
|
||||
flagsForLlvmConfig
|
||||
nativeToolchainFlags
|
||||
nativeInstallFlags
|
||||
])
|
||||
)
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $python/share
|
||||
mv $out/share/opt-viewer $python/share/opt-viewer
|
||||
moveToOutput "bin/llvm-config*" "$dev"
|
||||
substituteInPlace "$dev/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/lib" "$lib/lib/lib" \
|
||||
--replace "$out/bin/llvm-config" "$dev/bin/llvm-config"
|
||||
substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \
|
||||
--replace 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' 'set(LLVM_BINARY_DIR "'"$lib"'")'
|
||||
''
|
||||
+ optionalString (stdenv.isDarwin && enableSharedLibraries) ''
|
||||
ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib
|
||||
ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib
|
||||
''
|
||||
+ optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
|
||||
cp NATIVE/bin/llvm-config $dev/bin/llvm-config-native
|
||||
'';
|
||||
|
||||
inherit doCheck;
|
||||
|
||||
checkTarget = "check-all";
|
||||
|
||||
# For the update script:
|
||||
passthru.monorepoSrc = monorepoSrc;
|
||||
|
||||
requiredSystemFeatures = [ "big-parallel" ];
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://llvm.org/";
|
||||
description = "A collection of modular and reusable compiler and toolchain technologies";
|
||||
longDescription = ''
|
||||
The LLVM Project is a collection of modular and reusable compiler and
|
||||
toolchain technologies. Despite its name, LLVM has little to do with
|
||||
traditional virtual machines. The name "LLVM" itself is not an acronym; it
|
||||
is the full name of the project.
|
||||
LLVM began as a research project at the University of Illinois, with the
|
||||
goal of providing a modern, SSA-based compilation strategy capable of
|
||||
supporting both static and dynamic compilation of arbitrary programming
|
||||
languages. Since then, LLVM has grown to be an umbrella project consisting
|
||||
of a number of subprojects, many of which are being used in production by
|
||||
a wide variety of commercial and open source projects as well as being
|
||||
widely used in academic research. Code in the LLVM project is licensed
|
||||
under the "Apache 2.0 License with LLVM exceptions".
|
||||
'';
|
||||
};
|
||||
} // lib.optionalAttrs enableManpages {
|
||||
pname = "llvm-manpages";
|
||||
|
||||
propagatedBuildInputs = [];
|
||||
|
||||
ninjaFlags = [ "docs-llvm-man" ];
|
||||
installTargets = [ "install-docs-llvm-man" ];
|
||||
|
||||
postPatch = null;
|
||||
postInstall = null;
|
||||
|
||||
outputs = [ "out" ];
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = llvm_meta // {
|
||||
description = "man pages for LLVM ${version}";
|
||||
};
|
||||
})
|
||||
@@ -0,0 +1,19 @@
|
||||
This is the one remaining Polly install dirs related change that hasn't made it
|
||||
into upstream yet; previously this patch file also included:
|
||||
https://reviews.llvm.org/D117541
|
||||
|
||||
diff --git a/tools/polly/cmake/polly_macros.cmake b/tools/polly/cmake/polly_macros.cmake
|
||||
index 518a09b45a42..bd9d6f5542ad 100644
|
||||
--- a/tools/polly/cmake/polly_macros.cmake
|
||||
+++ b/tools/polly/cmake/polly_macros.cmake
|
||||
@@ -44,8 +44,8 @@ macro(add_polly_library name)
|
||||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly")
|
||||
install(TARGETS ${name}
|
||||
EXPORT LLVMExports
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}
|
||||
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
|
||||
endif()
|
||||
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
|
||||
endmacro(add_polly_library)
|
||||
138
pkgs/development/compilers/llvm/15/llvm/gnu-install-dirs.patch
Normal file
138
pkgs/development/compilers/llvm/15/llvm/gnu-install-dirs.patch
Normal file
@@ -0,0 +1,138 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 45399dc0537e..5d946e9e6583 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -942,7 +942,7 @@ if (NOT TENSORFLOW_AOT_PATH STREQUAL "")
|
||||
add_subdirectory(${TENSORFLOW_AOT_PATH}/xla_aot_runtime_src
|
||||
${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/tf_runtime)
|
||||
install(TARGETS tf_xla_runtime EXPORT LLVMExports
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT tf_xla_runtime)
|
||||
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} COMPONENT tf_xla_runtime)
|
||||
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS tf_xla_runtime)
|
||||
# Once we add more modules, we should handle this more automatically.
|
||||
if (DEFINED LLVM_OVERRIDE_MODEL_HEADER_INLINERSIZEMODEL)
|
||||
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
|
||||
index 057431208322..56f0dcb258da 100644
|
||||
--- a/cmake/modules/AddLLVM.cmake
|
||||
+++ b/cmake/modules/AddLLVM.cmake
|
||||
@@ -844,8 +844,8 @@ macro(add_llvm_library name)
|
||||
get_target_export_arg(${name} LLVM export_to_llvmexports ${umbrella})
|
||||
install(TARGETS ${name}
|
||||
${export_to_llvmexports}
|
||||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
|
||||
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" COMPONENT ${name}
|
||||
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" COMPONENT ${name}
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${name})
|
||||
|
||||
if (NOT LLVM_ENABLE_IDE)
|
||||
@@ -2007,7 +2007,7 @@ function(llvm_install_library_symlink name dest type)
|
||||
set(full_name ${CMAKE_${type}_LIBRARY_PREFIX}${name}${CMAKE_${type}_LIBRARY_SUFFIX})
|
||||
set(full_dest ${CMAKE_${type}_LIBRARY_PREFIX}${dest}${CMAKE_${type}_LIBRARY_SUFFIX})
|
||||
|
||||
- set(output_dir lib${LLVM_LIBDIR_SUFFIX})
|
||||
+ set(output_dir ${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
|
||||
if(WIN32 AND "${type}" STREQUAL "SHARED")
|
||||
set(output_dir "${CMAKE_INSTALL_BINDIR}")
|
||||
endif()
|
||||
@@ -2271,15 +2271,15 @@ function(llvm_setup_rpath name)
|
||||
|
||||
if (APPLE)
|
||||
set(_install_name_dir INSTALL_NAME_DIR "@rpath")
|
||||
- set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
+ set(_install_rpath "@loader_path/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND BUILD_SHARED_LIBS)
|
||||
# $ORIGIN is not interpreted at link time by aix ld.
|
||||
# Since BUILD_SHARED_LIBS is only recommended for use by developers,
|
||||
# hardcode the rpath to build/install lib dir first in this mode.
|
||||
# FIXME: update this when there is better solution.
|
||||
- set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
+ set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
elseif(UNIX)
|
||||
- set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
+ set(_install_rpath "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
|
||||
set_property(TARGET ${name} APPEND_STRING PROPERTY
|
||||
LINK_FLAGS " -Wl,-z,origin ")
|
||||
diff --git a/cmake/modules/AddOCaml.cmake b/cmake/modules/AddOCaml.cmake
|
||||
index 891c9e6d618c..8d963f3b0069 100644
|
||||
--- a/cmake/modules/AddOCaml.cmake
|
||||
+++ b/cmake/modules/AddOCaml.cmake
|
||||
@@ -147,9 +147,9 @@ function(add_ocaml_library name)
|
||||
endforeach()
|
||||
|
||||
if( APPLE )
|
||||
- set(ocaml_rpath "@executable_path/../../../lib${LLVM_LIBDIR_SUFFIX}")
|
||||
+ set(ocaml_rpath "@executable_path/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
|
||||
elseif( UNIX )
|
||||
- set(ocaml_rpath "\\$ORIGIN/../../../lib${LLVM_LIBDIR_SUFFIX}")
|
||||
+ set(ocaml_rpath "\\$ORIGIN/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
|
||||
endif()
|
||||
list(APPEND ocaml_flags "-ldopt" "-Wl,-rpath,${ocaml_rpath}")
|
||||
|
||||
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
|
||||
index d4b0ab959148..26ed981fd09f 100644
|
||||
--- a/cmake/modules/CMakeLists.txt
|
||||
+++ b/cmake/modules/CMakeLists.txt
|
||||
@@ -128,7 +128,7 @@ set(LLVM_CONFIG_INCLUDE_DIRS
|
||||
)
|
||||
list(REMOVE_DUPLICATES LLVM_CONFIG_INCLUDE_DIRS)
|
||||
|
||||
-extend_path(LLVM_CONFIG_LIBRARY_DIR "\${LLVM_INSTALL_PREFIX}" "lib\${LLVM_LIBDIR_SUFFIX}")
|
||||
+extend_path(LLVM_CONFIG_LIBRARY_DIR "\${LLVM_INSTALL_PREFIX}" "${CMAKE_INSTALL_LIBDIR}\${LLVM_LIBDIR_SUFFIX}")
|
||||
set(LLVM_CONFIG_LIBRARY_DIRS
|
||||
"${LLVM_CONFIG_LIBRARY_DIR}"
|
||||
# FIXME: Should there be other entries here?
|
||||
diff --git a/docs/CMake.rst b/docs/CMake.rst
|
||||
index 879b7b231d4c..9c31d14e8950 100644
|
||||
--- a/docs/CMake.rst
|
||||
+++ b/docs/CMake.rst
|
||||
@@ -250,7 +250,7 @@ description is in `LLVM-related variables`_ below.
|
||||
**LLVM_LIBDIR_SUFFIX**:STRING
|
||||
Extra suffix to append to the directory where libraries are to be
|
||||
installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
|
||||
- to install libraries to ``/usr/lib64``.
|
||||
+ to install libraries to ``/usr/lib64``. See also ``CMAKE_INSTALL_LIBDIR``.
|
||||
|
||||
**LLVM_PARALLEL_{COMPILE,LINK}_JOBS**:STRING
|
||||
Building the llvm toolchain can use a lot of resources, particularly
|
||||
@@ -284,6 +284,10 @@ manual, or execute ``cmake --help-variable VARIABLE_NAME``.
|
||||
The path to install executables, relative to the *CMAKE_INSTALL_PREFIX*.
|
||||
Defaults to "bin".
|
||||
|
||||
+**CMAKE_INSTALL_LIBDIR**:PATH
|
||||
+ The path to install libraries, relative to the *CMAKE_INSTALL_PREFIX*.
|
||||
+ Defaults to "lib".
|
||||
+
|
||||
**CMAKE_INSTALL_INCLUDEDIR**:PATH
|
||||
The path to install header files, relative to the *CMAKE_INSTALL_PREFIX*.
|
||||
Defaults to "include".
|
||||
diff --git a/tools/llvm-config/BuildVariables.inc.in b/tools/llvm-config/BuildVariables.inc.in
|
||||
index 370005cd8d7d..7e790bc52111 100644
|
||||
--- a/tools/llvm-config/BuildVariables.inc.in
|
||||
+++ b/tools/llvm-config/BuildVariables.inc.in
|
||||
@@ -23,6 +23,7 @@
|
||||
#define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@"
|
||||
#define LLVM_BUILDMODE "@LLVM_BUILDMODE@"
|
||||
#define LLVM_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@"
|
||||
+#define LLVM_INSTALL_LIBDIR "@CMAKE_INSTALL_LIBDIR@"
|
||||
#define LLVM_INSTALL_INCLUDEDIR "@CMAKE_INSTALL_INCLUDEDIR@"
|
||||
#define LLVM_INSTALL_PACKAGE_DIR "@LLVM_INSTALL_PACKAGE_DIR@"
|
||||
#define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@"
|
||||
diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
|
||||
index 2c6c55f89d38..f6d2068a0827 100644
|
||||
--- a/tools/llvm-config/llvm-config.cpp
|
||||
+++ b/tools/llvm-config/llvm-config.cpp
|
||||
@@ -369,7 +369,11 @@ int main(int argc, char **argv) {
|
||||
sys::fs::make_absolute(ActivePrefix, Path);
|
||||
ActiveBinDir = std::string(Path.str());
|
||||
}
|
||||
- ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
|
||||
+ {
|
||||
+ SmallString<256> Path(LLVM_INSTALL_LIBDIR LLVM_LIBDIR_SUFFIX);
|
||||
+ sys::fs::make_absolute(ActivePrefix, Path);
|
||||
+ ActiveLibDir = std::string(Path.str());
|
||||
+ }
|
||||
{
|
||||
SmallString<256> Path(LLVM_INSTALL_PACKAGE_DIR);
|
||||
sys::fs::make_absolute(ActivePrefix, Path);
|
||||
@@ -0,0 +1,26 @@
|
||||
diff --git a/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py
|
||||
index 0242e0b75af3..d732011306f7 100644
|
||||
--- a/utils/lit/lit/TestRunner.py
|
||||
+++ b/utils/lit/lit/TestRunner.py
|
||||
@@ -1029,6 +1029,12 @@ def executeScript(test, litConfig, tmpBase, commands, cwd):
|
||||
f.write('@echo off\n')
|
||||
f.write('\n@if %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands))
|
||||
else:
|
||||
+ # This env var is *purged* when invoking subprocesses so we have to
|
||||
+ # manually set it from within the bash script in order for the commands
|
||||
+ # in run lines to see this var:
|
||||
+ if "DYLD_LIBRARY_PATH" in test.config.environment:
|
||||
+ f.write(f'export DYLD_LIBRARY_PATH="{test.config.environment["DYLD_LIBRARY_PATH"]}"\n')
|
||||
+
|
||||
for i, ln in enumerate(commands):
|
||||
match = re.match(kPdbgRegex, ln)
|
||||
if match:
|
||||
@@ -1363,7 +1369,7 @@ def applySubstitutions(script, substitutions, conditions={},
|
||||
return processed
|
||||
|
||||
process = processLine if recursion_limit is None else processLineToFixedPoint
|
||||
-
|
||||
+
|
||||
return [unescapePercents(process(ln)) for ln in script]
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
diff --git a/test/Unit/lit.cfg.py b/test/Unit/lit.cfg.py
|
||||
index 81e8dc04acea..479ff95681e2 100644
|
||||
--- a/test/Unit/lit.cfg.py
|
||||
+++ b/test/Unit/lit.cfg.py
|
||||
@@ -3,6 +3,7 @@
|
||||
# Configuration file for the 'lit' test runner.
|
||||
|
||||
import os
|
||||
+import platform
|
||||
import subprocess
|
||||
|
||||
import lit.formats
|
||||
@@ -55,3 +56,26 @@ if sys.platform in ['win32', 'cygwin'] and os.path.isdir(config.shlibdir):
|
||||
# Win32 may use %SYSTEMDRIVE% during file system shell operations, so propogate.
|
||||
if sys.platform == 'win32' and 'SYSTEMDRIVE' in os.environ:
|
||||
config.environment['SYSTEMDRIVE'] = os.environ['SYSTEMDRIVE']
|
||||
+
|
||||
+# Add the LLVM dynamic libs to the platform-specific loader search path env var:
|
||||
+#
|
||||
+# TODO: this is copied from `clang`'s `lit.cfg.py`; should unify..
|
||||
+def find_shlibpath_var():
|
||||
+ if platform.system() in ['Linux', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS']:
|
||||
+ yield 'LD_LIBRARY_PATH'
|
||||
+ elif platform.system() == 'Darwin':
|
||||
+ yield 'DYLD_LIBRARY_PATH'
|
||||
+ elif platform.system() == 'Windows':
|
||||
+ yield 'PATH'
|
||||
+ elif platform.system() == 'AIX':
|
||||
+ yield 'LIBPATH'
|
||||
+
|
||||
+for shlibpath_var in find_shlibpath_var():
|
||||
+ shlibpath = os.path.pathsep.join(
|
||||
+ (config.shlibdir,
|
||||
+ config.environment.get(shlibpath_var, '')))
|
||||
+ config.environment[shlibpath_var] = shlibpath
|
||||
+ break
|
||||
+else:
|
||||
+ lit_config.warning("unable to inject shared library path on '{}'"
|
||||
+ .format(platform.system()))
|
||||
diff --git a/test/lit.cfg.py b/test/lit.cfg.py
|
||||
index 75a38b4c5dad..856fc75c9d74 100644
|
||||
--- a/test/lit.cfg.py
|
||||
+++ b/test/lit.cfg.py
|
||||
@@ -42,6 +42,26 @@ llvm_config.with_environment('PATH', config.llvm_tools_dir, append_path=True)
|
||||
llvm_config.with_system_environment(
|
||||
['HOME', 'INCLUDE', 'LIB', 'TMP', 'TEMP'])
|
||||
|
||||
+# Add the LLVM dynamic libs to the platform-specific loader search path env var:
|
||||
+#
|
||||
+# TODO: this is copied from `clang`'s `lit.cfg.py`; should unify..
|
||||
+def find_shlibpath_var():
|
||||
+ if platform.system() in ['Linux', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS']:
|
||||
+ yield 'LD_LIBRARY_PATH'
|
||||
+ elif platform.system() == 'Darwin':
|
||||
+ yield 'DYLD_LIBRARY_PATH'
|
||||
+ elif platform.system() == 'Windows':
|
||||
+ yield 'PATH'
|
||||
+ elif platform.system() == 'AIX':
|
||||
+ yield 'LIBPATH'
|
||||
+
|
||||
+for shlibpath_var in find_shlibpath_var():
|
||||
+ shlibpath = config.llvm_shlib_dir
|
||||
+ llvm_config.with_environment(shlibpath_var, shlibpath, append_path = True)
|
||||
+ break
|
||||
+else:
|
||||
+ lit_config.warning("unable to inject shared library path on '{}'"
|
||||
+ .format(platform.system()))
|
||||
|
||||
# Set up OCAMLPATH to include newly built OCaml libraries.
|
||||
top_ocaml_lib = os.path.join(config.llvm_lib_dir, 'ocaml')
|
||||
@@ -318,7 +338,7 @@ def have_cxx_shared_library():
|
||||
|
||||
try:
|
||||
readobj_cmd = subprocess.Popen(
|
||||
- [readobj_exe, '--needed-libs', readobj_exe], stdout=subprocess.PIPE)
|
||||
+ [readobj_exe, '--needed-libs', readobj_exe], stdout=subprocess.PIPE, env=config.environment)
|
||||
except OSError:
|
||||
print('could not exec llvm-readobj')
|
||||
return False
|
||||
@@ -0,0 +1,24 @@
|
||||
diff --git a/tools/polly/test/lit.cfg b/tools/polly/test/lit.cfg
|
||||
index 41e3a589c61e..09f3b17498b0 100644
|
||||
--- a/tools/polly/test/lit.cfg
|
||||
+++ b/tools/polly/test/lit.cfg
|
||||
@@ -36,9 +36,17 @@ base_paths = [config.llvm_tools_dir, config.environment['PATH']]
|
||||
path = os.path.pathsep.join(base_paths + config.extra_paths)
|
||||
config.environment['PATH'] = path
|
||||
|
||||
+# (Copied from polly/test/Unit/lit.cfg)
|
||||
+if platform.system() == 'Darwin':
|
||||
+ shlibpath_var = 'DYLD_LIBRARY_PATH'
|
||||
+elif platform.system() == 'Windows':
|
||||
+ shlibpath_var = 'PATH'
|
||||
+else:
|
||||
+ shlibpath_var = 'LD_LIBRARY_PATH'
|
||||
+
|
||||
path = os.path.pathsep.join((config.llvm_libs_dir,
|
||||
- config.environment.get('LD_LIBRARY_PATH','')))
|
||||
-config.environment['LD_LIBRARY_PATH'] = path
|
||||
+ config.environment.get(shlibpath_var,'')))
|
||||
+config.environment[shlibpath_var] = path
|
||||
|
||||
llvm_config.use_default_substitutions()
|
||||
|
||||
71
pkgs/development/compilers/llvm/15/openmp/default.nix
Normal file
71
pkgs/development/compilers/llvm/15/openmp/default.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, monorepoSrc
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, llvm
|
||||
, targetLlvm
|
||||
, lit
|
||||
, clang-unwrapped
|
||||
, perl
|
||||
, pkg-config
|
||||
, xcbuild
|
||||
, version
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "openmp";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
'';
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
patches = [
|
||||
./fix-find-tool.patch
|
||||
./gnu-install-dirs.patch
|
||||
./run-lit-directly.patch
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja perl pkg-config lit ];
|
||||
buildInputs = [
|
||||
(if stdenv.buildPlatform == stdenv.hostPlatform then llvm else targetLlvm)
|
||||
];
|
||||
|
||||
nativeCheckInputs = lib.optional stdenv.hostPlatform.isDarwin xcbuild.xcrun;
|
||||
|
||||
# Unsup:Pass:XFail:Fail
|
||||
# 26:267:16:8
|
||||
doCheck = false;
|
||||
checkTarget = "check-openmp";
|
||||
|
||||
preCheck = ''
|
||||
patchShebangs ../tools/archer/tests/deflake.bash
|
||||
'';
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCLANG_TOOL=${clang-unwrapped}/bin/clang"
|
||||
"-DOPT_TOOL=${llvm}/bin/opt"
|
||||
"-DLINK_TOOL=${llvm}/bin/llvm-link"
|
||||
];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://openmp.llvm.org/";
|
||||
description = "Support for the OpenMP language";
|
||||
longDescription = ''
|
||||
The OpenMP subproject of LLVM contains the components required to build an
|
||||
executable OpenMP program that are outside the compiler itself.
|
||||
Contains the code for the runtime library against which code compiled by
|
||||
"clang -fopenmp" must be linked before it can run and the library that
|
||||
supports offload to target devices.
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
diff --git a/libomptarget/DeviceRTL/CMakeLists.txt b/libomptarget/DeviceRTL/CMakeLists.txt
|
||||
index ce66214822a2..6ab7b33c95da 100644
|
||||
--- a/libomptarget/DeviceRTL/CMakeLists.txt
|
||||
+++ b/libomptarget/DeviceRTL/CMakeLists.txt
|
||||
@@ -27,10 +27,10 @@ endif()
|
||||
if (LLVM_DIR)
|
||||
# Builds that use pre-installed LLVM have LLVM_DIR set.
|
||||
# A standalone or LLVM_ENABLE_RUNTIMES=openmp build takes this route
|
||||
- find_program(CLANG_TOOL clang PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH)
|
||||
+ find_program(CLANG_TOOL clang PATHS ${LLVM_TOOLS_BINARY_DIR})
|
||||
find_program(LINK_TOOL llvm-link PATHS ${LLVM_TOOLS_BINARY_DIR}
|
||||
- NO_DEFAULT_PATH)
|
||||
- find_program(OPT_TOOL opt PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH)
|
||||
+ )
|
||||
+ find_program(OPT_TOOL opt PATHS ${LLVM_TOOLS_BINARY_DIR})
|
||||
if ((NOT CLANG_TOOL) OR (NOT LINK_TOOL) OR (NOT OPT_TOOL))
|
||||
libomptarget_say("Not building DeviceRTL. Missing clang: ${CLANG_TOOL}, llvm-link: ${LINK_TOOL} or opt: ${OPT_TOOL}")
|
||||
return()
|
||||
@@ -0,0 +1,22 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index b6ddbe90516d..311ab1d50e7f 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -29,7 +29,7 @@ if (OPENMP_STANDALONE_BUILD)
|
||||
set(OPENMP_LIBDIR_SUFFIX "" CACHE STRING
|
||||
"Suffix of lib installation directory, e.g. 64 => lib64")
|
||||
# Do not use OPENMP_LIBDIR_SUFFIX directly, use OPENMP_INSTALL_LIBDIR.
|
||||
- set(OPENMP_INSTALL_LIBDIR "lib${OPENMP_LIBDIR_SUFFIX}")
|
||||
+ set(OPENMP_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}${OPENMP_LIBDIR_SUFFIX}")
|
||||
|
||||
# Group test settings.
|
||||
set(OPENMP_TEST_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING
|
||||
@@ -40,7 +40,7 @@ if (OPENMP_STANDALONE_BUILD)
|
||||
else()
|
||||
set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR})
|
||||
# If building in tree, we honor the same install suffix LLVM uses.
|
||||
- set(OPENMP_INSTALL_LIBDIR "lib${LLVM_LIBDIR_SUFFIX}")
|
||||
+ set(OPENMP_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
|
||||
|
||||
if (NOT MSVC)
|
||||
set(OPENMP_TEST_C_COMPILER ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang)
|
||||
@@ -0,0 +1,12 @@
|
||||
diff --git a/cmake/OpenMPTesting.cmake b/cmake/OpenMPTesting.cmake
|
||||
--- a/cmake/OpenMPTesting.cmake
|
||||
+++ b/cmake/OpenMPTesting.cmake
|
||||
@@ -185,7 +185,7 @@ function(add_openmp_testsuite target comment)
|
||||
if (${OPENMP_STANDALONE_BUILD})
|
||||
set(LIT_ARGS ${OPENMP_LIT_ARGS} ${ARG_ARGS})
|
||||
add_custom_target(${target}
|
||||
- COMMAND ${PYTHON_EXECUTABLE} ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS}
|
||||
+ COMMAND ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS}
|
||||
COMMENT ${comment}
|
||||
DEPENDS ${ARG_DEPENDS}
|
||||
USES_TERMINAL
|
||||
@@ -7,13 +7,13 @@ in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libclc";
|
||||
version = "14.0.6";
|
||||
version = "15.0.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "llvm";
|
||||
repo = "llvm-project";
|
||||
rev = "llvmorg-${version}";
|
||||
sha256 = "sha256-vffu4HilvYwtzwgq+NlS26m65DGbp6OSSne2aje1yJE=";
|
||||
sha256 = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s=";
|
||||
};
|
||||
sourceRoot = "source/libclc";
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
, cmake
|
||||
, rustc
|
||||
, rust-bindgen
|
||||
, spirv-llvm-translator_14
|
||||
, spirv-llvm-translator
|
||||
}:
|
||||
|
||||
/** Packaging design:
|
||||
@@ -44,11 +44,17 @@ let
|
||||
|
||||
withLibdrm = lib.meta.availableOn stdenv.hostPlatform libdrm;
|
||||
|
||||
# Align all the Mesa versions used. Required to prevent explosions when
|
||||
# two different LLVMs are loaded in the same process.
|
||||
# FIXME: these should really go into some sort of versioned LLVM package set
|
||||
rust-bindgen' = rust-bindgen.override {
|
||||
rust-bindgen-unwrapped = rust-bindgen.unwrapped.override {
|
||||
clang = llvmPackages.clang;
|
||||
};
|
||||
};
|
||||
spirv-llvm-translator' = spirv-llvm-translator.override {
|
||||
inherit (llvmPackages) llvm;
|
||||
};
|
||||
|
||||
self = stdenv.mkDerivation {
|
||||
pname = "mesa";
|
||||
@@ -146,7 +152,7 @@ self = stdenv.mkDerivation {
|
||||
] ++ lib.optionals (lib.elem "wayland" eglPlatforms) [ wayland wayland-protocols ]
|
||||
++ lib.optionals stdenv.isLinux [ libomxil-bellagio libva-minimal ]
|
||||
++ lib.optionals stdenv.isDarwin [ libunwind ]
|
||||
++ lib.optionals enableOpenCL [ libclc llvmPackages.clang llvmPackages.clang-unwrapped rustc rust-bindgen' spirv-llvm-translator_14 ]
|
||||
++ lib.optionals enableOpenCL [ libclc llvmPackages.clang llvmPackages.clang-unwrapped rustc rust-bindgen' spirv-llvm-translator' ]
|
||||
++ lib.optional withValgrind valgrind-light
|
||||
# Mesa will not build zink when gallium-drivers=auto
|
||||
++ lib.optional (lib.elem "zink" galliumDrivers) vulkan-loader;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/meson.build b/meson.build
|
||||
index e32338b3f9a..fae804fd41e 100644
|
||||
index 172c64a7c70..05961e56926 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -1894,7 +1894,7 @@ endif
|
||||
@@ -1900,7 +1900,7 @@ endif
|
||||
|
||||
dep_clang = null_dep
|
||||
if with_clc
|
||||
@@ -29,51 +29,20 @@ index 6f307018815..ab84eb1006c 100644
|
||||
'platforms',
|
||||
type : 'array',
|
||||
diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build
|
||||
index 7af210b5693..ff6ac8c61ca 100644
|
||||
index db3586bd7fb..4d914206d21 100644
|
||||
--- a/src/gallium/targets/opencl/meson.build
|
||||
+++ b/src/gallium/targets/opencl/meson.build
|
||||
@@ -30,6 +30,7 @@ if with_ld_version_script
|
||||
@@ -39,7 +39,8 @@ if dep_llvm.version().version_compare('>=10.0.0')
|
||||
polly_isl_dep = cpp.find_library('PollyISL', dirs : llvm_libdir, required : false)
|
||||
endif
|
||||
|
||||
llvm_libdir = dep_llvm.get_variable(cmake : 'LLVM_LIBRARY_DIR', configtool: 'libdir')
|
||||
-dep_clang = cpp.find_library('clang-cpp', dirs : llvm_libdir, required : false)
|
||||
+clang_libdir = get_option('clang-libdir')
|
||||
opencl_libname = with_opencl_icd ? 'MesaOpenCL' : 'OpenCL'
|
||||
+dep_clang = cpp.find_library('clang-cpp', dirs : clang_libdir, required : false)
|
||||
|
||||
polly_dep = null_dep
|
||||
@@ -60,19 +61,19 @@ else
|
||||
endif
|
||||
if not _shared_llvm or not (dep_clang.found() and dep_clang_usable)
|
||||
dep_clang = [
|
||||
- cpp.find_library('clangCodeGen', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangFrontendTool', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangFrontend', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangDriver', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangSerialization', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangParse', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangSema', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangAnalysis', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangAST', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangASTMatchers', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangEdit', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangLex', dirs : llvm_libdir),
|
||||
- cpp.find_library('clangBasic', dirs : llvm_libdir),
|
||||
+ cpp.find_library('clangCodeGen', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangFrontendTool', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangFrontend', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangDriver', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangSerialization', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangParse', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangSema', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangAnalysis', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangAST', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangASTMatchers', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangEdit', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangLex', dirs : clang_libdir),
|
||||
+ cpp.find_library('clangBasic', dirs : clang_libdir),
|
||||
polly_dep, polly_isl_dep,
|
||||
]
|
||||
# check clang once more
|
||||
@@ -119,7 +120,7 @@ if with_opencl_icd
|
||||
# meson will return clang-cpp from system dirs if it's not found in llvm_libdir
|
||||
linker_rpath_arg = '-Wl,--rpath=@0@'.format(llvm_libdir)
|
||||
@@ -123,7 +124,7 @@ if with_opencl_icd
|
||||
configuration : _config,
|
||||
input : 'mesa.icd.in',
|
||||
output : 'mesa.icd',
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "peaqevcore";
|
||||
version = "11.0.0";
|
||||
version = "11.0.4";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-XWJlhbpOyEuAmnjOCYDe0LEtWckwi38rZv6KBydFgfM=";
|
||||
hash = "sha256-SU8vsKwZio/5UD2SMhLenfkBjXRuMZCPo2k6+1hx8Y4=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cocogitto";
|
||||
version = "5.3.0";
|
||||
version = "5.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "oknozor";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-BqyV4hJw7H9yN5Kj/XwhYS6hElXdKUJEUi5M/PNlPO0=";
|
||||
sha256 = "sha256-Z0snC5NomUWzxI2qcRMxdZbC1aOQ8P2Ll9EdVfhP7ZU=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-MA3XW2tPn0qVx7ve+UqCoG4nQ7UyuvXEebrPuLKqS4g=";
|
||||
cargoHash = "sha256-P/xwE3oLVsIoxPmG+S0htSHhZxCj79z2ARGe2WzWCEo=";
|
||||
|
||||
# Test depend on git configuration that would likly exist in a normal user enviroment
|
||||
# and might be failing to create the test repository it works in.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
, runCommand, pkg-config, meson, ninja, makeWrapper
|
||||
# build+runtime deps.
|
||||
, knot-dns, luajitPackages, libuv, gnutls, lmdb
|
||||
, systemd, libcap_ng, dns-root-data, nghttp2 # optionals, in principle
|
||||
, jemalloc, systemd, libcap_ng, dns-root-data, nghttp2 # optionals, in principle
|
||||
# test-only deps.
|
||||
, cmocka, which, cacert
|
||||
, extraFeatures ? false /* catch-all if defaults aren't enough */
|
||||
@@ -17,11 +17,11 @@ lua = luajitPackages;
|
||||
|
||||
unwrapped = stdenv.mkDerivation rec {
|
||||
pname = "knot-resolver";
|
||||
version = "5.5.3";
|
||||
version = "5.6.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://secure.nic.cz/files/knot-resolver/${pname}-${version}.tar.xz";
|
||||
sha256 = "a38f57c68b7d237d662784d8406e6098aad66a148f44dcf498d1e9664c5fed2d";
|
||||
sha256 = "0c82ae937b685dc477fb3176098e3dc106c898b7cd83553e5bc54dccb83c80d7";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
@@ -63,7 +63,7 @@ unwrapped = stdenv.mkDerivation rec {
|
||||
# http://knot-resolver.readthedocs.io/en/latest/build.html#requirements
|
||||
buildInputs = [ knot-dns lua.lua libuv gnutls lmdb ]
|
||||
++ optionals stdenv.isLinux [ /*lib*/systemd libcap_ng ]
|
||||
++ [ nghttp2 ]
|
||||
++ [ jemalloc nghttp2 ]
|
||||
## optional dependencies; TODO: dnstap
|
||||
;
|
||||
|
||||
@@ -71,6 +71,7 @@ unwrapped = stdenv.mkDerivation rec {
|
||||
"-Dkeyfile_default=${dns-root-data}/root.ds"
|
||||
"-Droot_hints=${dns-root-data}/root.hints"
|
||||
"-Dinstall_kresd_conf=disabled" # not really useful; examples are inside share/doc/
|
||||
"-Dmalloc=jemalloc"
|
||||
"--default-library=static" # not used by anyone
|
||||
]
|
||||
++ optional doInstallCheck "-Dunit_tests=enabled"
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "syft";
|
||||
version = "0.66.2";
|
||||
version = "0.68.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "anchore";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-CIFK4XIYpRK9CJOwQUV6kRGU++iWJCdMBR7v6xh0iaY=";
|
||||
sha256 = "sha256-iOJnSeVRAjmJblaipmk05J9BvAkYgyS1OA8b3xDykXc=";
|
||||
# populate values that require us to use git. By doing this in postFetch we
|
||||
# can delete .git afterwards and maintain better reproducibility of the src.
|
||||
leaveDotGit = true;
|
||||
@@ -22,7 +22,7 @@ buildGoModule rec {
|
||||
};
|
||||
# hash mismatch with darwin
|
||||
proxyVendor = true;
|
||||
vendorHash = "sha256-ttvfzlSFgh0xQ0W/ftLeSrJNOzg7Iq1qdLgflGy7N8Q=";
|
||||
vendorHash = "sha256-5erZB2CoXVfIK0jYEe0HmdZaeLKLAqOiKi8QAQQFVKU=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -17,14 +17,10 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
cargoSha256 = "1h66d1brx441bg7vzbqdish4avgmc6h7rrkw2qf1siwmplwqqhw0";
|
||||
|
||||
patches = [
|
||||
# Support for 2022, https://github.com/raftario/licensor/pull/68
|
||||
(fetchpatch {
|
||||
name = "support-for-2022.patch";
|
||||
url = "https://github.com/raftario/licensor/commit/6b2f248e5ad9e454fe30d71397691e47ac69b19e.patch";
|
||||
sha256 = "sha256-kXiY5s2kuU+ibV3RpBoy7y3cmJU+gECBTsmRXWBOTP8=";
|
||||
})
|
||||
];
|
||||
# https://github.com/raftario/licensor/issues/67
|
||||
postPatch = ''
|
||||
sed "/Copyright (c) 2021/s/2021/$(date +%Y)/" -i tests/integration.rs
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Write licenses to stdout";
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "s3rs";
|
||||
version = "0.4.16";
|
||||
version = "0.4.19";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "yanganto";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-n95ejw6EZ4zXzP16xFoUkVn1zIMcVgINy7m5NOz063A=";
|
||||
sha256 = "sha256-mJ1bMfv/HY74TknpRvu8RIs1d2VlNreEVtHCtQSHQw8=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-eecQi03w7lq3VAsv9o+3kulwhAXPoxuDPMu/ZCQEom4=";
|
||||
cargoHash = "sha256-Q1EqEyNxWIx3wD8zuU7/MO3Qz6zsfBZbtT/IIUmJccE=";
|
||||
|
||||
nativeBuildInputs = [ python3 perl pkg-config ];
|
||||
buildInputs = [ openssl ]
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "automatic-timezoned";
|
||||
version = "1.0.57";
|
||||
version = "1.0.60";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "maxbrunet";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Wb7X4eDG9vZLJF5b9JPb0JVjQgstFo7Zr1MnidKcuZI=";
|
||||
sha256 = "sha256-6p9hLbU5ZaA4o6PRyfSt/gb3D3XeeWacJ2LlpJ0+w18=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-BcIGaAGTwm8QBvrL7J91asNEpnFdsgDtRPDSWdE9JHI=";
|
||||
cargoHash = "sha256-COWvEfFQMi3ltQSEFK3S6y07YLqqtjAf2H4p0TX/U70=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Automatically update system timezone based on location";
|
||||
|
||||
@@ -14015,6 +14015,7 @@ with pkgs;
|
||||
clang_12 = llvmPackages_12.clang;
|
||||
clang_13 = llvmPackages_13.clang;
|
||||
clang_14 = llvmPackages_14.clang;
|
||||
clang_15 = llvmPackages_15.clang;
|
||||
|
||||
clang-tools = callPackage ../development/tools/clang-tools {
|
||||
llvmPackages = llvmPackages_latest;
|
||||
@@ -14060,6 +14061,10 @@ with pkgs;
|
||||
llvmPackages = llvmPackages_14;
|
||||
};
|
||||
|
||||
clang-tools_15 = callPackage ../development/tools/clang-tools {
|
||||
llvmPackages = llvmPackages_15;
|
||||
};
|
||||
|
||||
clang-analyzer = callPackage ../development/tools/analysis/clang-analyzer {
|
||||
llvmPackages = llvmPackages_latest;
|
||||
inherit (llvmPackages_latest) clang;
|
||||
@@ -15042,6 +15047,7 @@ with pkgs;
|
||||
lld_12 = llvmPackages_12.lld;
|
||||
lld_13 = llvmPackages_13.lld;
|
||||
lld_14 = llvmPackages_14.lld;
|
||||
lld_15 = llvmPackages_15.lld;
|
||||
|
||||
lldb = llvmPackages_latest.lldb;
|
||||
lldb_5 = llvmPackages_5.lldb;
|
||||
@@ -15054,6 +15060,7 @@ with pkgs;
|
||||
lldb_12 = llvmPackages_12.lldb;
|
||||
lldb_13 = llvmPackages_13.lldb;
|
||||
lldb_14 = llvmPackages_14.lldb;
|
||||
lldb_15 = llvmPackages_15.lldb;
|
||||
|
||||
llvm = llvmPackages.llvm;
|
||||
llvm_5 = llvmPackages_5.llvm;
|
||||
@@ -15066,6 +15073,7 @@ with pkgs;
|
||||
llvm_12 = llvmPackages_12.llvm;
|
||||
llvm_13 = llvmPackages_13.llvm;
|
||||
llvm_14 = llvmPackages_14.llvm;
|
||||
llvm_15 = llvmPackages_15.llvm;
|
||||
|
||||
libllvm = llvmPackages.libllvm;
|
||||
llvm-manpages = llvmPackages.llvm-manpages;
|
||||
@@ -15160,6 +15168,13 @@ with pkgs;
|
||||
targetLlvm = targetPackages.llvmPackages_14.llvm or llvmPackages_14.llvm;
|
||||
}));
|
||||
|
||||
llvmPackages_15 = recurseIntoAttrs (callPackage ../development/compilers/llvm/15 ({
|
||||
inherit (stdenvAdapters) overrideCC;
|
||||
buildLlvmTools = buildPackages.llvmPackages_15.tools;
|
||||
targetLlvmLibraries = targetPackages.llvmPackages_15.libraries or llvmPackages_15.libraries;
|
||||
targetLlvm = targetPackages.llvmPackages_15.llvm or llvmPackages_15.llvm;
|
||||
}));
|
||||
|
||||
llvmPackages_latest = llvmPackages_14;
|
||||
|
||||
llvmPackages_rocm = recurseIntoAttrs (callPackage ../development/compilers/llvm/rocm { });
|
||||
@@ -15893,8 +15908,6 @@ with pkgs;
|
||||
|
||||
spirv-llvm-translator = callPackage ../development/compilers/spirv-llvm-translator { };
|
||||
|
||||
spirv-llvm-translator_14 = callPackage ../development/compilers/spirv-llvm-translator { llvm = llvm_14; };
|
||||
|
||||
sqldeveloper = callPackage ../development/tools/database/sqldeveloper {
|
||||
jdk = oraclejdk;
|
||||
};
|
||||
@@ -22015,7 +22028,7 @@ with pkgs;
|
||||
libGLU = mesa_glu;
|
||||
|
||||
mesa = callPackage ../development/libraries/mesa {
|
||||
llvmPackages = llvmPackages_latest;
|
||||
llvmPackages = llvmPackages_15;
|
||||
stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv;
|
||||
inherit (darwin.apple_sdk_11_0.frameworks) OpenGL;
|
||||
inherit (darwin.apple_sdk_11_0.libs) Xplugin;
|
||||
|
||||
Reference in New Issue
Block a user