mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
4a9804a938
This will fix cross-compiling buildbots (e.g. cygwin). This is in the same vein as SVN r205070. Apply this to fix the cross-compiling scenario, even though the preferred solution is to update the build system to normalize the embedded triple rather than perform this at runtime every time. This is meant to tide us over until that approach is fleshed out and applied. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205120 91177308-0d34-0410-b5e6-96231b3b80d8
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
//===- llvm/Support/Unix/Host.inc -------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the UNIX Host support.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//=== WARNING: Implementation here must contain only generic UNIX code that
|
|
//=== is guaranteed to work on *all* UNIX variants.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Config/config.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "Unix.h"
|
|
#include <sys/utsname.h>
|
|
#include <cctype>
|
|
#include <string>
|
|
#include <cstdlib> // ::getenv
|
|
|
|
using namespace llvm;
|
|
|
|
static std::string getOSVersion() {
|
|
struct utsname info;
|
|
|
|
if (uname(&info))
|
|
return "";
|
|
|
|
return info.release;
|
|
}
|
|
|
|
std::string sys::getDefaultTargetTriple() {
|
|
StringRef TargetTripleString(LLVM_DEFAULT_TARGET_TRIPLE);
|
|
std::pair<StringRef, StringRef> ArchSplit = TargetTripleString.split('-');
|
|
|
|
// Normalize the arch, since the target triple may not actually match the target.
|
|
std::string Arch = ArchSplit.first;
|
|
|
|
std::string Triple(Arch);
|
|
Triple += '-';
|
|
Triple += ArchSplit.second;
|
|
|
|
// Force i<N>86 to i386.
|
|
if (Triple[0] == 'i' && isdigit(Triple[1]) &&
|
|
Triple[2] == '8' && Triple[3] == '6')
|
|
Triple[1] = '3';
|
|
|
|
// On darwin, we want to update the version to match that of the
|
|
// target.
|
|
std::string::size_type DarwinDashIdx = Triple.find("-darwin");
|
|
if (DarwinDashIdx != std::string::npos) {
|
|
Triple.resize(DarwinDashIdx + strlen("-darwin"));
|
|
Triple += getOSVersion();
|
|
}
|
|
|
|
return Triple::normalize(Triple);
|
|
}
|