123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- InitLLVM.h -----------------------------------------------*- 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_SUPPORT_INITLLVM_H
- #define LLVM_SUPPORT_INITLLVM_H
- #include "llvm/ADT/Optional.h"
- #include "llvm/ADT/SmallVector.h"
- #include "llvm/Support/Allocator.h"
- #include "llvm/Support/PrettyStackTrace.h"
- // The main() functions in typical LLVM tools start with InitLLVM which does
- // the following one-time initializations:
- //
- // 1. Setting up a signal handler so that pretty stack trace is printed out
- // if a process crashes. A signal handler that exits when a failed write to
- // a pipe occurs may optionally be installed: this is on-by-default.
- //
- // 2. Set up the global new-handler which is called when a memory allocation
- // attempt fails.
- //
- // 3. If running on Windows, obtain command line arguments using a
- // multibyte character-aware API and convert arguments into UTF-8
- // encoding, so that you can assume that command line arguments are
- // always encoded in UTF-8 on any platform.
- //
- // InitLLVM calls llvm_shutdown() on destruction, which cleans up
- // ManagedStatic objects.
- namespace llvm {
- class InitLLVM {
- public:
- InitLLVM(int &Argc, const char **&Argv,
- bool InstallPipeSignalExitHandler = true);
- InitLLVM(int &Argc, char **&Argv, bool InstallPipeSignalExitHandler = true)
- : InitLLVM(Argc, const_cast<const char **&>(Argv),
- InstallPipeSignalExitHandler) {}
- ~InitLLVM();
- private:
- BumpPtrAllocator Alloc;
- SmallVector<const char *, 0> Args;
- Optional<PrettyStackTraceProgram> StackPrinter;
- };
- } // namespace llvm
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|