[clang] [llvm] [Driver][SYCL] Add initial SYCL offload compilation support (PR #107493)
Aaron Ballman via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 16 08:24:28 PDT 2024
================
@@ -0,0 +1,202 @@
+//===--- SYCL.cpp - SYCL Tool and ToolChain Implementations -----*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#include "SYCL.h"
+#include "CommonArgs.h"
+#include "clang/Driver/Action.h"
+#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Driver.h"
+#include "clang/Driver/DriverDiagnostic.h"
+#include "clang/Driver/InputInfo.h"
+#include "clang/Driver/Options.h"
+#include "llvm/Option/Option.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+#include <algorithm>
+#include <sstream>
+
+using namespace clang::driver;
+using namespace clang::driver::toolchains;
+using namespace clang::driver::tools;
+using namespace clang;
+using namespace llvm::opt;
+
+SYCLInstallationDetector::SYCLInstallationDetector(const Driver &D)
+ : D(D), InstallationCandidates() {
+ InstallationCandidates.emplace_back(D.Dir + "/..");
+}
+
+void SYCLInstallationDetector::AddSYCLIncludeArgs(
+ const ArgList &DriverArgs, ArgStringList &CC1Args) const {
+ // Add the SYCL header search locations in the specified order.
+ // ../include/sycl
+ // ../include/sycl/stl_wrappers
+ // ../include
+ SmallString<128> IncludePath(D.Dir);
+ llvm::sys::path::append(IncludePath, "..");
+ llvm::sys::path::append(IncludePath, "include");
+ SmallString<128> SYCLPath(IncludePath);
+ llvm::sys::path::append(SYCLPath, "sycl");
+ // This is used to provide our wrappers around STL headers that provide
+ // additional functions/template specializations when the user includes those
+ // STL headers in their programs (e.g., <complex>).
+ SmallString<128> STLWrappersPath(SYCLPath);
+ llvm::sys::path::append(STLWrappersPath, "stl_wrappers");
+ CC1Args.push_back("-internal-isystem");
+ CC1Args.push_back(DriverArgs.MakeArgString(SYCLPath));
+ CC1Args.push_back("-internal-isystem");
+ CC1Args.push_back(DriverArgs.MakeArgString(STLWrappersPath));
+ CC1Args.push_back("-internal-isystem");
+ CC1Args.push_back(DriverArgs.MakeArgString(IncludePath));
+}
+
+void SYCLInstallationDetector::print(llvm::raw_ostream &OS) const {
+ if (!InstallationCandidates.size())
+ return;
+ OS << "SYCL Installation Candidates: \n";
+ for (const auto &IC : InstallationCandidates) {
+ OS << IC << "\n";
+ }
+}
+
+// Unsupported options for SYCL device compilation
+// -fcf-protection, -fsanitize, -fprofile-generate, -fprofile-instr-generate
+// -ftest-coverage, -fcoverage-mapping, -fcreate-profile, -fprofile-arcs
+// -fcs-profile-generate -forder-file-instrumentation, --coverage
----------------
AaronBallman wrote:
I expect this comment to get out of date rather quickly; I'd probably drop the list and let users read the function body instead.
https://github.com/llvm/llvm-project/pull/107493
More information about the llvm-commits
mailing list