@@ -26,7 +26,7 @@ export EXTRACT_INFO_CMAKE CFLAGS
2626GIT = git -C ${TRANSLATION_DIR}
2727
2828TEST_FILES := $(realpath $(wildcard test_vectors/* .json) )
29- TARGETS ?= $(shell find build-ninja -maxdepth 1 -type f -executable -exec basename {} \; | cut -d. -f1 | sed -e "s/^lib//gi")
29+ TARGETS ?= $(shell [ -d build-ninja ] && find build-ninja -maxdepth 1 -type f -executable -exec basename {} \; | cut -d. -f1 | sed -e "s/^lib//gi")
3030ifeq (${TARGETS},)
3131ifeq ($(filter cmake clean,$(MAKECMDGOALS ) ) ,)
3232$(error No TARGETS found! You need to run cmake!)
3939cmake : build-ninja/cmake.log
4040
4141build-ninja/cmake.log : test_case/CMakeLists.txt ${EXTRACT_INFO_CMAKE}
42- uv run python -m ideas.cmake source_dir=test_case \
43- build_dir =build-ninja
42+ uv run python -m ideas.cmake source_dir=test_case build_dir=build-ninja
4443 @touch $@
4544
4645build-ninja/CMakeCache.txt : build-ninja/cmake.log
@@ -53,50 +52,58 @@ init: $(patsubst %,${TRANSLATION_DIR}/%/init,${TARGETS}) ;
5352${TRANSLATION_DIR}/% /init : ${TRANSLATION_DIR}/% /src/lib.c | build-ninja/lib% .so.type ;
5453${TRANSLATION_DIR}/% /init : ${TRANSLATION_DIR}/% /src/main.c | build-ninja/% .type ;
5554
56- # FIXME: It would be really nice if we could just check out a branch here if the repo already exists and start from there
57- .PRECIOUS : ${TRANSLATION_DIR}/.git/config
58- ${TRANSLATION_DIR}/.git/config :
55+ # initialize workspace
56+ .PRECIOUS : ${TRANSLATION_DIR}/Cargo.toml
57+ ${TRANSLATION_DIR}/Cargo.toml :
5958 @mkdir -p ${TRANSLATION_DIR}
6059 ${GIT} init --quiet --initial-branch=main
6160 echo " Cargo.lock\ntarget/\n*.log\n*.jsonl" > ${TRANSLATION_DIR} /.gitignore
6261 ${GIT} add .gitignore
6362 ${GIT} commit --quiet --all --message " Initial commit"
64-
65- .PRECIOUS : ${TRANSLATION_DIR}/Cargo.toml
66- ${TRANSLATION_DIR}/Cargo.toml : | ${TRANSLATION_DIR}/.git/config
6763 echo -n " [workspace]\nresolver = \" 3\" " > $@
6864 ${GIT} add Cargo.toml
6965 ${GIT} commit --quiet --all --message " Created cargo workspace"
7066
67+ # initialize translated crate for each C target
68+ .PRECIOUS : ${TRANSLATION_DIR}/% /Cargo.toml
69+ ${TRANSLATION_DIR}/% /Cargo.toml : | ${TRANSLATION_DIR}/Cargo.toml build-ninja/lib% .so.type
70+ uv run python -m ideas.init.crate crate_type=lib vcs=git \
71+ hydra.output_subdir =.init \
72+ hydra.run.dir=${TRANSLATION_DIR}/$*
73+
74+ .PRECIOUS : ${TRANSLATION_DIR}/% /Cargo.toml
75+ ${TRANSLATION_DIR}/% /Cargo.toml : | ${TRANSLATION_DIR}/Cargo.toml build-ninja/% .type
76+ uv run python -m ideas.init.crate crate_type=bin vcs=git \
77+ hydra.output_subdir =.init \
78+ hydra.run.dir=${TRANSLATION_DIR}/$*
79+
80+ # consolidate each C target
7181.PRECIOUS : ${TRANSLATION_DIR}/% /src/lib.c
72- ${TRANSLATION_DIR}/% /Cargo.toml ${TRANSLATION_DIR}/ % / src/lib.c & : | ${TRANSLATION_DIR}/Cargo.toml build-ninja/lib% .so.type
73- uv run python -m ideas.init filename=build-ninja/compile_commands.json \
74- crate_type =lib \
82+ ${TRANSLATION_DIR}/% /src/lib.c : | ${TRANSLATION_DIR}/ % /Cargo.toml build-ninja/lib% .so.type
83+ uv run python -m ideas.init.consolidate filename=build-ninja/compile_commands.json \
84+ cargo_toml =${TRANSLATION_DIR}/ $* /Cargo.toml \
7585 export_symbols=build-ninja/lib$* .so.symbols \
7686 source_priority=build-ninja/lib$* .so.sources \
77- vcs=git \
78- hydra.output_subdir=.init \
87+ hydra.output_subdir=.init.consolidate \
7988 hydra.run.dir=${TRANSLATION_DIR}/$*
8089
8190.PRECIOUS : ${TRANSLATION_DIR}/% /src/main.c
82- ${TRANSLATION_DIR}/% /Cargo.toml ${TRANSLATION_DIR}/ % / src/main.c & : | ${TRANSLATION_DIR}/Cargo.toml build-ninja/% .type
83- uv run python -m ideas.init filename=build-ninja/compile_commands.json \
84- crate_type =bin \
91+ ${TRANSLATION_DIR}/% /src/main.c : | ${TRANSLATION_DIR}/ % /Cargo.toml build-ninja/% .type
92+ uv run python -m ideas.init.consolidate filename=build-ninja/compile_commands.json \
93+ cargo_toml =${TRANSLATION_DIR}/ $* /Cargo.toml \
8594 export_symbols=build-ninja/$* .symbols \
8695 source_priority=build-ninja/$* .sources \
87- vcs=git \
88- hydra.output_subdir=.init \
96+ hydra.output_subdir=.init.consolidate \
8997 hydra.run.dir=${TRANSLATION_DIR}/$*
9098
91-
9299# translate
93100.PHONY : translate
94101translate : $(patsubst % ,${TRANSLATION_DIR}/% /translate,${TARGETS}) ;
95102${TRANSLATION_DIR}/% /translate : ${TRANSLATION_DIR}/% /src/lib.rs | build-ninja/lib% .so.type ;
96103${TRANSLATION_DIR}/% /translate : ${TRANSLATION_DIR}/% /src/main.rs | build-ninja/% .type ;
97104
98105.PRECIOUS : ${TRANSLATION_DIR}/% /src/lib.rs
99- ${TRANSLATION_DIR}/% /src/lib.rs : ${TRANSLATION_DIR}/% /src/lib.c ${TRANSLATION_DIR}/ % /tests/test_cases.rs | build-ninja/compile_commands.json build-ninja/lib% .so.symbols build-ninja/lib% .so.sources
106+ ${TRANSLATION_DIR}/% /src/lib.rs : ${TRANSLATION_DIR}/% /src/lib.c | build-ninja/compile_commands.json build-ninja/lib% .so.symbols build-ninja/lib% .so.sources
100107 -uv run python -m ideas.translate model.name=${PROVIDER} /${MODEL} \
101108 filename =${TRANSLATION_DIR}/$* /src/lib.c \
102109 vcs=git \
@@ -105,7 +112,7 @@ ${TRANSLATION_DIR}/%/src/lib.rs: ${TRANSLATION_DIR}/%/src/lib.c ${TRANSLATION_DI
105112 hydra.run.dir=${TRANSLATION_DIR}/$* ${TRANSLATE_ARGS}
106113
107114.PRECIOUS : ${TRANSLATION_DIR}/% /src/main.rs
108- ${TRANSLATION_DIR}/% /src/main.rs : ${TRANSLATION_DIR}/% /src/main.c ${TRANSLATION_DIR}/ % /tests/test_cases.rs | build-ninja/compile_commands.json build-ninja/% .symbols build-ninja/% .sources
115+ ${TRANSLATION_DIR}/% /src/main.rs : ${TRANSLATION_DIR}/% /src/main.c | build-ninja/compile_commands.json build-ninja/% .symbols build-ninja/% .sources
109116 -uv run python -m ideas.translate model.name=${PROVIDER} /${MODEL} \
110117 filename =${TRANSLATION_DIR}/$* /src/main.c \
111118 vcs=git \
@@ -162,12 +169,17 @@ ${TRANSLATION_DIR}/%/cargo_test.log: ${TRANSLATION_DIR}/%/build.log ${TRANSLATIO
162169 fi \
163170
164171.PRECIOUS : ${TRANSLATION_DIR}/% /tests/test_cases.rs
172+ ${TRANSLATION_DIR}/% /tests/test_cases.rs : | ${TEST_FILES} ${TRANSLATION_DIR}/% /Cargo.toml runner/Cargo.toml build-ninja/lib% .so.type
173+ -uv run python -m ideas.convert_tests runner_manifest=$(realpath runner/Cargo.toml) \
174+ crate_manifest =$(realpath ${TRANSLATION_DIR}/$* /Cargo.toml) \
175+ template=${MAKEFILE_DIR}/tools/rust_tests/lib_testing.rs \
176+ output=${TRANSLATION_DIR}/$* /tests/test_cases.rs \
177+ 'test_vectors=[$(shell echo "$(TEST_FILES ) " | tr ' ' ',') ]'
178+
165179${TRANSLATION_DIR}/% /tests/test_cases.rs : | ${TEST_FILES} ${TRANSLATION_DIR}/% /Cargo.toml build-ninja/% .type
166- @mkdir -p $(@D )
167- -uv run python -m ideas.convert_tests --crate_manifest $(realpath ${TRANSLATION_DIR}/$* /Cargo.toml) \
168- ${TEST_FILES} | rustfmt > $@
169- ${GIT} add $*/Cargo.toml $*/tests/test_cases.rs
170- ${GIT} commit --quiet --message "Converted \`$*\` test vectors"
180+ -uv run python -m ideas.convert_tests crate_manifest=$(realpath ${TRANSLATION_DIR}/$* /Cargo.toml) \
181+ output =${TRANSLATION_DIR}/$* /tests/test_cases.rs \
182+ 'test_vectors=[$(shell echo "$(TEST_FILES ) " | tr ' ' ',') ]'
171183
172184.PRECIOUS : test_vectors/% .json
173185test_vectors/% .json :
0 commit comments