static ToolChain::RTTIMode CalculateRTTIMode(const ArgList &Args, const llvm::Triple &Triple, const Arg *CachedRTTIArg) { // Explicit rtti/no-rtti args if (CachedRTTIArg) { if (CachedRTTIArg->getOption().matches(options::OPT_frtti)) return ToolChain::RM_EnabledExplicitly; else return ToolChain::RM_DisabledExplicitly; } // -frtti is default, except for the PS4 CPU. if (!Triple.isPS4CPU()) return ToolChain::RM_EnabledImplicitly; // On the PS4, turning on c++ exceptions turns on rtti. // We're assuming that, if we see -fexceptions, rtti gets turned on. Arg *Exceptions = Args.getLastArgNoClaim( options::OPT_fcxx_exceptions, options::OPT_fno_cxx_exceptions, options::OPT_fexceptions, options::OPT_fno_exceptions); if (Exceptions && (Exceptions->getOption().matches(options::OPT_fexceptions) || Exceptions->getOption().matches(options::OPT_fcxx_exceptions))) return ToolChain::RM_EnabledImplicitly; return ToolChain::RM_DisabledImplicitly; }
static ToolChain::RTTIMode CalculateRTTIMode(const ArgList &Args, const llvm::Triple &Triple, const Arg *CachedRTTIArg) { // Explicit rtti/no-rtti args if (CachedRTTIArg) { if (CachedRTTIArg->getOption().matches(options::OPT_frtti)) return ToolChain::RM_Enabled; else return ToolChain::RM_Disabled; } // -frtti is default, except for the PS4 CPU. return (Triple.isPS4CPU()) ? ToolChain::RM_Disabled : ToolChain::RM_Enabled; }
void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, const HeaderSearchOptions &HSOpts) { llvm::Triple::OSType os = triple.getOS(); if (HSOpts.UseStandardSystemIncludes) { switch (os) { case llvm::Triple::CloudABI: case llvm::Triple::FreeBSD: case llvm::Triple::NetBSD: case llvm::Triple::OpenBSD: case llvm::Triple::NaCl: case llvm::Triple::PS4: case llvm::Triple::ELFIAMCU: break; case llvm::Triple::Win32: if (triple.getEnvironment() != llvm::Triple::Cygnus) break; LLVM_FALLTHROUGH; default: // FIXME: temporary hack: hard-coded paths. AddPath("/usr/local/include", System, false); break; } } // Builtin includes use #include_next directives and should be positioned // just prior C include dirs. if (HSOpts.UseBuiltinIncludes) { // Ignore the sys root, we *always* look for clang headers relative to // supplied path. SmallString<128> P = StringRef(HSOpts.ResourceDir); llvm::sys::path::append(P, "include"); AddUnmappedPath(P, ExternCSystem, false); } // All remaining additions are for system include directories, early exit if // we aren't using them. if (!HSOpts.UseStandardSystemIncludes) return; // Add dirs specified via 'configure --with-c-include-dirs'. StringRef CIncludeDirs(C_INCLUDE_DIRS); if (CIncludeDirs != "") { SmallVector<StringRef, 5> dirs; CIncludeDirs.split(dirs, ":"); for (StringRef dir : dirs) AddPath(dir, ExternCSystem, false); return; } switch (os) { case llvm::Triple::Linux: case llvm::Triple::Solaris: llvm_unreachable("Include management is handled in the driver."); case llvm::Triple::CloudABI: { // <sysroot>/<triple>/include SmallString<128> P = StringRef(HSOpts.ResourceDir); llvm::sys::path::append(P, "../../..", triple.str(), "include"); AddPath(P, System, false); break; } case llvm::Triple::Haiku: AddPath("/boot/system/non-packaged/develop/headers", System, false); AddPath("/boot/system/develop/headers/os", System, false); AddPath("/boot/system/develop/headers/os/app", System, false); AddPath("/boot/system/develop/headers/os/arch", System, false); AddPath("/boot/system/develop/headers/os/device", System, false); AddPath("/boot/system/develop/headers/os/drivers", System, false); AddPath("/boot/system/develop/headers/os/game", System, false); AddPath("/boot/system/develop/headers/os/interface", System, false); AddPath("/boot/system/develop/headers/os/kernel", System, false); AddPath("/boot/system/develop/headers/os/locale", System, false); AddPath("/boot/system/develop/headers/os/mail", System, false); AddPath("/boot/system/develop/headers/os/media", System, false); AddPath("/boot/system/develop/headers/os/midi", System, false); AddPath("/boot/system/develop/headers/os/midi2", System, false); AddPath("/boot/system/develop/headers/os/net", System, false); AddPath("/boot/system/develop/headers/os/opengl", System, false); AddPath("/boot/system/develop/headers/os/storage", System, false); AddPath("/boot/system/develop/headers/os/support", System, false); AddPath("/boot/system/develop/headers/os/translation", System, false); AddPath("/boot/system/develop/headers/os/add-ons/graphics", System, false); AddPath("/boot/system/develop/headers/os/add-ons/input_server", System, false); AddPath("/boot/system/develop/headers/os/add-ons/mail_daemon", System, false); AddPath("/boot/system/develop/headers/os/add-ons/registrar", System, false); AddPath("/boot/system/develop/headers/os/add-ons/screen_saver", System, false); AddPath("/boot/system/develop/headers/os/add-ons/tracker", System, false); AddPath("/boot/system/develop/headers/os/be_apps/Deskbar", System, false); AddPath("/boot/system/develop/headers/os/be_apps/NetPositive", System, false); AddPath("/boot/system/develop/headers/os/be_apps/Tracker", System, false); AddPath("/boot/system/develop/headers/3rdparty", System, false); AddPath("/boot/system/develop/headers/bsd", System, false); AddPath("/boot/system/develop/headers/glibc", System, false); AddPath("/boot/system/develop/headers/posix", System, false); AddPath("/boot/system/develop/headers", System, false); break; case llvm::Triple::RTEMS: break; case llvm::Triple::Win32: switch (triple.getEnvironment()) { default: llvm_unreachable("Include management is handled in the driver."); case llvm::Triple::Cygnus: AddPath("/usr/include/w32api", System, false); break; case llvm::Triple::GNU: break; } break; default: break; } switch (os) { case llvm::Triple::CloudABI: case llvm::Triple::RTEMS: case llvm::Triple::NaCl: case llvm::Triple::ELFIAMCU: break; case llvm::Triple::PS4: { // <isysroot> gets prepended later in AddPath(). std::string BaseSDKPath = ""; if (!HasSysroot) { const char *envValue = getenv("SCE_ORBIS_SDK_DIR"); if (envValue) BaseSDKPath = envValue; else { // HSOpts.ResourceDir variable contains the location of Clang's // resource files. // Assuming that Clang is configured for PS4 without // --with-clang-resource-dir option, the location of Clang's resource // files is <SDK_DIR>/host_tools/lib/clang SmallString<128> P = StringRef(HSOpts.ResourceDir); llvm::sys::path::append(P, "../../.."); BaseSDKPath = P.str(); } } AddPath(BaseSDKPath + "/target/include", System, false); if (triple.isPS4CPU()) AddPath(BaseSDKPath + "/target/include_common", System, false); LLVM_FALLTHROUGH; } default: AddPath("/usr/include", ExternCSystem, false); break; } }