diff --git a/dmd/target.h b/dmd/target.h index f5c9aed0ad..b7e0d685c8 100644 --- a/dmd/target.h +++ b/dmd/target.h @@ -137,10 +137,11 @@ struct Target OS_FreeBSD = 0x10, OS_Solaris = 0x20, OS_DragonFlyBSD = 0x40, + OS_Hurd = 0x80, // Combination masks - all = OS_linux | OS_Windows | OS_OSX | OS_OpenBSD | OS_FreeBSD | OS_Solaris | OS_DragonFlyBSD, - Posix = OS_linux | OS_OSX | OS_OpenBSD | OS_FreeBSD | OS_Solaris | OS_DragonFlyBSD, + all = OS_linux | OS_Windows | OS_OSX | OS_OpenBSD | OS_FreeBSD | OS_Solaris | OS_DragonFlyBSD | OS_Hurd, + Posix = OS_linux | OS_OSX | OS_OpenBSD | OS_FreeBSD | OS_Solaris | OS_DragonFlyBSD | OS_Hurd, }; OS os; diff --git a/driver/linker-gcc.cpp b/driver/linker-gcc.cpp index 93cb97a492..c0e17b90e3 100644 --- a/driver/linker-gcc.cpp +++ b/driver/linker-gcc.cpp @@ -200,7 +200,8 @@ void ArgsBuilder::addLTOLinkFlags() { global.params.targetTriple->isOSFreeBSD() || global.params.targetTriple->isOSNetBSD() || global.params.targetTriple->isOSOpenBSD() || - global.params.targetTriple->isOSDragonFly()) { + global.params.targetTriple->isOSDragonFly() || + global.params.targetTriple->isOSHurd()) { // LLD supports LLVM LTO natively, do not add the plugin itself. // Otherwise, assume that ld.gold or ld.bfd is used with plugin support. addLTOGoldPluginFlags(!isLld); @@ -435,6 +436,7 @@ void ArgsBuilder::addCppStdlibLinkFlags(const llvm::Triple &triple) { case llvm::Triple::NetBSD: case llvm::Triple::OpenBSD: case llvm::Triple::DragonFly: + case llvm::Triple::Hurd: args.push_back("-lstdc++"); break; case llvm::Triple::Darwin: @@ -689,6 +691,7 @@ void ArgsBuilder::addDefaultPlatformLibs() { case llvm::Triple::NetBSD: case llvm::Triple::OpenBSD: case llvm::Triple::DragonFly: + case llvm::Triple::Hurd: addSoname = true; args.push_back("-lpthread"); args.push_back("-lm"); diff --git a/driver/main.cpp b/driver/main.cpp index df3637f55c..4ca48f4145 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -918,6 +918,13 @@ void registerPredefinedTargetVersions() { VersionCondition::addPredefinedGlobalIdent("CppRuntime_LLVM"); VersionCondition::addPredefinedGlobalIdent("CppRuntime_Clang"); // legacy break; + case llvm::Triple::Hurd: + VersionCondition::addPredefinedGlobalIdent("Hurd"); + VersionCondition::addPredefinedGlobalIdent("Posix"); + VersionCondition::addPredefinedGlobalIdent("CRuntime_Glibc"); + VersionCondition::addPredefinedGlobalIdent("CppRuntime_GNU"); + VersionCondition::addPredefinedGlobalIdent("CppRuntime_Gcc"); // legacy + break; default: if (triple.getEnvironment() == llvm::Triple::Android) { VersionCondition::addPredefinedGlobalIdent("Android"); diff --git a/gen/modules.cpp b/gen/modules.cpp index 41fcc777b3..591d873496 100644 --- a/gen/modules.cpp +++ b/gen/modules.cpp @@ -104,7 +104,7 @@ RegistryStyle getModuleRegistryStyle() { if (t.isOSWindows() || t.getEnvironment() == llvm::Triple::Android || t.isOSBinFormatWasm() || t.isOSDarwin() || t.isOSLinux() || t.isOSFreeBSD() || t.isOSNetBSD() || t.isOSOpenBSD() || - t.isOSDragonFly()) { + t.isOSDragonFly() || t.isOSHurd()) { return RegistryStyle::section; } diff --git a/gen/target.cpp b/gen/target.cpp index 16622a9922..ce044efbb2 100644 --- a/gen/target.cpp +++ b/gen/target.cpp @@ -149,6 +149,8 @@ void Target::_init(const Param ¶ms) { os = OS_DragonFlyBSD; } else if (triple.isOSSolaris()) { os = OS_Solaris; + } else if (triple.isOSHurd()) { + os = OS_Hurd; } else { os = OS_Freestanding; } diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index a203e1c56b..b24113f43c 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -94,7 +94,7 @@ else() endif() set(SHARED_LIBS_SUPPORTED OFF) -if("${TARGET_SYSTEM}" MATCHES "Windows|Linux|FreeBSD|DragonFly|APPLE") +if("${TARGET_SYSTEM}" MATCHES "Windows|Linux|FreeBSD|DragonFly|APPLE|GNU") set(SHARED_LIBS_SUPPORTED ON) endif() @@ -175,6 +175,7 @@ file(GLOB_RECURSE DRUNTIME_D_BIONIC ${RUNTIME_DIR}/src/core/sys/bionic/*.d) file(GLOB_RECURSE DRUNTIME_D_DARWIN ${RUNTIME_DIR}/src/core/sys/darwin/*.d) file(GLOB_RECURSE DRUNTIME_D_DRAGONFLYBSD ${RUNTIME_DIR}/src/core/sys/dragonflybsd/*.d) file(GLOB_RECURSE DRUNTIME_D_FREEBSD ${RUNTIME_DIR}/src/core/sys/freebsd/*.d) +file(GLOB_RECURSE DRUNTIME_D_HURD ${RUNTIME_DIR}/src/core/sys/hurd/*.d) file(GLOB_RECURSE DRUNTIME_D_LINUX ${RUNTIME_DIR}/src/core/sys/linux/*.d) file(GLOB_RECURSE DRUNTIME_D_NETBSD ${RUNTIME_DIR}/src/core/sys/netbsd/*.d) file(GLOB_RECURSE DRUNTIME_D_OPENBSD ${RUNTIME_DIR}/src/core/sys/openbsd/*.d) @@ -183,9 +184,9 @@ file(GLOB_RECURSE DRUNTIME_D_SOLARIS ${RUNTIME_DIR}/src/core/sys/solaris/*.d) file(GLOB_RECURSE DRUNTIME_D_WINDOWS ${RUNTIME_DIR}/src/core/sys/windows/*.d) list(REMOVE_ITEM DRUNTIME_D ${DRUNTIME_D_BIONIC} ${DRUNTIME_D_DARWIN} ${DRUNTIME_D_DRAGONFLYBSD} - ${DRUNTIME_D_FREEBSD} ${DRUNTIME_D_LINUX} ${DRUNTIME_D_NETBSD} - ${DRUNTIME_D_OPENBSD} ${DRUNTIME_D_POSIX} ${DRUNTIME_D_SOLARIS} - ${DRUNTIME_D_WINDOWS} + ${DRUNTIME_D_FREEBSD} ${DRUNTIME_D_HURD} ${DRUNTIME_D_LINUX} + ${DRUNTIME_D_NETBSD} ${DRUNTIME_D_OPENBSD} ${DRUNTIME_D_POSIX} + ${DRUNTIME_D_SOLARIS} ${DRUNTIME_D_WINDOWS} ) if("${TARGET_SYSTEM}" MATCHES "Windows") list(APPEND DRUNTIME_D ${DRUNTIME_D_WINDOWS}) @@ -206,6 +207,8 @@ elseif("${TARGET_SYSTEM}" MATCHES "UNIX") list(APPEND DRUNTIME_D ${DRUNTIME_D_OPENBSD}) elseif("${TARGET_SYSTEM}" MATCHES "SunOS") list(APPEND DRUNTIME_D ${DRUNTIME_D_SOLARIS}) + elseif("${TARGET_SYSTEM}" MATCHES "GNU") + list(APPEND DRUNTIME_D ${DRUNTIME_D_HURD}) endif() endif() diff --git a/runtime/druntime/src/rt/sections_ldc.d b/runtime/druntime/src/rt/sections_ldc.d index 8d42a10952..70d2cb3dc6 100644 --- a/runtime/druntime/src/rt/sections_ldc.d +++ b/runtime/druntime/src/rt/sections_ldc.d @@ -31,6 +31,7 @@ else version (FreeBSD) {} else version (DragonFlyBSD) {} else version (NetBSD) {} else version (OpenBSD) {} +else version (Hurd) {} else version (Windows) {} else version (LDC):