Index: clang/lib/Basic/Targets.cpp =================================================================== --- clang/lib/Basic/Targets.cpp +++ clang/lib/Basic/Targets.cpp @@ -345,6 +345,8 @@ return new RTEMSTargetInfo(Triple, Opts); case llvm::Triple::AIX: return new AIXPPC32TargetInfo(Triple, Opts); + case llvm::Triple::MorphOS: + return new MorphOSTargetInfo(Triple, Opts); default: return new PPC32TargetInfo(Triple, Opts); } Index: clang/lib/Basic/Targets/OSTargets.h =================================================================== --- clang/lib/Basic/Targets/OSTargets.h +++ clang/lib/Basic/Targets/OSTargets.h @@ -991,6 +991,37 @@ } }; +// MorphOS target +template +class LLVM_LIBRARY_VISIBILITY MorphOSTargetInfo : public OSTargetInfo { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + Builder.defineMacro("__MORPHOS__"); + Builder.defineMacro("__morphos__"); + Builder.defineMacro("__amigaos"); + Builder.defineMacro("__amigaos__"); + Builder.defineMacro("amigaos"); + Builder.defineMacro("AMIGA"); + Builder.defineMacro("_AMIGA"); + Builder.defineMacro("__AMIGA"); + Builder.defineMacro("__ELF__"); + Builder.defineMacro("_CALL_SYSV"); + Builder.defineMacro("libnix"); + Builder.defineMacro("__libnix"); + Builder.defineMacro("__libnix__"); + Builder.defineMacro("__saveds", "__attribute__((__saveds__))"); + } + +public: + MorphOSTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) + : OSTargetInfo(Triple, Opts) { + this->SizeType = TargetInfo::UnsignedInt; + this->IntPtrType = TargetInfo::SignedLong; + this->PtrDiffType = TargetInfo::SignedLong; + } +}; + } // namespace targets } // namespace clang #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H Index: clang/lib/Basic/Targets/PPC.h =================================================================== --- clang/lib/Basic/Targets/PPC.h +++ clang/lib/Basic/Targets/PPC.h @@ -522,6 +522,12 @@ using AIXTargetInfo::AIXTargetInfo; }; +class LLVM_LIBRARY_VISIBILITY MorphOSPPC32TargetInfo : + public MorphOSTargetInfo { +public: + using MorphOSTargetInfo::MorphOSTargetInfo; +}; + } // namespace targets } // namespace clang #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PPC_H