Skip to content

Commit db29857

Browse files
committed
Re-Revert "clang_7,clang_8,clang_9: fix compilation of HIP-code"
This reverts commit f14a4d6, and thus applying 558af6f.
1 parent e8907ea commit db29857

9 files changed

Lines changed: 246 additions & 7 deletions

File tree

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
From 8412cba68835f8f4cc527d02194b181faa5944d4 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Holger=20W=C3=BCnsche?= <holger.o.wuensche@t-online.de>
3+
Date: Tue, 21 Jan 2020 19:46:09 +0100
4+
Subject: [PATCH] [HIP] use GetProgramPath for executable discovery
5+
6+
This change replaces the manual building of executable paths
7+
using llvm::sys::path::append with GetProgramPath.
8+
This enables adding other paths in case executables reside
9+
in different directories and makes the code easier to read.
10+
11+
Differential Revision: https://reviews.llvm.org/D72903
12+
---
13+
clang/lib/Driver/ToolChains/HIP.cpp | 18 ++++++------------
14+
1 file changed, 6 insertions(+), 12 deletions(-)
15+
16+
diff --git a/lib/Driver/ToolChains/HIP.cpp b/lib/Driver/ToolChains/HIP.cpp
17+
index 03acf45a9b3..75fd3226c75 100644
18+
--- a/lib/Driver/ToolChains/HIP.cpp
19+
+++ b/lib/Driver/ToolChains/HIP.cpp
20+
@@ -98,9 +98,8 @@ const char *AMDGCN::Linker::constructLLVMLinkCommand(
21+
const char *OutputFileName =
22+
C.addTempFile(C.getArgs().MakeArgString(TmpName));
23+
CmdArgs.push_back(OutputFileName);
24+
- SmallString<128> ExecPath(C.getDriver().Dir);
25+
- llvm::sys::path::append(ExecPath, "llvm-link");
26+
- const char *Exec = Args.MakeArgString(ExecPath);
27+
+ const char *Exec =
28+
+ Args.MakeArgString(getToolChain().GetProgramPath("llvm-link"));
29+
C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
30+
return OutputFileName;
31+
}
32+
@@ -141,9 +140,8 @@ const char *AMDGCN::Linker::constructOptCommand(
33+
const char *OutputFileName =
34+
C.addTempFile(C.getArgs().MakeArgString(TmpFileName));
35+
OptArgs.push_back(OutputFileName);
36+
- SmallString<128> OptPath(C.getDriver().Dir);
37+
- llvm::sys::path::append(OptPath, "opt");
38+
- const char *OptExec = Args.MakeArgString(OptPath);
39+
+ const char *OptExec =
40+
+ Args.MakeArgString(getToolChain().GetProgramPath("opt"));
41+
C.addCommand(llvm::make_unique<Command>(JA, *this, OptExec, OptArgs, Inputs));
42+
return OutputFileName;
43+
}
44+
@@ -161,9 +159,7 @@ const char *AMDGCN::Linker::constructLlcCommand(
45+
const char *LlcOutputFile =
46+
C.addTempFile(C.getArgs().MakeArgString(LlcOutputFileName));
47+
LlcArgs.push_back(LlcOutputFile);
48+
- SmallString<128> LlcPath(C.getDriver().Dir);
49+
- llvm::sys::path::append(LlcPath, "llc");
50+
- const char *Llc = Args.MakeArgString(LlcPath);
51+
+ const char *Llc = Args.MakeArgString(getToolChain().GetProgramPath("llc"));
52+
C.addCommand(llvm::make_unique<Command>(JA, *this, Llc, LlcArgs, Inputs));
53+
return LlcOutputFile;
54+
}
55+
@@ -178,9 +174,7 @@ void AMDGCN::Linker::constructLldCommand(Compilation &C, const JobAction &JA,
56+
ArgStringList LldArgs{"-flavor", "gnu", "--no-undefined",
57+
"-shared", "-o", Output.getFilename(),
58+
InputFileName};
59+
- SmallString<128> LldPath(C.getDriver().Dir);
60+
- llvm::sys::path::append(LldPath, "lld");
61+
- const char *Lld = Args.MakeArgString(LldPath);
62+
+ const char *Lld = Args.MakeArgString(getToolChain().GetProgramPath("lld"));
63+
C.addCommand(llvm::make_unique<Command>(JA, *this, Lld, LldArgs, Inputs));
64+
}
65+
66+
--
67+
2.23.1
68+

pkgs/development/compilers/llvm/7/clang/default.nix

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3
1+
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld
22
, fixDarwinDylibNames
33
, enableManpages ? false
44
, enablePolly ? false # TODO: get this info from llvm (passthru?)
@@ -22,7 +22,7 @@ let
2222
nativeBuildInputs = [ cmake python3 ]
2323
++ stdenv.lib.optional enableManpages python3.pkgs.sphinx;
2424

25-
buildInputs = [ libxml2 llvm ]
25+
buildInputs = [ libxml2 llvm lld ]
2626
++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
2727

2828
cmakeFlags = [
@@ -38,7 +38,11 @@ let
3838
"-DLINK_POLLY_INTO_TOOLS=ON"
3939
];
4040

41-
patches = [ ./purity.patch ];
41+
patches = [
42+
./purity.patch
43+
# make clang -xhip use $PATH to find executables
44+
./HIP-use-PATH-7.patch
45+
];
4246

4347
postPatch = ''
4448
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \

pkgs/development/compilers/llvm/7/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ let
3232
llvm-polly = callPackage ./llvm.nix { enablePolly = true; };
3333

3434
clang-unwrapped = callPackage ./clang {
35+
inherit (tools) lld;
3536
inherit clang-tools-extra_src;
3637
};
3738
clang-polly-unwrapped = callPackage ./clang {
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
From d9f1b7d7571b252e0ba2359ae6cfa93a9903c0e7 Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Holger=20W=C3=BCnsche?= <holger.o.wuensche@t-online.de>
3+
Date: Tue, 21 Jan 2020 19:49:44 +0100
4+
Subject: [PATCH] [HIP] use GetProgramPath for executable discovery
5+
6+
This change replaces the manual building of executable paths
7+
using llvm::sys::path::append with GetProgramPath.
8+
This enables adding other paths in case executables reside
9+
in different directories and makes the code easier to read.
10+
11+
Differential Revision: https://reviews.llvm.org/D72903
12+
---
13+
clang/lib/Driver/ToolChains/HIP.cpp | 23 ++++++++---------------
14+
1 file changed, 8 insertions(+), 15 deletions(-)
15+
16+
diff --git a/lib/Driver/ToolChains/HIP.cpp b/lang/lib/Driver/ToolChains/HIP.cpp
17+
index 868765cf88e..31f2d68ec6c 100644
18+
--- a/lib/Driver/ToolChains/HIP.cpp
19+
+++ b/lib/Driver/ToolChains/HIP.cpp
20+
@@ -104,9 +104,8 @@ const char *AMDGCN::Linker::constructLLVMLinkCommand(
21+
const char *OutputFileName =
22+
C.addTempFile(C.getArgs().MakeArgString(TmpName));
23+
CmdArgs.push_back(OutputFileName);
24+
- SmallString<128> ExecPath(C.getDriver().Dir);
25+
- llvm::sys::path::append(ExecPath, "llvm-link");
26+
- const char *Exec = Args.MakeArgString(ExecPath);
27+
+ const char *Exec =
28+
+ Args.MakeArgString(getToolChain().GetProgramPath("llvm-link"));
29+
C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
30+
return OutputFileName;
31+
}
32+
@@ -147,9 +146,8 @@ const char *AMDGCN::Linker::constructOptCommand(
33+
const char *OutputFileName =
34+
C.addTempFile(C.getArgs().MakeArgString(TmpFileName));
35+
OptArgs.push_back(OutputFileName);
36+
- SmallString<128> OptPath(C.getDriver().Dir);
37+
- llvm::sys::path::append(OptPath, "opt");
38+
- const char *OptExec = Args.MakeArgString(OptPath);
39+
+ const char *OptExec =
40+
+ Args.MakeArgString(getToolChain().GetProgramPath("opt"));
41+
C.addCommand(llvm::make_unique<Command>(JA, *this, OptExec, OptArgs, Inputs));
42+
return OutputFileName;
43+
}
44+
@@ -167,9 +165,7 @@ const char *AMDGCN::Linker::constructLlcCommand(
45+
const char *LlcOutputFile =
46+
C.addTempFile(C.getArgs().MakeArgString(LlcOutputFileName));
47+
LlcArgs.push_back(LlcOutputFile);
48+
- SmallString<128> LlcPath(C.getDriver().Dir);
49+
- llvm::sys::path::append(LlcPath, "llc");
50+
- const char *Llc = Args.MakeArgString(LlcPath);
51+
+ const char *Llc = Args.MakeArgString(getToolChain().GetProgramPath("llc"));
52+
C.addCommand(llvm::make_unique<Command>(JA, *this, Llc, LlcArgs, Inputs));
53+
return LlcOutputFile;
54+
}
55+
@@ -184,9 +180,7 @@ void AMDGCN::Linker::constructLldCommand(Compilation &C, const JobAction &JA,
56+
ArgStringList LldArgs{"-flavor", "gnu", "--no-undefined",
57+
"-shared", "-o", Output.getFilename(),
58+
InputFileName};
59+
- SmallString<128> LldPath(C.getDriver().Dir);
60+
- llvm::sys::path::append(LldPath, "lld");
61+
- const char *Lld = Args.MakeArgString(LldPath);
62+
+ const char *Lld = Args.MakeArgString(getToolChain().GetProgramPath("lld"));
63+
C.addCommand(llvm::make_unique<Command>(JA, *this, Lld, LldArgs, Inputs));
64+
}
65+
66+
@@ -218,9 +212,8 @@ void AMDGCN::constructHIPFatbinCommand(Compilation &C, const JobAction &JA,
67+
Args.MakeArgString(std::string("-outputs=").append(OutputFileName));
68+
BundlerArgs.push_back(BundlerOutputArg);
69+
70+
- SmallString<128> BundlerPath(C.getDriver().Dir);
71+
- llvm::sys::path::append(BundlerPath, "clang-offload-bundler");
72+
- const char *Bundler = Args.MakeArgString(BundlerPath);
73+
+ const char *Bundler = Args.MakeArgString(
74+
+ T.getToolChain().GetProgramPath("clang-offload-bundler"));
75+
C.addCommand(llvm::make_unique<Command>(JA, T, Bundler, BundlerArgs, Inputs));
76+
}
77+
78+
--
79+
2.23.1
80+

pkgs/development/compilers/llvm/8/clang/default.nix

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3
1+
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld
22
, fixDarwinDylibNames
33
, enableManpages ? false
44
, enablePolly ? false # TODO: get this info from llvm (passthru?)
@@ -22,7 +22,7 @@ let
2222
nativeBuildInputs = [ cmake python3 ]
2323
++ stdenv.lib.optional enableManpages python3.pkgs.sphinx;
2424

25-
buildInputs = [ libxml2 llvm ]
25+
buildInputs = [ libxml2 llvm lld ]
2626
++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
2727

2828
cmakeFlags = [
@@ -50,6 +50,8 @@ let
5050
./unwindlib.patch
5151
# https://reviews.llvm.org/D51899
5252
./compiler-rt-baremetal.patch
53+
# make clang -xhip use $PATH to find executables
54+
./HIP-use-PATH-8.patch
5355
];
5456

5557
postPatch = ''

pkgs/development/compilers/llvm/8/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ let
3232
llvm-polly = callPackage ./llvm.nix { enablePolly = true; };
3333

3434
clang-unwrapped = callPackage ./clang {
35+
inherit (tools) lld;
3536
inherit clang-tools-extra_src;
3637
};
3738
clang-polly-unwrapped = callPackage ./clang {
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
From 7147e9774c74abcd1d6db24e24d0fd989c2b97dd Mon Sep 17 00:00:00 2001
2+
From: =?UTF-8?q?Holger=20W=C3=BCnsche?= <holger.o.wuensche@t-online.de>
3+
Date: Tue, 21 Jan 2020 19:52:04 +0100
4+
Subject: [PATCH] [HIP] use GetProgramPath for executable discovery
5+
6+
This change replaces the manual building of executable paths
7+
using llvm::sys::path::append with GetProgramPath.
8+
This enables adding other paths in case executables reside
9+
in different directories and makes the code easier to read.
10+
11+
Differential Revision: https://reviews.llvm.org/D72903
12+
---
13+
clang/lib/Driver/ToolChains/HIP.cpp | 23 ++++++++---------------
14+
1 file changed, 8 insertions(+), 15 deletions(-)
15+
16+
diff --git a/lib/Driver/ToolChains/HIP.cpp b/lib/Driver/ToolChains/HIP.cpp
17+
index 2ec97e798fd..735c302debb 100644
18+
--- a/lib/Driver/ToolChains/HIP.cpp
19+
+++ b/lib/Driver/ToolChains/HIP.cpp
20+
@@ -66,9 +66,8 @@ const char *AMDGCN::Linker::constructLLVMLinkCommand(
21+
const char *OutputFileName =
22+
C.addTempFile(C.getArgs().MakeArgString(TmpName));
23+
CmdArgs.push_back(OutputFileName);
24+
- SmallString<128> ExecPath(C.getDriver().Dir);
25+
- llvm::sys::path::append(ExecPath, "llvm-link");
26+
- const char *Exec = Args.MakeArgString(ExecPath);
27+
+ const char *Exec =
28+
+ Args.MakeArgString(getToolChain().GetProgramPath("llvm-link"));
29+
C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
30+
return OutputFileName;
31+
}
32+
@@ -114,9 +113,8 @@ const char *AMDGCN::Linker::constructOptCommand(
33+
const char *OutputFileName =
34+
C.addTempFile(C.getArgs().MakeArgString(TmpFileName));
35+
OptArgs.push_back(OutputFileName);
36+
- SmallString<128> OptPath(C.getDriver().Dir);
37+
- llvm::sys::path::append(OptPath, "opt");
38+
- const char *OptExec = Args.MakeArgString(OptPath);
39+
+ const char *OptExec =
40+
+ Args.MakeArgString(getToolChain().GetProgramPath("opt"));
41+
C.addCommand(llvm::make_unique<Command>(JA, *this, OptExec, OptArgs, Inputs));
42+
return OutputFileName;
43+
}
44+
@@ -156,9 +154,7 @@ const char *AMDGCN::Linker::constructLlcCommand(
45+
const char *LlcOutputFile =
46+
C.addTempFile(C.getArgs().MakeArgString(LlcOutputFileName));
47+
LlcArgs.push_back(LlcOutputFile);
48+
- SmallString<128> LlcPath(C.getDriver().Dir);
49+
- llvm::sys::path::append(LlcPath, "llc");
50+
- const char *Llc = Args.MakeArgString(LlcPath);
51+
+ const char *Llc = Args.MakeArgString(getToolChain().GetProgramPath("llc"));
52+
C.addCommand(llvm::make_unique<Command>(JA, *this, Llc, LlcArgs, Inputs));
53+
return LlcOutputFile;
54+
}
55+
@@ -172,9 +168,7 @@ void AMDGCN::Linker::constructLldCommand(Compilation &C, const JobAction &JA,
56+
// The output from ld.lld is an HSA code object file.
57+
ArgStringList LldArgs{
58+
"-flavor", "gnu", "-shared", "-o", Output.getFilename(), InputFileName};
59+
- SmallString<128> LldPath(C.getDriver().Dir);
60+
- llvm::sys::path::append(LldPath, "lld");
61+
- const char *Lld = Args.MakeArgString(LldPath);
62+
+ const char *Lld = Args.MakeArgString(getToolChain().GetProgramPath("lld"));
63+
C.addCommand(llvm::make_unique<Command>(JA, *this, Lld, LldArgs, Inputs));
64+
}
65+
66+
@@ -206,9 +200,8 @@ void AMDGCN::constructHIPFatbinCommand(Compilation &C, const JobAction &JA,
67+
Args.MakeArgString(std::string("-outputs=").append(OutputFileName));
68+
BundlerArgs.push_back(BundlerOutputArg);
69+
70+
- SmallString<128> BundlerPath(C.getDriver().Dir);
71+
- llvm::sys::path::append(BundlerPath, "clang-offload-bundler");
72+
- const char *Bundler = Args.MakeArgString(BundlerPath);
73+
+ const char *Bundler = Args.MakeArgString(
74+
+ T.getToolChain().GetProgramPath("clang-offload-bundler"));
75+
C.addCommand(llvm::make_unique<Command>(JA, T, Bundler, BundlerArgs, Inputs));
76+
}
77+
78+
--
79+
2.23.1
80+

pkgs/development/compilers/llvm/9/clang/default.nix

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3
1+
{ stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld
22
, fixDarwinDylibNames
33
, enableManpages ? false
44
, enablePolly ? false # TODO: get this info from llvm (passthru?)
@@ -22,7 +22,7 @@ let
2222
nativeBuildInputs = [ cmake python3 ]
2323
++ stdenv.lib.optional enableManpages python3.pkgs.sphinx;
2424

25-
buildInputs = [ libxml2 llvm ]
25+
buildInputs = [ libxml2 llvm lld ]
2626
++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
2727

2828
cmakeFlags = [
@@ -43,6 +43,8 @@ let
4343
./purity.patch
4444
# https://reviews.llvm.org/D51899
4545
./compiler-rt-baremetal.patch
46+
# make clang -xhip use $PATH to find executables
47+
./HIP-use-PATH-9.patch
4648
];
4749

4850
postPatch = ''

pkgs/development/compilers/llvm/9/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ let
3232
llvm-polly = callPackage ./llvm.nix { enablePolly = true; };
3333

3434
clang-unwrapped = callPackage ./clang {
35+
inherit (tools) lld;
3536
inherit clang-tools-extra_src;
3637
};
3738
clang-polly-unwrapped = callPackage ./clang {

0 commit comments

Comments
 (0)