llvm/clang/include/clang/Driver/Action.h

//===- Action.h - Abstract compilation steps --------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_DRIVER_ACTION_H
#define LLVM_CLANG_DRIVER_ACTION_H

#include "clang/Basic/LLVM.h"
#include "clang/Driver/Types.h"
#include "clang/Driver/Util.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator_range.h"
#include <string>

namespace llvm {
namespace opt {

class Arg;

} // namespace opt
} // namespace llvm

namespace clang {
namespace driver {

class ToolChain;

/// Action - Represent an abstract compilation step to perform.
///
/// An action represents an edge in the compilation graph; typically
/// it is a job to transform an input using some tool.
///
/// The current driver is hard wired to expect actions which produce a
/// single primary output, at least in terms of controlling the
/// compilation. Actions can produce auxiliary files, but can only
/// produce a single output to feed into subsequent actions.
///
/// Actions are usually owned by a Compilation, which creates new
/// actions via MakeAction().
class Action {};

class InputAction : public Action {};

class BindArchAction : public Action {};

/// An offload action combines host or/and device actions according to the
/// programming model implementation needs and propagates the offloading kind to
/// its dependences.
class OffloadAction final : public Action {};

class JobAction : public Action {};

class PreprocessJobAction : public JobAction {};

class PrecompileJobAction : public JobAction {};

class ExtractAPIJobAction : public JobAction {};

class AnalyzeJobAction : public JobAction {};

class MigrateJobAction : public JobAction {};

class CompileJobAction : public JobAction {};

class BackendJobAction : public JobAction {};

class AssembleJobAction : public JobAction {};

class IfsMergeJobAction : public JobAction {};

class LinkJobAction : public JobAction {};

class LipoJobAction : public JobAction {};

class DsymutilJobAction : public JobAction {};

class VerifyJobAction : public JobAction {};

class VerifyDebugInfoJobAction : public VerifyJobAction {};

class VerifyPCHJobAction : public VerifyJobAction {};

class OffloadBundlingJobAction : public JobAction {};

class OffloadUnbundlingJobAction final : public JobAction {};

class OffloadPackagerJobAction : public JobAction {};

class LinkerWrapperJobAction : public JobAction {};

class StaticLibJobAction : public JobAction {};

class BinaryAnalyzeJobAction : public JobAction {};

} // namespace driver
} // namespace clang

#endif // LLVM_CLANG_DRIVER_ACTION_H