Author: aturetsk Date: Tue Apr 19 10:50:57 2016 New Revision: 266747 URL: http://llvm.org/viewvc/llvm-project?rev=266747&view=rev Log: Compilation for Intel MCU (Part 1/3)
Add -miamcu option which: * Sets IAMCU triple * Sets IAMCU ABI * Enforces static compilation Differential Revision: http://reviews.llvm.org/D18398 Added: cfe/trunk/test/Driver/miamcu-opt.c (with props) Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266747&r1=266746&r2=266747&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 19 10:50:57 2016 @@ -1292,6 +1292,8 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>; +def miamcu : Flag<["-"], "miamcu">, Group<m_Group>, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group<clang_ignored_m_Group>; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group<clang_ignored_m_Group>; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group<clang_ignored_m_Group>; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=266747&r1=266746&r2=266747&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 19 10:50:57 2016 @@ -278,6 +278,10 @@ DerivedArgList *Driver::TranslateInputAr DAL->append(A); } + // Enforce -static if -miamcu is present. + if (Args.hasArg(options::OPT_miamcu)) + DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -296,7 +300,8 @@ DerivedArgList *Driver::TranslateInputAr /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(const Driver &D, + StringRef DefaultTargetTriple, const ArgList &Args, StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -341,8 +346,9 @@ static llvm::Triple computeTargetTriple( return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16)) { + Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16); + if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -367,6 +373,25 @@ static llvm::Triple computeTargetTriple( Target.setArch(AT); } + // Handle -miamcu flag. + if (Args.hasArg(options::OPT_miamcu)) { + if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + + if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + + Target.setArch(llvm::Triple::x86); + Target.setArchName("i586"); + Target.setEnvironment(llvm::Triple::UnknownEnvironment); + Target.setEnvironmentName(""); + Target.setOS(llvm::Triple::ELFIAMCU); + Target.setVendor(llvm::Triple::UnknownVendor); + Target.setVendorName("intel"); + } + return Target; } @@ -501,8 +526,8 @@ Compilation *Driver::BuildCompilation(Ar DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain &TC = - getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); + const ToolChain &TC = getToolChain( + *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); @@ -1981,9 +2006,9 @@ InputInfo Driver::BuildJobsForActionNoCa const char *ArchName = BAA->getArchName(); if (ArchName) - TC = &getToolChain( - C.getArgs(), - computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName)); + TC = &getToolChain(C.getArgs(), + computeTargetTriple(*this, DefaultTargetTriple, + C.getArgs(), ArchName)); else TC = &C.getDefaultToolChain(); Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=266747&r1=266746&r2=266747&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Tue Apr 19 10:50:57 2016 @@ -2137,6 +2137,13 @@ void Clang::AddX86TargetArgs(const ArgLi << A->getOption().getName() << Value; } } + + // Set flags to support MCU ABI. + if (Args.hasArg(options::OPT_miamcu)) { + CmdArgs.push_back("-mfloat-abi"); + CmdArgs.push_back("soft"); + CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList &Args, Added: cfe/trunk/test/Driver/miamcu-opt.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/miamcu-opt.c?rev=266747&view=auto ============================================================================== --- cfe/trunk/test/Driver/miamcu-opt.c (added) +++ cfe/trunk/test/Driver/miamcu-opt.c Tue Apr 19 10:50:57 2016 @@ -0,0 +1,21 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m32 %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 +// RUN: %clang -miamcu -dynamic %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=DYNAMIC +// RUN: %clang -miamcu -target armv8-eabi %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86 + +// M64: error: invalid argument '-miamcu' not allowed with '-m64' + +// DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static' + +// NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' + +// CHECK: "-cc1" +// CHECK: "-triple" "i586-intel-elfiamcu" +// CHECK: "-static-define" +// CHECK: "-mfloat-abi" "soft" +// CHECK: "-mstack-alignment=4" + +// CHECK: bin/gcc +// CHECK: "-static" Propchange: cfe/trunk/test/Driver/miamcu-opt.c ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cfe/trunk/test/Driver/miamcu-opt.c ------------------------------------------------------------------------------ svn:keywords = Author Date Id Rev URL Propchange: cfe/trunk/test/Driver/miamcu-opt.c ------------------------------------------------------------------------------ svn:mime-type = text/plain _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits