[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-30 Thread Alexander van der Grinten via cfe-commits

avdgrinten wrote:

Regarding the acceptance bar, I'd like to stress the following point: it is 
true that Managarm is not a mainstream OS (but neither are some of the other 
OSes that have existing LLVM and Clang targets); however, LLVM is an 
infrastructure project that is used by a lot of downstreams (e.g., out of tree 
compilers), and not being supported by LLVM seriously impacts our ability to 
integrate with downstream projects.

In fact, maintaining our LLVM patches has been quite easy ([and we've been 
doing that out-of-tree since 
2019](https://github.com/managarm/bootstrap-managarm/commit/565104262b7aa96995c80c86b6857ae872da6efa)),
 but maintaining patches for downstream compilers tends to be much more 
involved. This is especially true for Rust, where the mainstream tooling is not 
built in a way that allows us to easily apply out-of-tree patches to packages 
managed by `cargo` etc. One of the main reasons why we want to get into 
upstream LLVM now is that we also have a Rust port that we want to upstream, 
and upstream Rust wants us to submit the LLVM target first.

We are committed to maintain our LLVM port indefinitely, and we've been doing 
it out-of-tree already since LLVM 6.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-29 Thread Arsen Arsenović via cfe-commits

ArsenArsen wrote:

(context: I work(ed) on managarm, but haven't interacted with the LLVM port on 
it nearly at all, and have never added targets to LLVM)

The `Kernel` environment probably was added is to mimic what gnuconfig does:

```
~$ /usr/share/gnuconfig/config.sub x86_64-managarm-kernel
x86_64-pc-managarm-kernel
~$ /usr/share/gnuconfig/config.sub x86_64-linux-kernel
Invalid configuration 'x86_64-linux-kernel': 'linux' does not support 'kernel'.
~ 1 $
```

It might be reasonable to constrain it to `managarm` (as gnuconfig does).

> Does your OS need a different target triple for kernel development? Note that 
> almost all other OSes don't make the target triple distinction.

It does for GCC, at least for libstdc++.  I don't know how LLVM works, so I 
can't comment there.

The kernel environment could also conceivably be a multilib of 
`*-*-managarm*-*` in general.  I haven't done the work necessary to implement 
that in our GCC port yet, but it's been simmering in the back of my mind for a 
while.  Generally, though, I don't buy that an OS triplet covers said OSes 
kernel.  It seems simpler for kernel compilers to be kernel compilers (perhaps 
via multilib).

WRT niche, I don't disagree - that's part of why I haven't upstreamed anything 
into GCC either.  The other part is that I haven't worked enough on the port to 
consider myself confident in quality for inclusion (but that doesn't have an 
influence on the LLVM port)

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-29 Thread via cfe-commits

mintsuki wrote:

I would remove the `-kernel` environment, only leaving the `-mlibc` environment 
which makes sense, similar to `-gnu` and `-musl`.

The rest seems fine to me, but I would change the `defined(__managarm__)` for 
`defined(__mlibc__)` wherever possible (adding that macro to mlibc if it hasn't 
been already).

If the notoriety of managarm is an issue for this addition, I would still 
strongly recommend perhaps removing the managarm portion and leaving `-mlibc` 
as a new environment. mlibc is used by dozens of OSes at this point, some of 
which relatively notable.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-28 Thread Fangrui Song via cfe-commits

MaskRay wrote:

> @MaskRay seems like this target might be too niche to go into LLVM at this 
> time? is it worth considering some bar before accepting such a thing into 
> LLVM, rather than encouraging folks to maintain such a thing in a branch for 
> now?

Good question about the acceptance bar. I started 
https://discourse.llvm.org/t/new-clang-toolchain-acceptance-criteria/79233 

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-28 Thread David Blaikie via cfe-commits

dwblaikie wrote:

@MaskRay seems like this target might be too niche to go into LLVM at this 
time? is it worth considering some bar before accepting such a thing into LLVM, 
rather than encouraging folks to maintain such a thing in a branch for now?

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits

MaskRay wrote:

#78065 for Hurd is a good example for clang testing.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits

MaskRay wrote:

> [llvm] Add triples for managarm

I suggest that you split the patch into LLVM target triple part and a clang 
part. That's a convention to support new targets.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits

https://github.com/MaskRay edited 
https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits


@@ -279,8 +280,10 @@ class Triple {
 Amplification,
 OpenCL,
 OpenHOS,
+Kernel,
+Mlibc,

MaskRay wrote:

I don't know how Mlibc is intended to be used but LLVM LTO warns about 
differing target triples.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits


@@ -279,8 +280,10 @@ class Triple {
 Amplification,
 OpenCL,
 OpenHOS,
+Kernel,

MaskRay wrote:

Why is a generic term `Kernel` added? I am concerned that it would cause 
confusion to users of other OSes.

Does your OS need a different target triple for kernel development? Note that 
almost all other OSes don't make the target triple distinction.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits

MaskRay wrote:

Some older `ToolChain`s were probably contributed with a lot of 
`CmdArgs.push_back` uncovered by tests. They are not good examples to follow. 
For new `ToolChain`s, we ensure that all constructed `CmdArgs.push_back` are 
covered. This allows refactoring by someone who is unfamiliar with your usage 
pattern.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread Fangrui Song via cfe-commits


@@ -2562,7 +2566,10 @@ void 
Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
   static const char *const RISCV64LibDirs[] = {"/lib64", "/lib"};
   static const char *const RISCV64Triples[] = {"riscv64-unknown-linux-gnu",
"riscv64-linux-gnu",
-   "riscv64-unknown-elf"};
+   "riscv64-unknown-elf",

MaskRay wrote:

L2449 has a comment that we should not add new elements.

The existing ones should be cleaned up as well.

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-27 Thread via cfe-commits

no92 wrote:

Ping

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-05 Thread Brad Smith via cfe-commits

brad0 wrote:

@MaskRay 

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-05-04 Thread via cfe-commits

no92 wrote:

Ping

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-24 Thread via cfe-commits

no92 wrote:

Ping

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-13 Thread via cfe-commits

no92 wrote:

Ping

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-05 Thread via cfe-commits

https://github.com/no92 edited https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-llvm-adt

Author: no92 (no92)


Changes

This PR aims to add a target for 
[managarm](https://github.com/managarm/managarm). The targets 
`{x86_64,aarch64,riscv64}-pc-managarm-{kernel,system}` are enabled by this PR 
and have been tested to work on managarm.

---

Patch is 23.53 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/87845.diff


12 Files Affected:

- (modified) clang/lib/Basic/Targets.cpp (+9) 
- (modified) clang/lib/Basic/Targets/OSTargets.h (+30) 
- (modified) clang/lib/Driver/CMakeLists.txt (+1) 
- (modified) clang/lib/Driver/Driver.cpp (+4) 
- (modified) clang/lib/Driver/ToolChains/Gnu.cpp (+10-3) 
- (added) clang/lib/Driver/ToolChains/Managarm.cpp (+230) 
- (added) clang/lib/Driver/ToolChains/Managarm.h (+54) 
- (modified) llvm/include/llvm/ADT/bit.h (+1-1) 
- (modified) llvm/include/llvm/TargetParser/Triple.h (+4-1) 
- (modified) llvm/lib/Support/Unix/Path.inc (+8-5) 
- (modified) llvm/lib/TargetParser/Triple.cpp (+6) 
- (modified) llvm/unittests/TargetParser/TripleTest.cpp (+24) 


``diff
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index e3283510c6aac7..356b1888aca80d 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -160,6 +160,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
  Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+   Opts);
 case llvm::Triple::NetBSD:
   return std::make_unique>(Triple,
  Opts);
@@ -463,6 +466,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+ Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
@@ -646,6 +652,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
   return std::make_unique>(Triple, Opts);
 case llvm::Triple::Hurd:
   return std::make_unique>(Triple, Opts);
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index 4366c1149e4053..7e966ec32b911b 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -369,6 +369,36 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public 
OSTargetInfo {
   }
 };
 
+// Managarm Target
+template 
+class LLVM_LIBRARY_VISIBILITY ManagarmTargetInfo : public OSTargetInfo 
{
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__managarm__");
+Builder.defineMacro("__ELF__");
+if (Opts.POSIXThreads)
+  Builder.defineMacro("_REENTRANT");
+if (Opts.CPlusPlus)
+  Builder.defineMacro("_GNU_SOURCE");
+if (this->HasFloat128)
+  Builder.defineMacro("__FLOAT128__");
+  }
+
+public:
+  ManagarmTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+switch (Triple.getArch()) {
+default:
+  break;
+case llvm::Triple::x86:
+case llvm::Triple::x86_64:
+  this->HasFloat128 = true;
+  break;
+}
+  }
+};
+
 // NetBSD Target
 template 
 class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo {
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
index 58427e3f83c420..afdf39ed6fb61a 100644
--- a/clang/lib/Driver/CMakeLists.txt
+++ b/clang/lib/Driver/CMakeLists.txt
@@ -65,6 +65,7 @@ add_clang_library(clangDriver
   ToolChains/HLSL.cpp
   ToolChains/Hurd.cpp
   ToolChains/Linux.cpp
+  ToolChains/Managarm.cpp
   ToolChains/MipsLinux.cpp
   ToolChains/MinGW.cpp
   ToolChains/MSP430.cpp
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index e7335a61b10c53..d5203c21c10e2d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -32,6 +32,7 @@
 #include "ToolChains/Linux.h"
 #include "ToolChains/MSP430.h"
 #include "ToolChains/MSVC.h"
+#include "ToolChains/Managarm.h"
 #include "ToolChains/MinGW.h"
 #include "ToolChains/MipsLinux.h"
 #include "ToolChains/NaCl.h"
@@ -6351,6 +6352,9 @@ const ToolChain ::getToolChain(const ArgList ,
 case llvm::Triple::Fuchsia:
   TC = std::make_unique(*this, Target, Args);
   break;
+case llvm::Triple::Managarm:
+  TC = std::make_unique(*this, Target, Args);
+  break;
 

[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-driver

Author: no92 (no92)


Changes

This PR aims to add a target for 
[managarm](https://github.com/managarm/managarm). The targets 
`{x86_64,aarch64,riscv64}-pc-managarm-{kernel,system}` are enabled by this PR 
and have been tested to work on managarm.

---

Patch is 23.53 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/87845.diff


12 Files Affected:

- (modified) clang/lib/Basic/Targets.cpp (+9) 
- (modified) clang/lib/Basic/Targets/OSTargets.h (+30) 
- (modified) clang/lib/Driver/CMakeLists.txt (+1) 
- (modified) clang/lib/Driver/Driver.cpp (+4) 
- (modified) clang/lib/Driver/ToolChains/Gnu.cpp (+10-3) 
- (added) clang/lib/Driver/ToolChains/Managarm.cpp (+230) 
- (added) clang/lib/Driver/ToolChains/Managarm.h (+54) 
- (modified) llvm/include/llvm/ADT/bit.h (+1-1) 
- (modified) llvm/include/llvm/TargetParser/Triple.h (+4-1) 
- (modified) llvm/lib/Support/Unix/Path.inc (+8-5) 
- (modified) llvm/lib/TargetParser/Triple.cpp (+6) 
- (modified) llvm/unittests/TargetParser/TripleTest.cpp (+24) 


``diff
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index e3283510c6aac7..356b1888aca80d 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -160,6 +160,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
  Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+   Opts);
 case llvm::Triple::NetBSD:
   return std::make_unique>(Triple,
  Opts);
@@ -463,6 +466,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+ Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
@@ -646,6 +652,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
   return std::make_unique>(Triple, Opts);
 case llvm::Triple::Hurd:
   return std::make_unique>(Triple, Opts);
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index 4366c1149e4053..7e966ec32b911b 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -369,6 +369,36 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public 
OSTargetInfo {
   }
 };
 
+// Managarm Target
+template 
+class LLVM_LIBRARY_VISIBILITY ManagarmTargetInfo : public OSTargetInfo 
{
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__managarm__");
+Builder.defineMacro("__ELF__");
+if (Opts.POSIXThreads)
+  Builder.defineMacro("_REENTRANT");
+if (Opts.CPlusPlus)
+  Builder.defineMacro("_GNU_SOURCE");
+if (this->HasFloat128)
+  Builder.defineMacro("__FLOAT128__");
+  }
+
+public:
+  ManagarmTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+switch (Triple.getArch()) {
+default:
+  break;
+case llvm::Triple::x86:
+case llvm::Triple::x86_64:
+  this->HasFloat128 = true;
+  break;
+}
+  }
+};
+
 // NetBSD Target
 template 
 class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo {
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
index 58427e3f83c420..afdf39ed6fb61a 100644
--- a/clang/lib/Driver/CMakeLists.txt
+++ b/clang/lib/Driver/CMakeLists.txt
@@ -65,6 +65,7 @@ add_clang_library(clangDriver
   ToolChains/HLSL.cpp
   ToolChains/Hurd.cpp
   ToolChains/Linux.cpp
+  ToolChains/Managarm.cpp
   ToolChains/MipsLinux.cpp
   ToolChains/MinGW.cpp
   ToolChains/MSP430.cpp
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index e7335a61b10c53..d5203c21c10e2d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -32,6 +32,7 @@
 #include "ToolChains/Linux.h"
 #include "ToolChains/MSP430.h"
 #include "ToolChains/MSVC.h"
+#include "ToolChains/Managarm.h"
 #include "ToolChains/MinGW.h"
 #include "ToolChains/MipsLinux.h"
 #include "ToolChains/NaCl.h"
@@ -6351,6 +6352,9 @@ const ToolChain ::getToolChain(const ArgList ,
 case llvm::Triple::Fuchsia:
   TC = std::make_unique(*this, Target, Args);
   break;
+case llvm::Triple::Managarm:
+  TC = std::make_unique(*this, Target, Args);
+  break;
 

[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-05 Thread via cfe-commits

github-actions[bot] wrote:



Thank you for submitting a Pull Request (PR) to the LLVM Project!

This PR will be automatically labeled and the relevant teams will be
notified.

If you wish to, you can add reviewers by using the "Reviewers" section on this 
page.

If this is not working for you, it is probably because you do not have write
permissions for the repository. In which case you can instead tag reviewers by
name in a comment by using `@` followed by their GitHub username.

If you have received no comments on your PR for a week, you can request a review
by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate
is once a week. Please remember that you are asking for valuable time from 
other developers.

If you have further questions, they may be answered by the [LLVM GitHub User 
Guide](https://llvm.org/docs/GitHub.html).

You can also ask questions in a comment on this PR, on the [LLVM 
Discord](https://discord.com/invite/xS7Z362) or on the 
[forums](https://discourse.llvm.org/).

https://github.com/llvm/llvm-project/pull/87845
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [llvm] Add triples for managarm (PR #87845)

2024-04-05 Thread via cfe-commits

https://github.com/no92 created https://github.com/llvm/llvm-project/pull/87845

This PR aims to add a target for 
[managarm](https://github.com/managarm/managarm). The targets 
`{x86_64,aarch64,riscv64}-pc-managarm-{kernel,system}` are enabled by this PR 
and have been tested to work on managarm.

>From 09288d0ab62d6ca13bd5dea4cfa5d78e67901e89 Mon Sep 17 00:00:00 2001
From: no92 
Date: Tue, 2 Apr 2024 18:24:04 +0200
Subject: [PATCH] [llvm] Add triples for managarm

---
 clang/lib/Basic/Targets.cpp|   9 +
 clang/lib/Basic/Targets/OSTargets.h|  30 +++
 clang/lib/Driver/CMakeLists.txt|   1 +
 clang/lib/Driver/Driver.cpp|   4 +
 clang/lib/Driver/ToolChains/Gnu.cpp|  13 +-
 clang/lib/Driver/ToolChains/Managarm.cpp   | 230 +
 clang/lib/Driver/ToolChains/Managarm.h |  54 +
 llvm/include/llvm/ADT/bit.h|   2 +-
 llvm/include/llvm/TargetParser/Triple.h|   5 +-
 llvm/lib/Support/Unix/Path.inc |  13 +-
 llvm/lib/TargetParser/Triple.cpp   |   6 +
 llvm/unittests/TargetParser/TripleTest.cpp |  24 +++
 12 files changed, 381 insertions(+), 10 deletions(-)
 create mode 100644 clang/lib/Driver/ToolChains/Managarm.cpp
 create mode 100644 clang/lib/Driver/ToolChains/Managarm.h

diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index e3283510c6aac7..356b1888aca80d 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -160,6 +160,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
  Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+   Opts);
 case llvm::Triple::NetBSD:
   return std::make_unique>(Triple,
  Opts);
@@ -463,6 +466,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
 return std::make_unique>(Triple,
Opts);
   }
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+ Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
@@ -646,6 +652,9 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple ,
   return std::make_unique>(Triple, Opts);
 case llvm::Triple::Hurd:
   return std::make_unique>(Triple, Opts);
+case llvm::Triple::Managarm:
+  return std::make_unique>(Triple,
+Opts);
 default:
   return std::make_unique(Triple, Opts);
 }
diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index 4366c1149e4053..7e966ec32b911b 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -369,6 +369,36 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public 
OSTargetInfo {
   }
 };
 
+// Managarm Target
+template 
+class LLVM_LIBRARY_VISIBILITY ManagarmTargetInfo : public OSTargetInfo 
{
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__managarm__");
+Builder.defineMacro("__ELF__");
+if (Opts.POSIXThreads)
+  Builder.defineMacro("_REENTRANT");
+if (Opts.CPlusPlus)
+  Builder.defineMacro("_GNU_SOURCE");
+if (this->HasFloat128)
+  Builder.defineMacro("__FLOAT128__");
+  }
+
+public:
+  ManagarmTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+switch (Triple.getArch()) {
+default:
+  break;
+case llvm::Triple::x86:
+case llvm::Triple::x86_64:
+  this->HasFloat128 = true;
+  break;
+}
+  }
+};
+
 // NetBSD Target
 template 
 class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo {
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
index 58427e3f83c420..afdf39ed6fb61a 100644
--- a/clang/lib/Driver/CMakeLists.txt
+++ b/clang/lib/Driver/CMakeLists.txt
@@ -65,6 +65,7 @@ add_clang_library(clangDriver
   ToolChains/HLSL.cpp
   ToolChains/Hurd.cpp
   ToolChains/Linux.cpp
+  ToolChains/Managarm.cpp
   ToolChains/MipsLinux.cpp
   ToolChains/MinGW.cpp
   ToolChains/MSP430.cpp
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index e7335a61b10c53..d5203c21c10e2d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -32,6 +32,7 @@
 #include "ToolChains/Linux.h"
 #include "ToolChains/MSP430.h"
 #include "ToolChains/MSVC.h"
+#include "ToolChains/Managarm.h"
 #include "ToolChains/MinGW.h"
 #include "ToolChains/MipsLinux.h"
 #include "ToolChains/NaCl.h"
@@ -6351,6 +6352,9 @@ const ToolChain ::getToolChain(const ArgList ,
 case