From: Ted Kremenek Date: Mon, 3 Dec 2007 23:23:21 +0000 (+0000) Subject: For target processing, on non-Darwin systems instead of using the host triple, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aead472f941e9696030061a4f1806183523d0f36;p=clang For target processing, on non-Darwin systems instead of using the host triple, we default to "i386-apple-darwin". This is an interim solution. Removed processing of "linux" triples from Targets.cpp, since we don't have any sensical Linux target support (yet). Cleaned up error processing of targets; added better diagnostics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44560 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/Targets.cpp b/Driver/Targets.cpp index dbc0f7af09..07e0d620af 100644 --- a/Driver/Targets.cpp +++ b/Driver/Targets.cpp @@ -18,8 +18,6 @@ #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/CommandLine.h" -#include -#include using namespace clang; @@ -688,17 +686,8 @@ static TargetInfoImpl *CreateTarget(const std::string& T) { else if (T.find("bogusW16W16-") == 0) // For testing portability. return new LinuxTargetInfo(T); } - else { - // Make a copy of the triple that is all lowercase. - std::string T_lower(T); - std::transform(T_lower.begin(), T_lower.end(), - T_lower.begin(), (int(*)(int)) std::tolower); - if (T_lower.find("linux") != std::string::npos && IsX86(T)) - return new LinuxTargetInfo(T); - } - - assert (false && "Unknown target!"); + return NULL; } /// CreateTargetInfo - Return the set of target info objects as specified by @@ -709,11 +698,25 @@ TargetInfo *clang::CreateTargetInfo(const std::vector& triples, assert (!triples.empty() && "No target triple."); // Create the primary target and target info. - TargetInfo *TI = new TargetInfo(CreateTarget(triples[0]), &Diags); + TargetInfoImpl* PrimaryTarget = CreateTarget(triples[0]); + + if (!PrimaryTarget) + return NULL; + + TargetInfo *TI = new TargetInfo(PrimaryTarget, &Diags); // Add all secondary targets. - for (unsigned i = 1, e = triples.size(); i != e; ++i) + for (unsigned i = 1, e = triples.size(); i != e; ++i) { + TargetInfoImpl* SecondaryTarget = CreateTarget(triples[i]); + + if (!SecondaryTarget) { + fprintf (stderr, "Warning: secondary target '%s' unrecognized.\n", + triples[i].c_str()); + continue; + } + TI->AddSecondaryTarget(CreateTarget(triples[i])); + } return TI; } diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 139febeda1..0b04038b05 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -424,8 +424,14 @@ static void CreateTargetTriples(std::vector& triples) { // Initialize base triple. If a -triple option has been specified, use // that triple. Otherwise, default to the host triple. - if (TargetTriple.getValue().empty()) - base_triple = LLVM_HOSTTRIPLE; + if (TargetTriple.getValue().empty()) { + // HACK: For non-darwin systems, we don't have any real target support + // yet. For these systems, set the target to darwin. + if (!strstr("darwin",LLVM_HOSTTRIPLE)) + base_triple = "i386-apple-darwin"; + else + base_triple = LLVM_HOSTTRIPLE; + } else base_triple = TargetTriple.getValue(); @@ -991,12 +997,13 @@ int main(int argc, char **argv) { std::vector triples; CreateTargetTriples(triples); Target = CreateTargetInfo(triples,Diags); - } - if (Target == 0) { - fprintf(stderr, - "Sorry, don't know what target this is, please use -arch.\n"); - exit(1); + if (Target == 0) { + fprintf(stderr, "Sorry, I don't know what target this is: %s\n", + triples[0].c_str()); + fprintf(stderr, "Please use -triple or -arch.\n"); + exit(1); + } } // Process the -I options and set them in the HeaderInfo.