summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/platform/gui.cpp9
-rw-r--r--tools/slang-embed/slang-embed.cpp26
-rw-r--r--tools/slang-generate/main.cpp46
-rw-r--r--tools/slang-spirv-embed-generator/spirv-embed-generator-main.cpp14
-rw-r--r--tools/slang-test/README.md8
-rw-r--r--tools/test-server/test-server-main.cpp4
6 files changed, 71 insertions, 36 deletions
diff --git a/tools/platform/gui.cpp b/tools/platform/gui.cpp
index a4602e4f2..b1cb59517 100644
--- a/tools/platform/gui.cpp
+++ b/tools/platform/gui.cpp
@@ -3,7 +3,7 @@
#ifdef _WIN32
#include <windows.h>
-#include "external/imgui/examples/imgui_impl_win32.h"
+#include <examples/imgui_impl_win32.h>
IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#endif
@@ -350,12 +350,13 @@ GUI::~GUI()
} // gfx
-#include "external/imgui/imgui.cpp"
-#include "external/imgui/imgui_draw.cpp"
+#include <imgui.cpp>
+#include <imgui_draw.cpp>
+#include <imgui_widgets.cpp>
#ifdef _WIN32
// imgui_impl_win32 defines these, so make sure it doesn't error because
// they're already there
#undef WIN32_LEAN_AND_MEAN
#undef NOMINMAX
-#include "external/imgui/examples/imgui_impl_win32.cpp"
+#include <examples/imgui_impl_win32.cpp>
#endif
diff --git a/tools/slang-embed/slang-embed.cpp b/tools/slang-embed/slang-embed.cpp
index 0edc13683..c3c683f9c 100644
--- a/tools/slang-embed/slang-embed.cpp
+++ b/tools/slang-embed/slang-embed.cpp
@@ -59,6 +59,7 @@ struct App
{
char const* appName = "slang-embed";
char const* inputPath = nullptr;
+ char const* outputPath = nullptr;
Slang::HashSet<Slang::String> includedFiles;
void parseOptions(int argc, char** argv)
@@ -78,9 +79,15 @@ struct App
argc--;
}
+ if( argc > 0 )
+ {
+ outputPath = *argv++;
+ argc--;
+ }
+
if( !inputPath || (argc != 0) )
{
- fprintf(stderr, "usage: %s <inputPath>\n", appName);
+ fprintf(stderr, "usage: %s inputPath [outputPath]\n", appName);
exit(1);
}
}
@@ -201,15 +208,14 @@ struct App
// single invocation of the tool, but for now we only have
// a single file to process.
- // We derive an output path simply by appending `.cpp` to the input path.
- //
- // TODO: If we start adding more complicated options, a `-o` option
- // to specify a desired output path would be an obvious choice.
- //
- char* outputPath = (char*) malloc(strlen(inputPath) + strlen(".cpp") + 1);
- ScopedMemory outputPathCleanup(outputPath);
- strcpy(outputPath, inputPath);
- strcat(outputPath, ".cpp");
+ // We derive an output path simply by appending `.cpp` to the input
+ // path, if not otherwise specified
+ char* defaultOutputPath = (char*) malloc(strlen(inputPath) + strlen(".cpp") + 1);
+ ScopedMemory outputPathCleanup(defaultOutputPath);
+ strcpy(defaultOutputPath, inputPath);
+ strcat(defaultOutputPath, ".cpp");
+ if(!outputPath)
+ outputPath = defaultOutputPath;
FILE* outputFile = fopen(outputPath, "w");
ScopedFile outputFileCleanup(outputFile);
diff --git a/tools/slang-generate/main.cpp b/tools/slang-generate/main.cpp
index af81385dd..d84e594e8 100644
--- a/tools/slang-generate/main.cpp
+++ b/tools/slang-generate/main.cpp
@@ -697,7 +697,7 @@ void emitTemplateNodes(
void usage(char const* appName)
{
- fprintf(stderr, "usage: %s <input>\n", appName);
+ fprintf(stderr, "usage: %s [FILE]... [--target-directory FILE]\n", appName);
}
SlangResult readAllText(char const * fileName, String& outString)
@@ -804,6 +804,11 @@ SourceFile* parseSourceFile(const String& path)
{
FILE* inputStream;
fopen_s(&inputStream, path.getBuffer(), "rb");
+ if(!inputStream)
+ {
+ fprintf(stderr, "unable to read input file: %s\n", path.getBuffer());
+ return nullptr;
+ }
fseek(inputStream, 0, SEEK_END);
size_t inputSize = ftell(inputStream);
fseek(inputStream, 0, SEEK_SET);
@@ -845,6 +850,7 @@ int main(
{
// Parse command-line arguments.
List<String> inputPaths;
+ String outputDir;
char const* appName = "slang-generate";
{
@@ -855,12 +861,27 @@ int main(
{
appName = *argCursor++;
}
- // Copy the input paths
+ // Parse arguments
for (; argCursor != argEnd; ++argCursor)
{
- // We simplify here because doing so also means paths separators are set to /
- // and that makes path emitting work correctly
- inputPaths.add(Path::simplify(UnownedStringSlice(*argCursor)));
+ const auto arg = UnownedStringSlice(*argCursor);
+ if(arg == "--target-directory")
+ {
+ argCursor++;
+ if(argCursor == argEnd)
+ {
+ usage(appName);
+ fprintf(stderr, "--target-directory expects an argument\n");
+ exit(1);
+ }
+ outputDir = Path::simplify(UnownedStringSlice(*argCursor));
+ }
+ else
+ {
+ // We simplify here because doing so also means paths separators are set to /
+ // and that makes path emitting work correctly
+ inputPaths.add(Path::simplify(arg));
+ }
}
}
@@ -875,9 +896,15 @@ int main(
for (auto& inputPath: inputPaths)
{
SourceFile* sourceFile = parseSourceFile(inputPath);
- if (sourceFile)
+ gSourceFiles.add(sourceFile);
+ }
+
+ for (auto sourceFile : gSourceFiles)
+ {
+ if(!sourceFile)
{
- gSourceFiles.add(sourceFile);
+ fprintf(stderr, "failed to parse source files\n");
+ exit(1);
}
}
@@ -901,7 +928,10 @@ int main(
// update final output only when content has changed
StringBuilder outputPathFinal;
- outputPathFinal << inputPath << ".h";
+ if(outputDir.getLength())
+ outputPathFinal << outputDir << "/" << Slang::Path::getFileName(inputPath) << ".h";
+ else
+ outputPathFinal << inputPath << ".h";
String allTextOld, allTextNew;
readAllText(outputPathFinal.getBuffer(), allTextOld);
diff --git a/tools/slang-spirv-embed-generator/spirv-embed-generator-main.cpp b/tools/slang-spirv-embed-generator/spirv-embed-generator-main.cpp
index 30f1ef6b9..2c07aa27f 100644
--- a/tools/slang-spirv-embed-generator/spirv-embed-generator-main.cpp
+++ b/tools/slang-spirv-embed-generator/spirv-embed-generator-main.cpp
@@ -1,12 +1,12 @@
#include <cstdio>
-#include "source/core/slang-dictionary.h"
-#include "source/core/slang-io.h"
-#include "source/compiler-core/slang-diagnostic-sink.h"
-#include "source/compiler-core/slang-perfect-hash.h"
-#include "source/core/slang-writer.h"
-#include "source/compiler-core/slang-spirv-core-grammar.h"
-#include "source/compiler-core/slang-lexer.h"
+#include "../../source/core/slang-dictionary.h"
+#include "../../source/core/slang-io.h"
+#include "../../source/core/slang-writer.h"
+#include "../../source/compiler-core/slang-diagnostic-sink.h"
+#include "../../source/compiler-core/slang-perfect-hash.h"
+#include "../../source/compiler-core/slang-spirv-core-grammar.h"
+#include "../../source/compiler-core/slang-lexer.h"
using namespace Slang;
diff --git a/tools/slang-test/README.md b/tools/slang-test/README.md
index 9dd46b193..61829e728 100644
--- a/tools/slang-test/README.md
+++ b/tools/slang-test/README.md
@@ -9,7 +9,7 @@ Most command line options are prefixed by - for both switches and parameter opti
An example command line:
```
-slang-test -bindir E:\slang\bin\windows-x64\Debug\\ -category full tests/compute/array-param
+slang-test -bindir E:\slang\build\Debug\bin -category full tests/compute/array-param
```
* The -bindir value means that the tools slang-test will use the binaries found in this directory.
@@ -24,8 +24,8 @@ Most types of test use 'test tools' to implement actual tests. There are current
These are typically implemeted as dlls/shared libraries that are loaded when a test is needed. Sometimes it is necessary or useful to just call one of these test tools directly with the parameters the tool takes. This can be achieved by giving the tool as a 'sub command' name on the command line. All of the parameters after the tool name will be passed directly to the tool. For example
- ```
-slang-test -bindir E:\slang\bin\windows-x64\Debug\\ slangc tests/compute/array-param.slang
+```
+slang-test -bindir E:\slang\build\Debug\bin slangc tests/compute/array-param.slang
```
Will run the 'slangc' tool with the parameters listed after 'slangc' on the command line. Any parameters before the sub command will be parsed as usual by slang-test, and if not applicable to invoking the tool will be ignored. bindir will be used for finding the tool directory. This is by design so that the sub command invocation can just be placed after the normal slang-test commands, and removed when no longer needed.
@@ -79,7 +79,7 @@ A test may be in one or more categories. The categories are specified in the tes
Specifies the directory where executables will be found.
-Eg -bindir "windows-x64\Debug\\"
+Eg -bindir "path/to/slang/output/directory/bin"
### category
diff --git a/tools/test-server/test-server-main.cpp b/tools/test-server/test-server-main.cpp
index 9f7376556..dc6a7916d 100644
--- a/tools/test-server/test-server-main.cpp
+++ b/tools/test-server/test-server-main.cpp
@@ -214,10 +214,8 @@ ISlangSharedLibrary* TestServer::loadSharedLibrary(const String& name, Diagnosti
auto loader = DefaultSharedLibraryLoader::getSingleton();
- auto toolPath = Path::combine(m_exeDirectory, name);
-
ComPtr<ISlangSharedLibrary> sharedLibrary;
- if (SLANG_FAILED(loader->loadSharedLibrary(toolPath.getBuffer(), sharedLibrary.writeRef())))
+ if (SLANG_FAILED(loader->loadSharedLibrary(name.getBuffer(), sharedLibrary.writeRef())))
{
if (sink)
{