summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-12-08 19:24:34 +0800
committerGitHub <noreply@github.com>2023-12-08 19:24:34 +0800
commit4321929879c1ed5b87ff95a99ca7da91e28d18fd (patch)
treeae1460dcb652981468e6fa4897e87b697f2bda33 /tools
parent9903688ccc0793259d43f95cae88bd1a8e178824 (diff)
WIP: CMake (#3326)
* More robust input and output selection in generator tools * Add cmake build system * Get slang-test running with cmake * Bump lz4 and miniz dependencies * Make cmake build more declarative * Correct preprocessor logic in slang.h * Add cuda test to compute/simple * Remove empty cmake files * output placement for cmake, and commenting * Correct include paths in spirv-embed-generator * Format cmake with gersemi * Make cmake build clerer * Neaten header generation Also work around https://gitlab.kitware.com/cmake/cmake/-/issues/18399 by introducing correct_generated_properties to set the GENERATED flag in the correct scope * remove unused files * use 3.20 to set GENERATOR property properly * spelling * more flexible linker arg setting * replace slang-static with obj collection * Set rpath and linker path correctly * neaten generated file generation * tests working with cmake build * fix premake5 build * comment and neaten cmake * remove unnecessary dependency * Build aftermath example only when aftermath is enabled * Add slang-llvm and other dependencies * Put modules alongside binaries * Find slang-glslang correctly * Better option handling * comments * add llvm build test * Better option handling * cmake wobble * use UNICODE and _UNICODE * remove other workflows * use ccache * neaten * limit parallel for llvm build * use ninja for build * Windows and Darwin slang-llvm builds * cache key * verbose llvm build * cl on windows * sccache and cl.exe * use cl.exe * Correct package detection * less verbosity * Simplify miniz inclusion * fix build with sccache * Neaten llvm building * neaten * Neaten slang-llvm fetching * more surgical workarounds * Add ci action * Get version from git * better variable naming * add missing include * clean up after premake in cmake * more docs on cmake build * ci wobble * add imgui target * more selective source * do not download swiftshader * Some missing dependencies * only build llvm on dispatch * Disable /Zi in CI where sccache is present * simplify * set PIC for miniz * set policies before project * reengage workaround * more runs on ci * Add cmake presets * Add cpack * move iterator debug level to preset * Correct lib flag * simplify action * Neaten cmake init * Add todo * Add simple test wrapper * Add tests to workflow presets * rename packing preset * Correctly set definitions * docs * correct preset names * Make slang-test depend on test-server/test-process * neaten * use workflow in actions * install docs * Correct module install dir * debug dist workflow * Install headers * neaten header globbing * Neaten dependency handling * make lib and bin variables * Do not set compiler for vs builds, unnecessary * docs * allow setting explicit source for target * maintain archive subdir * cmake docs * install headers * place targets into folders * cmake docs * nest external projects in folder * remove name clash * Neater external packages * meta targets in folder structure * cleaner slang-glslang dll * Add missing static directive to slang-no-embedded-stdlib * more robust module copying * make slang-test the startup project * folder tweak * Make FETCH_BINARY the default on all platforms * Set DEBUG_DIR * add natvis files to source * skip spirv tests * remove test step from debug dist * Add build to .gitignore * redo warnings to be more like premake * Update imgui * clean more premake files * Disable PCH for glslang, gcc throws a warning * Add /MP for msvc builds * warning wobble * Add script to build llvm * Add slang-llvm and generators components * Build slang-llvm in ci * comments * fetch llvm with git * better abi approximation for cache * better sccache key * formatting * Correct logic around disabling problematic debug info for ccache * exclude gcc and clang from windows ci * Make dist workflows use system llvm * naming * restore normal dist builds * formatting * run tests in ci * Correct slang-llvm url setting * Rely on the system to find the test tool library * actions matrix wiggle * cope with OSX ancient bash * Correct compilers on windows * more ci debugging * Correct rpath handling on OSX * neaten * correct path to slang-llvm * Correct rpath separator on osx * Find slang-llvm correctly * smoke tests only on osx * ci wobble * Give MacOS module a dylib suffix * get swiftshader correctly * cope with bsd cp * remove debug output * full tests on osx * ci wobble * Add some vk tests to expected failures * simplify ci * ci wobble * exclude dx12 tests from github ci * remove cmake code for building llvm * warnings * warnings as errors for cl * spirv-tools in path * add aarch64 ci build * Add SLANG_GENERATORS_PATH option for prebuilt generators * neaten * Correct generator target name * remove yaml anchors because github actions does not support them * Demote CMake in docs Also add info on cross compiling * Restore premake CI * use minimal ci for cmake * Write miniz_export for premake build and .gitignore it * Mention build config tool options in docs * Remove redefined macro for miniz * regenerate vs project
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)
{