Skip to content

Commit 8f07a67

Browse files
authored
[clang][AIX] set OpenMP include path (#88545)
Add include directory for omp.h at `/opt/IBM/openxlCSDK/include/openmp`.
1 parent c515c78 commit 8f07a67

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

clang/lib/Driver/ToolChains/AIX.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,30 @@ AIX::GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const {
362362
return "/";
363363
}
364364

365+
void AIX::AddOpenMPIncludeArgs(const ArgList &DriverArgs,
366+
ArgStringList &CC1Args) const {
367+
// Add OpenMP include paths if -fopenmp is specified.
368+
if (DriverArgs.hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ,
369+
options::OPT_fno_openmp, false)) {
370+
SmallString<128> PathOpenMP;
371+
switch (getDriver().getOpenMPRuntime(DriverArgs)) {
372+
case Driver::OMPRT_OMP:
373+
PathOpenMP = GetHeaderSysroot(DriverArgs);
374+
llvm::sys::path::append(PathOpenMP, "opt/IBM/openxlCSDK", "include",
375+
"openmp");
376+
addSystemInclude(DriverArgs, CC1Args, PathOpenMP.str());
377+
break;
378+
case Driver::OMPRT_IOMP5:
379+
LLVM_FALLTHROUGH;
380+
case Driver::OMPRT_GOMP:
381+
LLVM_FALLTHROUGH;
382+
case Driver::OMPRT_Unknown:
383+
// Unknown / unsupported include paths.
384+
break;
385+
}
386+
}
387+
}
388+
365389
void AIX::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
366390
ArgStringList &CC1Args) const {
367391
// Return if -nostdinc is specified as a driver option.
@@ -380,6 +404,11 @@ void AIX::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
380404
addSystemInclude(DriverArgs, CC1Args, path::parent_path(P.str()));
381405
}
382406

407+
// Add the include directory containing omp.h. This needs to be before
408+
// adding the system include directory because other compilers put their
409+
// omp.h in /usr/include.
410+
AddOpenMPIncludeArgs(DriverArgs, CC1Args);
411+
383412
// Return if -nostdlibinc is specified as a driver option.
384413
if (DriverArgs.hasArg(options::OPT_nostdlibinc))
385414
return;

clang/lib/Driver/ToolChains/AIX.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
105105
private:
106106
llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const;
107107
bool ParseInlineAsmUsingAsmParser;
108+
void AddOpenMPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
109+
llvm::opt::ArgStringList &CC1Args) const;
108110
};
109111

110112
} // end namespace toolchains

clang/test/Driver/aix-toolchain-include.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,28 @@
55
// RUN: --target=powerpc-ibm-aix \
66
// RUN: -resource-dir=%S/Inputs/resource_dir \
77
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
8+
// RUN: -fopenmp \
89
// RUN: | FileCheck -check-prefixes=CHECK-INTERNAL-INCLUDE,CHECK-INTERNAL-INCLUDE-CXX %s
910

1011
// RUN: %clangxx -### %s 2>&1 \
1112
// RUN: --target=powerpc64-ibm-aix \
1213
// RUN: -resource-dir=%S/Inputs/resource_dir \
1314
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
15+
// RUN: -fopenmp \
1416
// RUN: | FileCheck -check-prefixes=CHECK-INTERNAL-INCLUDE,CHECK-INTERNAL-INCLUDE-CXX %s
1517

1618
// RUN: %clang -### -xc %s 2>&1 \
1719
// RUN: --target=powerpc-ibm-aix \
1820
// RUN: -resource-dir=%S/Inputs/resource_dir \
1921
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
22+
// RUN: -fopenmp \
2023
// RUN: | FileCheck -check-prefix=CHECK-INTERNAL-INCLUDE %s
2124

2225
// RUN: %clang -### -xc %s 2>&1 \
2326
// RUN: --target=powerpc64-ibm-aix \
2427
// RUN: -resource-dir=%S/Inputs/resource_dir \
2528
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
29+
// RUN: -fopenmp \
2630
// RUN: | FileCheck -check-prefix=CHECK-INTERNAL-INCLUDE %s
2731

2832
// CHECK-INTERNAL-INCLUDE: "-cc1"
@@ -31,6 +35,7 @@
3135
// CHECK-INTERNAL-INCLUDE-CXX: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}c++{{(/|\\\\)}}v1"
3236
// CHECK-INTERNAL-INCLUDE-CXX: "-D__LIBC_NO_CPP_MATH_OVERLOADS__"
3337
// CHECK-INTERNAL-INCLUDE: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
38+
// CHECK-INTERNAL-INCLUDE: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}openmp"
3439
// CHECK-INTERNAL-INCLUDE: "-internal-isystem" "[[SYSROOT]]/usr/include"
3540

3641
// Check powerpc-ibm-aix, 32-bit/64-bit. -nostdinc option.
@@ -73,64 +78,73 @@
7378
// RUN: -resource-dir=%S/Inputs/resource_dir \
7479
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
7580
// RUN: -nostdlibinc \
81+
// RUN: -fopenmp \
7682
// RUN: | FileCheck -check-prefix=CHECK-NOSTDLIBINC-INCLUDE %s
7783

7884
// RUN: %clangxx -### %s 2>&1 \
7985
// RUN: --target=powerpc64-ibm-aix \
8086
// RUN: -resource-dir=%S/Inputs/resource_dir \
8187
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
8288
// RUN: -nostdlibinc \
89+
// RUN: -fopenmp \
8390
// RUN: | FileCheck -check-prefix=CHECK-NOSTDLIBINC-INCLUDE %s
8491

8592
// RUN: %clang -### -xc %s 2>&1 \
8693
// RUN: --target=powerpc-ibm-aix \
8794
// RUN: -resource-dir=%S/Inputs/resource_dir \
8895
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
8996
// RUN: -nostdlibinc \
97+
// RUN: -fopenmp \
9098
// RUN: | FileCheck -check-prefix=CHECK-NOSTDLIBINC-INCLUDE %s
9199

92100
// RUN: %clang -### -xc %s 2>&1 \
93101
// RUN: --target=powerpc64-ibm-aix \
94102
// RUN: -resource-dir=%S/Inputs/resource_dir \
95103
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
96104
// RUN: -nostdlibinc \
105+
// RUN: -fopenmp \
97106
// RUN: | FileCheck -check-prefix=CHECK-NOSTDLIBINC-INCLUDE %s
98107

99108
// CHECK-NOSTDLIBINC-INCLUDE: "-cc1"
100109
// CHECK-NOSTDLIBINC-INCLUDE: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
101110
// CHECK-NOSTDLIBINC-INCLUDE: "-isysroot" "[[SYSROOT:[^"]+]]"
102111
// CHECK-NOSTDLIBINC-INCLUDE: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
112+
// CHECK-NOSTDLIBINC-INCLUDE: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}openmp"
103113
// CHECK-NOSTDLIBINC-INCLUDE-NOT: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}c++{{(/|\\\\)}}v1"
104114
// CHECK-NOSTDLIBINC-INCLUDE-NOT: "-D__LIBC_NO_CPP_MATH_OVERLOADS__"
105-
// CHECK-NOSTDLIBINC-INCLUDE-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include"
115+
// CHECK-NOSTDLIBINC-INCLUDE-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include"
106116

107117
// Check powerpc-ibm-aix, 32-bit/64-bit. -nobuiltininc option.
108118
// RUN: %clangxx -### %s 2>&1 \
109119
// RUN: --target=powerpc-ibm-aix \
110120
// RUN: -resource-dir=%S/Inputs/resource_dir \
111121
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
112122
// RUN: -nobuiltininc \
123+
// RUN: -fopenmp \
113124
// RUN: | FileCheck -check-prefixes=CHECK-NOBUILTININC-INCLUDE,CHECK-NOBUILTININC-INCLUDE-CXX %s
114125

115126
// RUN: %clangxx -### %s 2>&1 \
116127
// RUN: --target=powerpc64-ibm-aix \
117128
// RUN: -resource-dir=%S/Inputs/resource_dir \
118129
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
119130
// RUN: -nobuiltininc \
131+
// RUN: -fopenmp \
120132
// RUN: | FileCheck -check-prefixes=CHECK-NOBUILTININC-INCLUDE,CHECK-NOBUILTININC-INCLUDE-CXX %s
121133

122134
// RUN: %clang -### -xc %s 2>&1 \
123135
// RUN: --target=powerpc-ibm-aix \
124136
// RUN: -resource-dir=%S/Inputs/resource_dir \
125137
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
126138
// RUN: -nobuiltininc \
139+
// RUN: -fopenmp \
127140
// RUN: | FileCheck -check-prefix=CHECK-NOBUILTININC-INCLUDE %s
128141

129142
// RUN: %clang -### -xc %s 2>&1 \
130143
// RUN: --target=powerpc64-ibm-aix \
131144
// RUN: -resource-dir=%S/Inputs/resource_dir \
132145
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
133146
// RUN: -nobuiltininc \
147+
// RUN: -fopenmp \
134148
// RUN: | FileCheck -check-prefix=CHECK-NOBUILTININC-INCLUDE %s
135149

136150
// CHECK-NOBUILTININC-INCLUDE: "-cc1"
@@ -139,6 +153,7 @@
139153
// CHECK-NOBUILTININC-INCLUDE-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
140154
// CHECK-NOBUILTININC-INCLUDE-CXX: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}c++{{(/|\\\\)}}v1"
141155
// CHECK-NOBUILTININC-INCLUDE-CXX: "-D__LIBC_NO_CPP_MATH_OVERLOADS__"
156+
// CHECK-NOBUILTININC-INCLUDE: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}openmp"
142157
// CHECK-NOBUILTININC-INCLUDE: "-internal-isystem" "[[SYSROOT]]/usr/include"
143158

144159
// Check powerpc-ibm-aix, 32-bit/64-bit. -nostdinc++ option.
@@ -147,13 +162,15 @@
147162
// RUN: -resource-dir=%S/Inputs/resource_dir \
148163
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
149164
// RUN: -nostdinc++ \
165+
// RUN: -fopenmp \
150166
// RUN: | FileCheck -check-prefix=CHECK-NOSTDINCXX-INCLUDE %s
151167

152168
// RUN: %clangxx -### %s 2>&1 \
153169
// RUN: --target=powerpc64-ibm-aix \
154170
// RUN: -resource-dir=%S/Inputs/resource_dir \
155171
// RUN: --sysroot=%S/Inputs/basic_aix_tree \
156172
// RUN: -nostdinc++ \
173+
// RUN: -fopenmp \
157174
// RUN: | FileCheck -check-prefix=CHECK-NOSTDINCXX-INCLUDE %s
158175

159176
// CHECK-NOSTDINCXX-INCLUDE: "-cc1"
@@ -162,6 +179,7 @@
162179
// CHECK-NOSTDINCXX-INCLUDE: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
163180
// CHECK-NOSTDINCXX-INCLUDE-NOT: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}c++{{(/|\\\\)}}v1"
164181
// CHECK-NOSTDINCXX-INCLUDE-NOT: "-D__LIBC_NO_CPP_MATH_OVERLOADS__"
182+
// CHECK-NOSTDINCXX-INCLUDE: "-internal-isystem" "[[SYSROOT]]{{(/|\\\\)}}opt{{(/|\\\\)}}IBM{{(/|\\\\)}}openxlCSDK{{(/|\\\\)}}include{{(/|\\\\)}}openmp"
165183
// CHECK-NOSTDINCXX-INCLUDE: "-internal-isystem" "[[SYSROOT]]/usr/include"
166184

167185
// Check powerpc-ibm-aix, 32-bit. -stdlib=libstdc++ invokes fatal error.

0 commit comments

Comments
 (0)