blob: 7220a8596021d3cb7e2be85305b80e1b91bcad7b [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <filesystem>
#include <iostream>
#include "flutter/fml/command_line.h"
#include "impeller/shader_archive/shader_archive_writer.h"
namespace impeller {
bool Main(const fml::CommandLine& command_line) {
ShaderArchiveWriter writer;
std::string output;
if (!command_line.GetOptionValue("output", &output)) {
std::cerr << "Output path not specified." << std::endl;
return false;
}
for (const auto& input : command_line.GetOptionValues("input")) {
if (!writer.AddShaderAtPath(std::string{input})) {
std::cerr << "Could not add shader at path: " << input << std::endl;
return false;
}
}
auto archive = writer.CreateMapping();
if (!archive) {
std::cerr << "Could not create shader archive." << std::endl;
return false;
}
auto current_directory =
fml::OpenDirectory(std::filesystem::current_path().string().c_str(),
false, fml::FilePermission::kReadWrite);
auto output_path =
std::filesystem::absolute(std::filesystem::current_path() / output);
if (!fml::WriteAtomically(current_directory, output_path.string().c_str(),
*archive)) {
std::cerr << "Could not write shader archive to path " << output
<< std::endl;
return false;
}
return true;
}
} // namespace impeller
int main(int argc, char const* argv[]) {
return impeller::Main(fml::CommandLineFromPlatformOrArgcArgv(argc, argv))
? EXIT_SUCCESS
: EXIT_FAILURE;
}