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 | 4871c4739db4a71fdbe0641ed4de5363034072ac (patch) | |
| tree | 9009d752e59de87539716f760be16288cd1419f4 | |
| parent | 1c37d9eed5db48e5190d48698c485f2f4be07fe6 (diff) | |
| download | bcm5719-llvm-4871c4739db4a71fdbe0641ed4de5363034072ac.tar.gz bcm5719-llvm-4871c4739db4a71fdbe0641ed4de5363034072ac.zip | |
Improve target support for Solaris.
llvm-svn: 72237
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index f1a84b459c0..281dfa7a077 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/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); |

