1 //===- llvm/System/Unix/Host.inc -------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the UNIX Host support.
12 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
15 //=== WARNING: Implementation here must contain only generic UNIX code that
16 //=== is guaranteed to work on *all* UNIX variants.
17 //===----------------------------------------------------------------------===//
19 #include <llvm/Config/config.h>
21 #include <sys/utsname.h>
26 static std::string getOSVersion() {
35 std::string sys::getHostTriple() {
36 // FIXME: Derive more directly instead of relying on the autoconf
37 // generated variable.
39 std::string Triple = LLVM_HOSTTRIPLE;
41 // Force i<N>86 to i386.
42 if (Triple[0] == 'i' && isdigit(Triple[1]) &&
43 Triple[2] == '8' && Triple[3] == '6')
46 // On darwin, we want to update the version to match that of the
48 std::string::size_type DarwinDashIdx = Triple.find("-darwin");
49 if (DarwinDashIdx != std::string::npos) {
50 Triple.resize(DarwinDashIdx + strlen("-darwin"));
52 // Only add the major part of the os version.
53 std::string Version = getOSVersion();
54 Triple += Version.substr(0, Version.find('.'));