diff --git a/gen/go_code.py b/gen/go_code.py index 16db8685e..7c9a70ce1 100755 --- a/gen/go_code.py +++ b/gen/go_code.py @@ -855,7 +855,12 @@ def generate_ssh_kitten_data() -> None: write_compressed_data(buf.getvalue(), d) +def start_simdgen() -> 'subprocess.Popen[bytes]': + return subprocess.Popen(['go', 'run', 'generate.go'], cwd='tools/simdstring', stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + def main(args: List[str]=sys.argv) -> None: + simdgen_process = start_simdgen() with replace_if_needed('constants_generated.go') as f: f.write(generate_constants()) with replace_if_needed('tools/utils/style/color-names_generated.go') as f: @@ -878,6 +883,12 @@ def main(args: List[str]=sys.argv) -> None: kitten_clis() stringify() print(json.dumps(changed, indent=2)) + stdout, stderr = simdgen_process.communicate() + if simdgen_process.wait() != 0: + print('Failed to generate SIMD ASM', file=sys.stderr) + sys.stdout.buffer.write(stdout) + sys.stderr.buffer.write(stderr) + raise SystemExit(simdgen_process.returncode) if __name__ == '__main__': diff --git a/tools/simdstring/generate.go b/tools/simdstring/generate.go index aa9251e0f..839da0616 100644 --- a/tools/simdstring/generate.go +++ b/tools/simdstring/generate.go @@ -6,6 +6,7 @@ package main import ( + "bytes" "fmt" "go/types" "io" @@ -1184,6 +1185,9 @@ func exit(msg any) { func write_file(name, text string) { b := unsafe.Slice(unsafe.StringData(text), len(text)) + if existing, err := os.ReadFile(name); err == nil && bytes.Equal(existing, b) { + return + } if err := os.WriteFile(name, b, 0660); err != nil { exit(err) }