Skip to content

Commit 9d681fd

Browse files
committed
[llvm] Add managarm OS target
1 parent e8c4842 commit 9d681fd

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
@@ -29,7 +29,7 @@
2929

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

llvm/include/llvm/TargetParser/Triple.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ class Triple {
207207
Linux,
208208
Lv2, // PS3
209209
MacOSX,
210+
Managarm,
210211
NetBSD,
211212
OpenBSD,
212213
Solaris,
@@ -297,6 +298,7 @@ class Triple {
297298
Amplification,
298299
OpenCL,
299300
OpenHOS,
301+
Mlibc,
300302

301303
PAuthTest,
302304

@@ -821,6 +823,10 @@ class Triple {
821823

822824
bool isVulkanOS() const { return getOS() == Triple::Vulkan; }
823825

826+
bool isOSManagarm() const {
827+
return getOS() == Triple::Managarm;
828+
}
829+
824830
bool isShaderStageEnvironment() const {
825831
EnvironmentType Env = getEnvironment();
826832
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
@@ -74,7 +74,8 @@ extern char **environ;
7474

7575
#include <sys/types.h>
7676
#if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && \
77-
!defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(_AIX)
77+
!defined(__linux__) && !defined(__FreeBSD_kernel__) && !defined(_AIX) && \
78+
!defined(__managarm__)
7879
#include <sys/statvfs.h>
7980
#define STATVFS statvfs
8081
#define FSTATVFS fstatvfs
@@ -83,7 +84,7 @@ extern char **environ;
8384
#if defined(__OpenBSD__) || defined(__FreeBSD__)
8485
#include <sys/mount.h>
8586
#include <sys/param.h>
86-
#elif defined(__linux__)
87+
#elif defined(__linux__) || defined(__managarm__)
8788
#if defined(HAVE_LINUX_MAGIC_H)
8889
#include <linux/magic.h>
8990
#else
@@ -129,7 +130,8 @@ const file_t kInvalidFile = -1;
129130
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
130131
defined(__FreeBSD_kernel__) || defined(__linux__) || defined(__CYGWIN__) || \
131132
defined(__DragonFly__) || defined(_AIX) || defined(__GNU__) || \
132-
(defined(__sun__) && defined(__svr4__) || defined(__HAIKU__))
133+
(defined(__sun__) && defined(__svr4__) || defined(__HAIKU__)) || \
134+
defined(__managarm__)
133135
static int test_dir(char ret[PATH_MAX], const char *dir, const char *bin) {
134136
struct stat sb;
135137
char fullpath[PATH_MAX];
@@ -250,7 +252,8 @@ std::string getMainExecutable(const char *argv0, void *MainAddr) {
250252
// If we don't have procfs mounted, fall back to argv[0]
251253
if (getprogpath(exe_path, argv0) != NULL)
252254
return exe_path;
253-
#elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__)
255+
#elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__) || \
256+
defined(__managarm__)
254257
char exe_path[PATH_MAX];
255258
const char *aPath = "/proc/self/exe";
256259
if (sys::fs::exists(aPath)) {
@@ -477,7 +480,7 @@ std::error_code remove(const Twine &path, bool IgnoreNonExisting) {
477480
}
478481

479482
static bool is_local_impl(struct STATVFS &Vfs) {
480-
#if defined(__linux__) || defined(__GNU__)
483+
#if defined(__linux__) || defined(__GNU__) || defined(__managarm__)
481484
#ifndef NFS_SUPER_MAGIC
482485
#define NFS_SUPER_MAGIC 0x6969
483486
#endif

llvm/lib/TargetParser/Triple.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
277277
case Linux: return "linux";
278278
case Lv2: return "lv2";
279279
case MacOSX: return "macosx";
280+
case Managarm: return "managarm";
280281
case Mesa3D: return "mesa3d";
281282
case NVCL: return "nvcl";
282283
case NaCl: return "nacl";
@@ -360,6 +361,7 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
360361
case OpenHOS: return "ohos";
361362
case PAuthTest:
362363
return "pauthtest";
364+
case Mlibc: return "mlibc";
363365
}
364366

365367
llvm_unreachable("Invalid EnvironmentType!");
@@ -653,6 +655,7 @@ static Triple::OSType parseOS(StringRef OSName) {
653655
.StartsWith("linux", Triple::Linux)
654656
.StartsWith("lv2", Triple::Lv2)
655657
.StartsWith("macos", Triple::MacOSX)
658+
.StartsWith("managarm", Triple::Managarm)
656659
.StartsWith("netbsd", Triple::NetBSD)
657660
.StartsWith("openbsd", Triple::OpenBSD)
658661
.StartsWith("solaris", Triple::Solaris)
@@ -740,6 +743,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
740743
.StartsWith("opencl", Triple::OpenCL)
741744
.StartsWith("ohos", Triple::OpenHOS)
742745
.StartsWith("pauthtest", Triple::PAuthTest)
746+
.StartsWith("mlibc", Triple::Mlibc)
743747
.Default(Triple::UnknownEnvironment);
744748
}
745749

llvm/unittests/TargetParser/TripleTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,6 +1341,24 @@ TEST(TripleTest, ParsedIDs) {
13411341
EXPECT_TRUE(T.isTime64ABI());
13421342
EXPECT_TRUE(T.isHardFloatABI());
13431343

1344+
T = Triple("aarch64-unknown-managarm-mlibc");
1345+
EXPECT_EQ(Triple::aarch64, T.getArch());
1346+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1347+
EXPECT_EQ(Triple::Managarm, T.getOS());
1348+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1349+
1350+
T = Triple("x86_64-unknown-managarm-mlibc");
1351+
EXPECT_EQ(Triple::x86_64, T.getArch());
1352+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1353+
EXPECT_EQ(Triple::Managarm, T.getOS());
1354+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1355+
1356+
T = Triple("riscv64-unknown-managarm-mlibc");
1357+
EXPECT_EQ(Triple::riscv64, T.getArch());
1358+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1359+
EXPECT_EQ(Triple::Managarm, T.getOS());
1360+
EXPECT_EQ(Triple::Mlibc, T.getEnvironment());
1361+
13441362
T = Triple("huh");
13451363
EXPECT_EQ(Triple::UnknownArch, T.getArch());
13461364
}

0 commit comments

Comments
 (0)