diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-05-21 23:51:30 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-05-21 23:51:30 +0000 |
commit | 163a7c79eaa9eff7d4ced3e4b62baa628b9538b1 (patch) | |
tree | 849b3c903e8262d1de907f97c2ca525cf551e1e5 /lib/Basic/Targets.cpp | |
parent | 690dc7f4f2c0fe87409839b7560c19dee7832195 (diff) |
Improve target support for Solaris.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72237 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r-- | lib/Basic/Targets.cpp | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index f1a84b459c..281dfa7a07 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -63,9 +63,10 @@ static void DefineStd(std::vector<char> &Buf, const char *MacroName, // Defines specific to certain operating systems. //===----------------------------------------------------------------------===// -static void getSolarisDefines(std::vector<char> &Defs) { - Define(Defs, "__SUN__"); - Define(Defs, "__SOLARIS__"); +static void getSolarisDefines(const LangOptions &Opts, std::vector<char> &Defs) { + DefineStd(Defs, "sun", Opts); + DefineStd(Defs, "unix", Opts); + Define(Defs, "__ELF__", "1"); } static void getFreeBSDDefines(const LangOptions &Opts, bool is64Bit, @@ -886,6 +887,23 @@ public: } // end anonymous namespace namespace { +// x86-32 Solaris target +class SolarisX86_32TargetInfo : public X86_32TargetInfo { +public: + SolarisX86_32TargetInfo(const std::string& triple) : X86_32TargetInfo(triple) { + UserLabelPrefix = ""; + WCharType = WCharType = SignedLong; + } + virtual void getTargetDefines(const LangOptions &Opts, + std::vector<char> &Defines) const { + X86_32TargetInfo::getTargetDefines(Opts, Defines); + getSolarisDefines(Opts, Defines); + } +}; +} // end anonymous namespace + + +namespace { // x86-32 Windows target class WindowsX86_32TargetInfo : public X86_32TargetInfo { public: @@ -967,6 +985,22 @@ public: } // end anonymous namespace namespace { +// x86-64 Solaris target +class SolarisX86_64TargetInfo : public X86_64TargetInfo { +public: + SolarisX86_64TargetInfo(const std::string& triple) : X86_64TargetInfo(triple) { + UserLabelPrefix = ""; + WCharType = WCharType = SignedLong; + } + virtual void getTargetDefines(const LangOptions &Opts, + std::vector<char> &Defines) const { + X86_64TargetInfo::getTargetDefines(Opts, Defines); + getSolarisDefines(Opts, Defines); + } +}; +} // end anonymous namespace + +namespace { // x86-64 Darwin (OS X) target class DarwinX86_64TargetInfo : public X86_64TargetInfo { public: @@ -1246,7 +1280,7 @@ public: virtual void getTargetDefines(const LangOptions &Opts, std::vector<char> &Defines) const { SparcV8TargetInfo::getTargetDefines(Opts, Defines); - getSolarisDefines(Defines); + getSolarisDefines(Opts, Defines); } }; } // end anonymous namespace. @@ -1420,6 +1454,8 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { return new LinuxX86_64TargetInfo(T); if (isFreeBSD) return new FreeBSDX86_64TargetInfo(T); + if (isSolaris) + return new SolarisX86_64TargetInfo(T); return new X86_64TargetInfo(T); } @@ -1438,6 +1474,8 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { return new DragonFlyX86_32TargetInfo(T); if (isFreeBSD) return new FreeBSDX86_32TargetInfo(T); + if (isSolaris) + return new SolarisX86_32TargetInfo(T); if (isWindows) return new WindowsX86_32TargetInfo(T); return new X86_32TargetInfo(T); |