summaryrefslogtreecommitdiffstats
path: root/tools/slang-generate/main.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-10-25 11:24:16 -0400
committerGitHub <noreply@github.com>2018-10-25 11:24:16 -0400
commit4f0415e338862ffec50c2d47eddea958255b504e (patch)
tree084c8e25552e328ed14eafcf0431493f58f973e8 /tools/slang-generate/main.cpp
parent2700a89f8c80620f1d523563cc80ec0da39e9761 (diff)
Feature/premake linux (#689)
* Premake work in progress for linux. * Added dump function. * Remove examples on linux Small warning fix. * * Don't build render-test on linux * Removed work around virtual destructor warning, and just used virtual dtor for simplicity * Git ignore obj directories * Fix premake working on windows. * * Fix sprintf_s functions * Make generates arg parsing more robust * Added FloatIntUnion to avoid type punning/strong aliasing issues, and repeated union definitions. * Work around problems building on linux with getClass claiming a strict aliasing issue. * Fix for targetBlock appearing potentiall used unintialized to gcc. * Linux slang link options -fPIC to make dll. * Add -fPIC to build options on linux. * Add -ldl for linux on slang. * Fixes to try and get premake working with .so on linux. * Make core compile with -fPIC * Try to fix linux linking with --no-as-needed before -ldl * Add rpath back. * Remove render-gl from linux build. * Re-add location for linux. * Don't include <malloc.h> except on windows. * Remove unused line to fix warning on osx. * Remove ambiguity on OSX for operator <<. * Fixing ambiguity with operator overloading and Int types for OSX. * Fix ambiguity around UInt and operator * Fix ambiguity of UInt conversion for OSX. * Added UnambiguousInt and UnambiguousUInt to make it easier to work around OSX integer coercion for UInt/Int types.
Diffstat (limited to 'tools/slang-generate/main.cpp')
-rw-r--r--tools/slang-generate/main.cpp79
1 files changed, 40 insertions, 39 deletions
diff --git a/tools/slang-generate/main.cpp b/tools/slang-generate/main.cpp
index 6b51f0e47..78097d1f1 100644
--- a/tools/slang-generate/main.cpp
+++ b/tools/slang-generate/main.cpp
@@ -625,28 +625,35 @@ void usage(char const* appName)
fprintf(stderr, "usage: %s <input>\n", appName);
}
-char* readAllText(char const * fileName)
+SlangResult readAllText(char const * fileName, String& stringOut)
{
FILE * f;
fopen_s(&f, fileName, "rb");
if (!f)
{
- return "";
+ stringOut = "";
+ return SLANG_FAIL;
}
else
{
+ stringOut =
fseek(f, 0, SEEK_END);
auto size = ftell(f);
- char * buffer = new char[size + 1];
- memset(buffer, 0, size + 1);
+
+ StringRepresentation* stringRep = StringRepresentation::createWithCapacityAndLength(size, size);
+ stringOut = String(stringRep);
+
+ char * buffer = stringRep->getData();
+ memset(buffer, 0, size);
fseek(f, 0, SEEK_SET);
fread(buffer, sizeof(char), size, f);
fclose(f);
- return buffer;
+
+ return SLANG_OK;
}
}
-void writeAllText(char const *srcFileName, char const* fileName, char* content)
+void writeAllText(char const *srcFileName, char const* fileName, const char* content)
{
FILE * f = nullptr;
fopen_s(&f, fileName, "wb");
@@ -751,34 +758,28 @@ List<SourceFile*> gSourceFiles;
int main(
int argc,
- char** argv)
+ const char*const* argv)
{
// Parse command-line arguments.
- char** argCursor = argv;
- char** argEnd = argv + argc;
-
+ List<const char*> inputPaths;
char const* appName = "slang-generate";
- if( argCursor != argEnd )
- {
- appName = *argCursor++;
- }
-
- char** writeCursor = argv;
- char const* const* inputPaths = writeCursor;
-
- while(argCursor != argEnd)
- {
- *writeCursor++ = *argCursor++;
- }
- size_t inputPathCount = writeCursor - inputPaths;
- if(inputPathCount == 0)
{
- usage(appName);
- exit(1);
+ const char*const* argCursor = argv;
+ const char*const* argEnd = argv + argc;
+ // Copy the app name
+ if( argCursor != argEnd )
+ {
+ appName = *argCursor++;
+ }
+ // Copy the input paths
+ for (; argCursor != argEnd; ++argCursor)
+ {
+ inputPaths.Add(*argCursor);
+ }
}
- if( argCursor != argEnd )
+ if(inputPaths.Count() == 0)
{
usage(appName);
exit(1);
@@ -786,9 +787,8 @@ int main(
// Read each input file and process it according
// to the type of treatment it requires.
- for (size_t ii = 0; ii < inputPathCount; ++ii)
+ for (const char* inputPath: inputPaths)
{
- char const* inputPath = inputPaths[ii];
SourceFile* sourceFile = parseSourceFile(inputPath);
if (sourceFile)
{
@@ -804,27 +804,28 @@ int main(
auto node = sourceFile->node;
// write output to a temporary file first
- char outputPath[1024];
- sprintf_s(outputPath, "%s.temp.h", inputPath);
+ StringBuilder outputPath;
+ outputPath << inputPath << ".temp.h";
FILE* outputStream;
- fopen_s(&outputStream, outputPath, "w");
+ fopen_s(&outputStream, outputPath.Buffer(), "w");
emitTemplateNodes(outputStream, node);
fclose(outputStream);
// update final output only when content has changed
- char outputPathFinal[1024];
- sprintf_s(outputPathFinal, "%s.h", inputPath);
+ StringBuilder outputPathFinal;
+ outputPathFinal << inputPath << ".h";
- char * allTextOld = readAllText(outputPathFinal);
- char * allTextNew = readAllText(outputPath);
- if (strcmp(allTextNew, allTextOld) != 0)
+ String allTextOld, allTextNew;
+ readAllText(outputPathFinal.Buffer(), allTextOld);
+ readAllText(outputPath.Buffer(), allTextNew);
+ if (allTextOld != allTextNew)
{
- writeAllText(inputPath, outputPathFinal, allTextNew);
+ writeAllText(inputPath, outputPathFinal.Buffer(), allTextNew.Buffer());
}
- remove(outputPath);
+ remove(outputPath.Buffer());
}
return 0;