diff options
Diffstat (limited to 'src/tools/launcher/launcher_main.cc')
-rw-r--r-- | src/tools/launcher/launcher_main.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/tools/launcher/launcher_main.cc b/src/tools/launcher/launcher_main.cc new file mode 100644 index 0000000000..6f9133b6f2 --- /dev/null +++ b/src/tools/launcher/launcher_main.cc @@ -0,0 +1,63 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <memory> + +#include "src/tools/launcher/bash_launcher.h" +#include "src/tools/launcher/java_launcher.h" +#include "src/tools/launcher/launcher.h" +#include "src/tools/launcher/python_launcher.h" +#include "src/tools/launcher/util/data_parser.h" +#include "src/tools/launcher/util/launcher_util.h" + +static constexpr const char* BINARY_TYPE = "binary_type"; + +using bazel::launcher::BashBinaryLauncher; +using bazel::launcher::BinaryLauncherBase; +using bazel::launcher::GetBinaryPathWithExtension; +using bazel::launcher::JavaBinaryLauncher; +using bazel::launcher::LaunchDataParser; +using bazel::launcher::PythonBinaryLauncher; +using bazel::launcher::die; +using std::make_unique; +using std::unique_ptr; + +int main(int argc, char* argv[]) { + LaunchDataParser::LaunchInfo launch_info; + + if (!LaunchDataParser::GetLaunchInfo(GetBinaryPathWithExtension(argv[0]), + &launch_info)) { + die("Failed to parse launch info."); + } + + auto result = launch_info.find(BINARY_TYPE); + if (result == launch_info.end()) { + die("Cannot find key \"%s\" from launch data.", BINARY_TYPE); + } + + unique_ptr<BinaryLauncherBase> binary_launcher; + + if (result->second == "Python") { + binary_launcher = + make_unique<PythonBinaryLauncher>(launch_info, argc, argv); + } else if (result->second == "Bash") { + binary_launcher = make_unique<BashBinaryLauncher>(launch_info, argc, argv); + } else if (result->second == "Java") { + binary_launcher = make_unique<JavaBinaryLauncher>(launch_info, argc, argv); + } else { + die("Unknown binary type, cannot launch anything."); + } + + return binary_launcher->Launch(); +} |