mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:29:58 +00:00
ae65e281f3
to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
99 lines
3.3 KiB
C++
99 lines
3.3 KiB
C++
//===- llvm/Support/Host.h - Host machine characteristics --------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Methods for querying the nature of the host machine.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_SUPPORT_HOST_H
|
|
#define LLVM_SUPPORT_HOST_H
|
|
|
|
#include "llvm/ADT/StringMap.h"
|
|
|
|
#if defined(__linux__) || defined(__GNU__) || defined(__HAIKU__)
|
|
#include <endian.h>
|
|
#elif defined(_AIX)
|
|
#include <sys/machine.h>
|
|
#elif defined(__sun)
|
|
/* Solaris provides _BIG_ENDIAN/_LITTLE_ENDIAN selector in sys/types.h */
|
|
#include <sys/types.h>
|
|
#define BIG_ENDIAN 4321
|
|
#define LITTLE_ENDIAN 1234
|
|
#if defined(_BIG_ENDIAN)
|
|
#define BYTE_ORDER BIG_ENDIAN
|
|
#else
|
|
#define BYTE_ORDER LITTLE_ENDIAN
|
|
#endif
|
|
#else
|
|
#if !defined(BYTE_ORDER) && !defined(_WIN32)
|
|
#include <machine/endian.h>
|
|
#endif
|
|
#endif
|
|
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
namespace sys {
|
|
|
|
#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
|
|
constexpr bool IsBigEndianHost = true;
|
|
#else
|
|
constexpr bool IsBigEndianHost = false;
|
|
#endif
|
|
|
|
static const bool IsLittleEndianHost = !IsBigEndianHost;
|
|
|
|
/// getDefaultTargetTriple() - Return the default target triple the compiler
|
|
/// has been configured to produce code for.
|
|
///
|
|
/// The target triple is a string in the format of:
|
|
/// CPU_TYPE-VENDOR-OPERATING_SYSTEM
|
|
/// or
|
|
/// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM
|
|
std::string getDefaultTargetTriple();
|
|
|
|
/// getProcessTriple() - Return an appropriate target triple for generating
|
|
/// code to be loaded into the current process, e.g. when using the JIT.
|
|
std::string getProcessTriple();
|
|
|
|
/// getHostCPUName - Get the LLVM name for the host CPU. The particular format
|
|
/// of the name is target dependent, and suitable for passing as -mcpu to the
|
|
/// target which matches the host.
|
|
///
|
|
/// \return - The host CPU name, or empty if the CPU could not be determined.
|
|
StringRef getHostCPUName();
|
|
|
|
/// getHostCPUFeatures - Get the LLVM names for the host CPU features.
|
|
/// The particular format of the names are target dependent, and suitable for
|
|
/// passing as -mattr to the target which matches the host.
|
|
///
|
|
/// \param Features - A string mapping feature names to either
|
|
/// true (if enabled) or false (if disabled). This routine makes no guarantees
|
|
/// about exactly which features may appear in this map, except that they are
|
|
/// all valid LLVM feature names.
|
|
///
|
|
/// \return - True on success.
|
|
bool getHostCPUFeatures(StringMap<bool> &Features);
|
|
|
|
/// Get the number of physical cores (as opposed to logical cores returned
|
|
/// from thread::hardware_concurrency(), which includes hyperthreads).
|
|
/// Returns -1 if unknown for the current host system.
|
|
int getHostNumPhysicalCores();
|
|
|
|
namespace detail {
|
|
/// Helper functions to extract HostCPUName from /proc/cpuinfo on linux.
|
|
StringRef getHostCPUNameForPowerPC(StringRef ProcCpuinfoContent);
|
|
StringRef getHostCPUNameForARM(StringRef ProcCpuinfoContent);
|
|
StringRef getHostCPUNameForS390x(StringRef ProcCpuinfoContent);
|
|
StringRef getHostCPUNameForBPF();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|