From 2df51330d38ce9b9db99ec9880e23671d7ab3ba3 Mon Sep 17 00:00:00 2001 From: Avril Date: Mon, 25 May 2020 22:27:15 +0100 Subject: [PATCH] native comp ok --- Makefile | 4 + generator | 1 + generator-native/src/main.rs | 2 +- generator/Program.cs | 162 ----------------------------------- generator/generator.csproj | 8 -- sfexec-create | 3 +- 6 files changed, 8 insertions(+), 172 deletions(-) create mode 120000 generator delete mode 100644 generator/Program.cs delete mode 100644 generator/generator.csproj diff --git a/Makefile b/Makefile index 455ed51..aa1331b 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +generator: + cd generator-native && cargo build --release + ln -sf generator-native/target/release/generator-native generator + sfexec-output: g++ -Iinclude/ -w --std=c++17 main.cpp sha256_literal/sha256.cpp -o sfexec diff --git a/generator b/generator new file mode 120000 index 0000000..9deb1a7 --- /dev/null +++ b/generator @@ -0,0 +1 @@ +generator-native/target/release/generator-native \ No newline at end of file diff --git a/generator-native/src/main.rs b/generator-native/src/main.rs index 27ea6ca..a796d50 100644 --- a/generator-native/src/main.rs +++ b/generator-native/src/main.rs @@ -4,7 +4,7 @@ extern crate heaparray; use std::{ fs::{ - self, File, OpenOptions, + OpenOptions, }, io::{self, Write,Read,}, error::Error, diff --git a/generator/Program.cs b/generator/Program.cs deleted file mode 100644 index 735852c..0000000 --- a/generator/Program.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; - -namespace generator -{ - [Flags] - enum Mode - { - None = 0, - Silent = 1<<0, - Execute = 1<<1, - } - class Program - { - static string execstr=null; - static string output = "file.h"; - static string[] files = null; - static Mode ParseArgs(Taker args) - { - List f = new List(); - Mode mode = Mode.None; - - bool look=true; - while(args.TryTake(out var arg0)) - { - switch(arg0) - { - case "-s" when look: - mode |= Mode.Silent; - break; - case "-e" when look: - mode |= Mode.Execute; - if(args.TryTake(out var exec)) - execstr = exec; - else - throw new InvalidOperationException("-e must be given a string"); - break; - case "-o" when look: - if(!args.TryTake(out output)) - throw new InvalidOperationException("-o must be given an output"); - break; - case "-" when look: - look =false; - break; - default: - f.Add(arg0); - break; - } - } - files = f.ToArray(); - return mode; - } - static void Main(string[] args) - { - Mode mode; - try { - mode = ParseArgs(new Taker(args)); - } catch(Exception e) - { - Console.WriteLine("Error: "+e.Message); - return; - } - - if(files.Length<1) - { - Console.WriteLine("Usage: generator [-e ] [-s] [-] "); - return; - } - Console.WriteLine("Writing to "+output+"..."); - using(var fs = new FileStream(output, FileMode.Create)) - { - using(var sw = new StreamWriter(fs)) { - if(mode.HasFlag(Mode.Silent)) - sw.WriteLine("#define SILENT"); - - sw.WriteLine($"constexpr const int DATA_COUNT = {files.Length};"); - - if(mode.HasFlag(Mode.Execute)) { - var exec_str = $"\"{CEscape(execstr)}\""; - sw.WriteLine($"constexpr const char* const DATA_EXEC_AFTER = {exec_str};"); - sw.WriteLine($"static constexpr auto DATA_EXEC_AFTER_HASH = {exec_str}_sha256;"); - } - else { - sw.WriteLine("constexpr const char* const DATA_EXEC_AFTER = nullptr;"); - sw.WriteLine("static constexpr auto DATA_EXEC_AFTER_HASH = \"unbound\"_sha256;"); - } - - List sizes= new List(); - sw.WriteLine("constexpr const unsigned char DATA[] = {"); - - foreach(var str in files) - { - using(var ifs = new FileStream(str, FileMode.Open, FileAccess.Read)) - { - Console.Write(" + "+str); - try { - sizes.Add(WriteFile(sw, ifs)); - sw.WriteLine(); - Console.WriteLine(" OK"); - } catch(Exception ex) { - Console.WriteLine(" FAILED: "+ex.Message); - } - } - } - sw.WriteLine("};"); - - Console.WriteLine("Adding lengths"); - - sw.WriteLine("constexpr const long DATA_LENGTHS[DATA_COUNT] = {"); - foreach(var len in sizes) - sw.Write($"\t{len}ll,"); - sw.WriteLine("\n};"); - - Console.WriteLine("Adding names"); - - sw.WriteLine("constexpr const char* const DATA_NAMES[DATA_COUNT] = {"); - foreach(var n in files) - sw.Write("\t\""+CEscape(n.Split(Path.DirectorySeparatorChar)[^1])+"\","); - sw.WriteLine("};"); - } - } - } - - static long WriteFile(StreamWriter to, Stream from) - { - int rd; - long len=0; - while( (rd = from.ReadByte()) >= 0) - { - to.Write($"0x{((byte)rd):x2}, "); - len+=1; - } - return len; - } - - static string CEscape(string inp) - { - return inp.Replace("\\", @"\\") - .Replace("\"", "\\\""); - } - } - class Taker - { - readonly IEnumerator iter; - public Taker(IEnumerable input) - { - iter =input.GetEnumerator(); - } - - public bool TryTake(out T value) - { - if(!iter.MoveNext()){ - value=default; - return false; - } - value = iter.Current; - return true; - } - } -} diff --git a/generator/generator.csproj b/generator/generator.csproj deleted file mode 100644 index d453e9a..0000000 --- a/generator/generator.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - Exe - netcoreapp3.1 - - - diff --git a/sfexec-create b/sfexec-create index 8e6903b..a49dc0c 100755 --- a/sfexec-create +++ b/sfexec-create @@ -3,7 +3,8 @@ SCRIPTLINK=$(readlink -f "$0") SCRIPTPATH="$( cd "$(dirname "$SCRIPTLINK")" >/dev/null 2>&1 ; pwd -P )" -dotnet run --project "$SCRIPTPATH/generator" -o "$SCRIPTPATH/file.h" "$@" || exit 1 +#dotnet run --project "$SCRIPTPATH/generator" -o "$SCRIPTPATH/file.h" "$@" || exit 1 +$SCRIPTPATH/generator -o "$SCRIPTPATH/file.h" "$@" || exit 1 [[ -f "$SCRIPTPATH/file.h" ]] || exit 1