1317019Sdim//===--- AVR.h - AVR Tool and ToolChain Implementations ---------*- C++ -*-===// 2317019Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317019Sdim// 7317019Sdim//===----------------------------------------------------------------------===// 8317019Sdim 9317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AVR_H 10317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AVR_H 11317019Sdim 12317019Sdim#include "Gnu.h" 13317019Sdim#include "InputInfo.h" 14317019Sdim#include "clang/Driver/ToolChain.h" 15317019Sdim#include "clang/Driver/Tool.h" 16317019Sdim 17317019Sdimnamespace clang { 18317019Sdimnamespace driver { 19317019Sdimnamespace toolchains { 20317019Sdim 21317019Sdimclass LLVM_LIBRARY_VISIBILITY AVRToolChain : public Generic_ELF { 22317019Sdimpublic: 23317019Sdim AVRToolChain(const Driver &D, const llvm::Triple &Triple, 24317019Sdim const llvm::opt::ArgList &Args); 25353358Sdim 26353358Sdimprotected: 27353358Sdim Tool *buildLinker() const override; 28353358Sdim 29353358Sdimprivate: 30353358Sdim /// Whether libgcc, libct, and friends should be linked. 31353358Sdim /// 32353358Sdim /// This is not done if the user does not specify a 33353358Sdim /// microcontroller on the command line. 34353358Sdim bool LinkStdlib; 35353358Sdim 36353358Sdim llvm::Optional<std::string> findAVRLibcInstallation() const; 37317019Sdim}; 38317019Sdim 39317019Sdim} // end namespace toolchains 40317019Sdim 41317019Sdimnamespace tools { 42317019Sdimnamespace AVR { 43317019Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { 44317019Sdimpublic: 45353358Sdim Linker(const llvm::Triple &Triple, const ToolChain &TC, bool LinkStdlib) 46353358Sdim : GnuTool("AVR::Linker", "avr-ld", TC), Triple(Triple), 47353358Sdim LinkStdlib(LinkStdlib) {} 48353358Sdim 49317019Sdim bool hasIntegratedCPP() const override { return false; } 50317019Sdim bool isLinkJob() const override { return true; } 51317019Sdim void ConstructJob(Compilation &C, const JobAction &JA, 52317019Sdim const InputInfo &Output, const InputInfoList &Inputs, 53317019Sdim const llvm::opt::ArgList &TCArgs, 54317019Sdim const char *LinkingOutput) const override; 55353358Sdim 56353358Sdimprotected: 57353358Sdim const llvm::Triple &Triple; 58353358Sdim bool LinkStdlib; 59317019Sdim}; 60317019Sdim} // end namespace AVR 61317019Sdim} // end namespace tools 62317019Sdim} // end namespace driver 63317019Sdim} // end namespace clang 64317019Sdim 65317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AVR_H 66