1 //===--- TargetExecutionUtils.cpp - Execution utils for target processes --===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.h"
16 int runAsMain(int (*Main
)(int, char *[]), ArrayRef
<std::string
> Args
,
17 Optional
<StringRef
> ProgramName
) {
18 std::vector
<std::unique_ptr
<char[]>> ArgVStorage
;
19 std::vector
<char *> ArgV
;
21 ArgVStorage
.reserve(Args
.size() + (ProgramName
? 1 : 0));
22 ArgV
.reserve(Args
.size() + 1 + (ProgramName
? 1 : 0));
25 ArgVStorage
.push_back(std::make_unique
<char[]>(ProgramName
->size() + 1));
26 llvm::copy(*ProgramName
, &ArgVStorage
.back()[0]);
27 ArgVStorage
.back()[ProgramName
->size()] = '\0';
28 ArgV
.push_back(ArgVStorage
.back().get());
31 for (const auto &Arg
: Args
) {
32 ArgVStorage
.push_back(std::make_unique
<char[]>(Arg
.size() + 1));
33 llvm::copy(Arg
, &ArgVStorage
.back()[0]);
34 ArgVStorage
.back()[Arg
.size()] = '\0';
35 ArgV
.push_back(ArgVStorage
.back().get());
37 ArgV
.push_back(nullptr);
39 return Main(Args
.size() + !!ProgramName
, ArgV
.data());
42 } // End namespace orc.
43 } // End namespace llvm.