Skip to content

Commit 696b5b2

Browse files
committed
[llvm] Add managarm OS target
1 parent a967251 commit 696b5b2

File tree

5 files changed

+37
-6
lines changed

5 files changed

+37
-6
lines changed

llvm/include/llvm/ADT/bit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
#if defined(__linux__) || defined(__GNU__) || defined(__HAIKU__) || \
3232
defined(__Fuchsia__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__) || \
33-
defined(__OpenBSD__) || defined(__DragonFly__)
33+
defined(__OpenBSD__) || defined(__DragonFly__) || defined(__managarm__)
3434
#include <endian.h>
3535
#elif defined(_AIX)
3636
#include <sys/machine.h>

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class Triple {
208208
Linux,
209209
Lv2, // PS3
210210
MacOSX,
211+
Managarm,
211212
NetBSD,
212213
OpenBSD,
213214
Solaris,
@@ -299,6 +300,7 @@ class Triple {
299300
Amplification,
300301
OpenCL,
301302
OpenHOS,
303+
Mlibc,
302304

303305
PAuthTest,
304306

@@ -849,6 +851,8 @@ class Triple {
849851

850852
bool isVulkanOS() const { return getOS() == Triple::Vulkan; }
851853

854+
bool isOSManagarm() const { return getOS() == Triple::Managarm; }
855+
852856
bool isShaderStageEnvironment() const {
853857
EnvironmentType Env = getEnvironment();
854858
return Env == Triple::Pixel || Env == Triple::Vertex ||

llvm/lib/Support/Unix/Path.inc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ extern char **environ;
6969

7070
#include <sys/types.h>
7171
#if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && \
72-
!defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(_AIX)
72+
!defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(_AIX) && \
73+
!defined(__managarm__)
7374
#include <sys/statvfs.h>
7475
#define STATVFS statvfs
7576
#define FSTATVFS fstatvfs
@@ -78,7 +79,7 @@ extern char **environ;
7879
#if defined(__OpenBSD__) || defined(__FreeBSD__)
7980
#include <sys/mount.h>
8081
#include <sys/param.h>
81-
#elif defined(__linux__)
82+
#elif defined(__linux__) || defined(__managarm__)
8283
#if defined(HAVE_LINUX_MAGIC_H)
8384
#include <linux/magic.h>
8485
#else
@@ -124,7 +125,8 @@ const file_t kInvalidFile = -1;
124125
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
125126
defined(__FreeBSD_kernel__) || defined(__linux__) || defined(__CYGWIN__) || \
126127
defined(__DragonFly__) || defined(_AIX) || defined(__GNU__) || \
127-
(defined(__sun__) && defined(__svr4__) || defined(__HAIKU__))
128+
(defined(__sun__) && defined(__svr4__) || defined(__HAIKU__)) || \
129+
defined(__managarm__)
128130
static int test_dir(char ret[PATH_MAX], const char *dir, const char *bin) {
129131
struct stat sb;
130132
char fullpath[PATH_MAX];
@@ -245,7 +247,8 @@ std::string getMainExecutable(const char *argv0, void *MainAddr) {
245247
// If we don't have procfs mounted, fall back to argv[0]
246248
if (getprogpath(exe_path, argv0) != NULL)
247249
return exe_path;
248-
#elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__)
250+
#elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__) || \
251+
defined(__managarm__)
249252
char exe_path[PATH_MAX];
250253
const char *aPath = "/proc/self/exe";
251254
if (sys::fs::exists(aPath)) {
@@ -472,7 +475,7 @@ std::error_code remove(const Twine &path, bool IgnoreNonExisting) {
472475
}
473476

474477
static bool is_local_impl(struct STATVFS &Vfs) {
475-
#if defined(__linux__) || defined(__GNU__)
478+
#if defined(__linux__) || defined(__GNU__) || defined(__managarm__)
476479
#ifndef NFS_SUPER_MAGIC
477480
#define NFS_SUPER_MAGIC 0x6969
478481
#endif

llvm/lib/TargetParser/Triple.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,8 @@ StringRef Triple::getOSTypeName(OSType Kind) {
299299
case Linux: return "linux";
300300
case Lv2: return "lv2";
301301
case MacOSX: return "macosx";
302+
case Managarm:
303+
return "managarm";
302304
case Mesa3D: return "mesa3d";
303305
case NVCL: return "nvcl";
304306
case NaCl: return "nacl";
@@ -384,6 +386,8 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
384386
return "pauthtest";
385387
case LLVM:
386388
return "llvm";
389+
case Mlibc:
390+
return "mlibc";
387391
}
388392

389393
llvm_unreachable("Invalid EnvironmentType!");
@@ -678,6 +682,7 @@ static Triple::OSType parseOS(StringRef OSName) {
678682
.StartsWith("linux", Triple::Linux)
679683
.StartsWith("lv2", Triple::Lv2)
680684
.StartsWith("macos", Triple::MacOSX)
685+
.StartsWith("managarm", Triple::Managarm)
681686
.StartsWith("netbsd", Triple::NetBSD)
682687
.StartsWith("openbsd", Triple::OpenBSD)
683688
.StartsWith("solaris", Triple::Solaris)
@@ -766,6 +771,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
766771
.StartsWith("ohos", Triple::OpenHOS)
767772
.StartsWith("pauthtest", Triple::PAuthTest)
768773
.StartsWith("llvm", Triple::LLVM)
774+
.StartsWith("mlibc", Triple::Mlibc)
769775
.Default(Triple::UnknownEnvironment);
770776
}
771777

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,6 +1354,24 @@ TEST(TripleTest, ParsedIDs) {
13541354
EXPECT_EQ(Triple::UnknownOS, T.getOS());
13551355
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
13561356

1357+
T = Triple("aarch64-unknown-managarm-mlibc");
1358+
EXPECT_EQ(Triple::aarch64, T.getArch());
1359+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1360+
EXPECT_EQ(Triple::Managarm, T.getOS());
1361+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1362+
1363+
T = Triple("x86_64-unknown-managarm-mlibc");
1364+
EXPECT_EQ(Triple::x86_64, T.getArch());
1365+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1366+
EXPECT_EQ(Triple::Managarm, T.getOS());
1367+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1368+
1369+
T = Triple("riscv64-unknown-managarm-mlibc");
1370+
EXPECT_EQ(Triple::riscv64, T.getArch());
1371+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1372+
EXPECT_EQ(Triple::Managarm, T.getOS());
1373+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1374+
13571375
T = Triple("huh");
13581376
EXPECT_EQ(Triple::UnknownArch, T.getArch());
13591377
}

0 commit comments

Comments
 (0)