You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.3 KiB
128 lines
4.3 KiB
4 months ago
|
// Copyright (c) 2014-2019 The Khronos Group Inc.
|
||
|
//
|
||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
// of this software and/or associated documentation files (the "Materials"),
|
||
|
// to deal in the Materials without restriction, including without limitation
|
||
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||
|
// and/or sell copies of the Materials, and to permit persons to whom the
|
||
|
// Materials are furnished to do so, subject to the following conditions:
|
||
|
//
|
||
|
// The above copyright notice and this permission notice shall be included in
|
||
|
// all copies or substantial portions of the Materials.
|
||
|
//
|
||
|
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
|
||
|
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
|
||
|
// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
|
||
|
//
|
||
|
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
|
// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
|
||
|
// IN THE MATERIALS.
|
||
|
|
||
|
//#include <fstream>
|
||
|
#include <string>
|
||
|
#include <algorithm>
|
||
|
|
||
|
#include "jsonToSpirv.h"
|
||
|
#include "header.h"
|
||
|
|
||
|
// Command-line options
|
||
|
enum TOptions {
|
||
|
EOptionNone = 0x000,
|
||
|
EOptionPrintHeader = 0x008,
|
||
|
};
|
||
|
|
||
|
std::string jsonPath;
|
||
|
int Options;
|
||
|
spv::TLanguage Language;
|
||
|
|
||
|
void Usage()
|
||
|
{
|
||
|
printf("Usage: spirv option [file]\n"
|
||
|
"\n"
|
||
|
" -h <language> print header for given language to stdout, from one of:\n"
|
||
|
" C - C99 header\n"
|
||
|
" C++ - C++03 or greater header (also accepts C++03)\n"
|
||
|
" C++11 - C++11 or greater header\n"
|
||
|
" JSON - JSON format data\n"
|
||
|
" Lua - Lua module\n"
|
||
|
" Python - Python module (also accepts Py)\n"
|
||
|
" C# - C# module (also accepts CSharp)\n"
|
||
|
" D - D module\n"
|
||
|
" -H print header in all supported languages to files in current directory\n"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
std::string tolower_s(std::string s)
|
||
|
{
|
||
|
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
bool ProcessArguments(int argc, char* argv[])
|
||
|
{
|
||
|
argc--;
|
||
|
argv++;
|
||
|
for (; argc >= 1; argc--, argv++) {
|
||
|
if (argv[0][0] == '-') {
|
||
|
switch (argv[0][1]) {
|
||
|
case 'H':
|
||
|
Options |= EOptionPrintHeader;
|
||
|
Language = spv::ELangAll;
|
||
|
break;
|
||
|
case 'h': {
|
||
|
if (argc < 2)
|
||
|
return false;
|
||
|
|
||
|
Options |= EOptionPrintHeader;
|
||
|
const std::string language(tolower_s(argv[1]));
|
||
|
|
||
|
if (language == "c") {
|
||
|
Language = spv::ELangC;
|
||
|
} else if (language == "c++" || language == "c++03") {
|
||
|
Language = spv::ELangCPP;
|
||
|
} else if (language == "c++11") {
|
||
|
Language = spv::ELangCPP11;
|
||
|
} else if (language == "json") {
|
||
|
Language = spv::ELangJSON;
|
||
|
} else if (language == "lua") {
|
||
|
Language = spv::ELangLua;
|
||
|
} else if (language == "python" || language == "py") {
|
||
|
Language = spv::ELangPython;
|
||
|
} else if (language == "c#" || language == "csharp") {
|
||
|
Language = spv::ELangCSharp;
|
||
|
} else if (language == "d") {
|
||
|
Language = spv::ELangD;
|
||
|
} else
|
||
|
return false;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
default:
|
||
|
return false;
|
||
|
}
|
||
|
} else {
|
||
|
jsonPath = std::string(argv[0]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char* argv[])
|
||
|
{
|
||
|
if (argc < 2 || ! ProcessArguments(argc, argv)) {
|
||
|
Usage();
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
spv::jsonToSpirv(jsonPath, (Options & EOptionPrintHeader) != 0);
|
||
|
if (Options & EOptionPrintHeader)
|
||
|
spv::PrintHeader(Language, std::cout);
|
||
|
|
||
|
return 0;
|
||
|
}
|