| // 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 <cstdint> |
| #include <filesystem> |
| #include <fstream> |
| #include <iostream> |
| #include <vector> |
| |
| #include "third_party/swiftshader/third_party/SPIRV-Tools/include/spirv-tools/libspirv.hpp" |
| |
| namespace fs = std::filesystem; |
| |
| int main(int argc, const char* argv[]) { |
| if (argc != 3) { |
| std::cerr << "Invalid argument count." << std::endl; |
| return -1; |
| } |
| |
| fs::path path(argv[1]); |
| if (!fs::exists(path)) { |
| std::cerr << "File does not exist." << std::endl; |
| return -1; |
| } |
| |
| std::fstream input; |
| input.open(argv[1]); |
| input.seekg(0, std::ios::end); |
| std::streampos size = input.tellg(); |
| input.seekg(0, std::ios::beg); |
| std::vector<char> buf(size); |
| input.read(buf.data(), size); |
| input.close(); |
| |
| spvtools::SpirvTools tools(SPV_ENV_UNIVERSAL_1_0); |
| std::vector<uint32_t> assembled_spirv; |
| if (!tools.Assemble(buf.data(), size, &assembled_spirv)) { |
| std::cerr << "Failed to assemble " << argv[1] << std::endl; |
| return -1; |
| } |
| |
| std::fstream output; |
| output.open(argv[2], std::fstream::out | std::fstream::trunc); |
| if (!output.is_open()) { |
| output.close(); |
| std::cerr << "failed to open output file" << std::endl; |
| std::abort(); |
| } |
| |
| output.write(reinterpret_cast<const char*>(assembled_spirv.data()), |
| sizeof(uint32_t) * assembled_spirv.size()); |
| output.close(); |
| return 0; |
| } |