Skip to content

Commit fe2c0c4

Browse files
authored
Merge pull request #936 from jedisct1/zig-backend
Add code generation for Zig
2 parents e3665ea + 405b3f2 commit fe2c0c4

25 files changed

+43214
-7
lines changed

.gitattributes

+2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
*.h text
66
*.rs text
77
*.go text
8+
*.zig text
89

910
fiat-bedrock2/**/*.c linguist-generated
1011
fiat-c/**/*.c linguist-generated
1112
fiat-go/**/*.go linguist-generated
1213
fiat-java/**/*.java linguist-generated
1314
fiat-json/**/*.json linguist-generated
1415
fiat-rust/**/*.rs linguist-generated
16+
fiat-zig/**/*.zig linguist-generated

.github/workflows/zig.yml

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: Test Generated Zig
2+
3+
on:
4+
push:
5+
pull_request:
6+
schedule:
7+
- cron: "0 0 1 * *"
8+
9+
jobs:
10+
test-zig:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Install Zig
15+
uses: goto-bus-stop/setup-zig@v1
16+
with:
17+
version: master
18+
- uses: actions/checkout@v2
19+
- name: Test Zig files
20+
run: (cd fiat-zig && zig build && zig build test)

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ tramp
1616

1717
# misc
1818
*.pyc
19+
zig-cache
1920

2021
# java
2122
*.class

Makefile

+23-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ GHCFLAGS?= # -XStrict
1212
CFLAGS?=
1313

1414
CARGO_BUILD := cargo build
15+
ZIG_BUILD := zig build
1516

1617
SKIP_BEDROCK2?=
1718

@@ -30,17 +31,17 @@ INSTALLDEFAULTROOT := Crypto
3031
install-standalone install-standalone-ocaml install-standalone-haskell \
3132
uninstall-standalone uninstall-standalone-ocaml uninstall-standalone-haskell \
3233
util all-except-generated \
33-
c-files bedrock2-files rust-files go-files json-files java-files generated-files \
34-
lite-c-files lite-bedrock2-files lite-rust-files lite-go-files lite-json-files lite-java-files lite-generated-files \
34+
c-files bedrock2-files rust-files go-files json-files java-files zig-files generated-files \
35+
lite-c-files lite-bedrock2-files lite-rust-files lite-go-files lite-json-files lite-java-files lite-zig-files lite-generated-files \
3536
bedrock2-backend \
3637
update-go-pkg-cache \
3738
deps \
3839
nobigmem print-nobigmem \
3940
lite only-heavy printlite \
4041
all-except-compiled \
4142
some-early pre-standalone pre-standalone-extracted standalone standalone-haskell standalone-ocaml \
42-
test-c-files test-bedrock2-files test-rust-files test-go-files test-json-files test-java-files \
43-
only-test-c-files only-test-bedrock2-files only-test-rust-files only-test-go-files only-test-json-files only-test-java-files \
43+
test-c-files test-bedrock2-files test-rust-files test-go-files test-json-files test-java-files test-zig-files \
44+
only-test-c-files only-test-bedrock2-files only-test-rust-files only-test-go-files only-test-json-files only-test-java-files only-test-zig-files \
4445
test-go-module only-test-go-module \
4546
javadoc only-javadoc \
4647
check-output accept-output
@@ -140,6 +141,7 @@ GO_DIR := fiat-go/
140141
JSON_DIR := fiat-json/src/
141142
JAVA_DIR := fiat-java/src/
142143
JAVADOC_DIR := fiat-java/doc/
144+
ZIG_DIR := fiat-zig/src/
143145

144146
# Java only really supports 32-bit builds, because we have neither 64x64->64x64 multiplication, nor uint128
145147
# Java also requires that class names match file names
@@ -218,13 +220,15 @@ ALL_RUST_FILES := $(patsubst %,$(RUST_DIR)%.rs,$(ALL_BASE_FILES))
218220
ALL_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(call GO_RENAME_TO_FILE,$(filter-out $(BASE_FILES_NEEDING_INT128),$(ALL_BASE_FILES))))
219221
ALL_JSON_FILES := $(patsubst %,$(JSON_DIR)%.json,$(ALL_BASE_FILES))
220222
ALL_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(filter-out $(BASE_FILES_NEEDING_INT128),$(ALL_BASE_FILES))))
223+
ALL_ZIG_FILES := $(patsubst %,$(ZIG_DIR)%.zig,$(ALL_BASE_FILES))
221224

222225
LITE_C_FILES := $(patsubst %,$(C_DIR)%.c,$(LITE_BASE_FILES))
223226
LITE_BEDROCK2_FILES := $(patsubst %,$(BEDROCK2_DIR)%.c,$(filter-out $(BASE_FILES_NEEDING_INT128),$(LITE_BASE_FILES)))
224227
LITE_RUST_FILES := $(patsubst %,$(RUST_DIR)%.rs,$(LITE_BASE_FILES))
225228
LITE_GO_FILES := $(patsubst %,$(GO_DIR)%.go,$(call GO_RENAME_TO_FILE,$(filter-out $(BASE_FILES_NEEDING_INT128),$(LITE_BASE_FILES))))
226229
LITE_JSON_FILES := $(patsubst %,$(JSON_DIR)%.json,$(LITE_BASE_FILES))
227230
LITE_JAVA_FILES := $(patsubst %,$(JAVA_DIR)%.java,$(call JAVA_RENAME,$(filter-out $(BASE_FILES_NEEDING_INT128),$(LITE_BASE_FILES))))
231+
LITE_ZIG_FILES := $(patsubst %,$(ZIG_DIR)%.zig,$(LITE_BASE_FILES))
228232

229233
BEDROCK2_UNSATURATED_SOLINAS := src/ExtractionOCaml/bedrock2_unsaturated_solinas
230234
BEDROCK2_WORD_BY_WORD_MONTGOMERY := src/ExtractionOCaml/bedrock2_word_by_word_montgomery
@@ -273,8 +277,8 @@ endif
273277
CHECK_OUTPUTS := $(addprefix check-,$(OUTPUT_PREOUTS))
274278
ACCEPT_OUTPUTS := $(addprefix accept-,$(OUTPUT_PREOUTS))
275279

276-
generated-files: c-files rust-files go-files json-files java-files
277-
lite-generated-files: lite-c-files lite-rust-files lite-go-files lite-json-files lite-java-files
280+
generated-files: c-files rust-files go-files json-files java-files zig-files
281+
lite-generated-files: lite-c-files lite-rust-files lite-go-files lite-json-files lite-java-files lite-zig-files
278282
all-except-compiled: coq pre-standalone-extracted check-output
279283
all-except-generated: standalone-ocaml perf-standalone all-except-compiled
280284
all: all-except-generated generated-files
@@ -291,13 +295,15 @@ rust-files: $(ALL_RUST_FILES)
291295
go-files: $(ALL_GO_FILES)
292296
json-files: $(ALL_JSON_FILES)
293297
java-files: $(ALL_JAVA_FILES)
298+
zig-files: $(ALL_ZIG_FILES)
294299

295300
lite-c-files: $(LITE_C_FILES)
296301
lite-bedrock2-files: $(LITE_BEDROCK2_FILES)
297302
lite-rust-files: $(LITE_RUST_FILES)
298303
lite-go-files: $(LITE_GO_FILES)
299304
lite-json-files: $(LITE_JSON_FILES)
300305
lite-java-files: $(LITE_JAVA_FILES)
306+
lite-zig-files: $(LITE_ZIG_FILES)
301307

302308
lite: $(LITE_VOFILES)
303309
nobigmem: $(NOBIGMEM_VOFILES)
@@ -537,6 +543,17 @@ test-rust-files: $(ALL_RUST_FILES)
537543
test-rust-files only-test-rust-files:
538544
cd fiat-rust; $(CARGO_BUILD)
539545

546+
$(ALL_ZIG_FILES) : $(ZIG_DIR)%.zig : $$($$($$*_BINARY_NAME))
547+
$(SHOW)'SYNTHESIZE > $@'
548+
$(HIDE)rm -f $@.ok
549+
$(HIDE)($(TIMER) $($($*_BINARY_NAME)) --lang Zig --internal-static --public-function-case camelCase --private-function-case camelCase $($*_DESCRIPTION) $($*_ARGS) $($*_FUNCTIONS) && touch $@.ok) > $@.tmp
550+
$(HIDE)(rm $@.ok && mv $@.tmp $@) || ( RV=$$?; cat $@.tmp; exit $$RV )
551+
552+
test-zig-files: $(ALL_ZIG_FILES)
553+
554+
test-zig-files only-test-zig-files:
555+
cd fiat-zig; $(ZIG_BUILD)
556+
540557
all: $(addprefix fiat-rust/,$(COPY_TO_FIAT_RUST))
541558
all: $(addprefix fiat-go/,$(COPY_TO_FIAT_GO))
542559

_CoqProject

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ src/Stringification/JSON.v
214214
src/Stringification/Java.v
215215
src/Stringification/Language.v
216216
src/Stringification/Rust.v
217+
src/Stringification/Zig.v
217218
src/UnsaturatedSolinasHeuristics/Tests.v
218219
src/Util/AdditionChainExponentiation.v
219220
src/Util/Arg.v

fiat-zig/build.zig

+15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)