mirror of
https://github.com/logos-blockchain/logos-blockchain-circuits.git
synced 2026-05-18 23:39:47 +00:00
92 lines
4.8 KiB
Makefile
92 lines
4.8 KiB
Makefile
src := justfile_directory() + "/src"
|
|
ci_makefile := justfile_directory() + "/.github/resources/witness-generator/Makefile"
|
|
circom_version := "2.2.2" # This version must match the version used in the CI
|
|
|
|
os := `uname -s`
|
|
sed_i := if os == "Darwin" { "sed -i ''" } else { "sed -i" }
|
|
|
|
# Verify the installed circom matches the pinned version.
|
|
check-circom:
|
|
@circom --version | grep -qF "{{circom_version}}" || \
|
|
(echo "circom {{circom_version}} required; got: $(circom --version 2>&1)" >&2; exit 1)
|
|
|
|
prettify:
|
|
nix shell nixpkgs#clang-tools -c clang-format -i src/**.cpp src/**.hpp
|
|
|
|
# Run a Sage script in a Docker container.
|
|
# Output is written relative to the script's directory.
|
|
# Example: just sage-run blend/generate_inputs_for_poq.py 1 10 5 0
|
|
# -> blend/input.json
|
|
sage-run script +args='':
|
|
docker run --rm \
|
|
-v "{{justfile_directory()}}:/work" \
|
|
-w "/work/$(dirname '{{script}}')" \
|
|
sagemath/sagemath sage "$(basename '{{script}}')" {{args}}
|
|
|
|
# Build the PoQ circuit and its C++ witness generator, equivalent to the CI build.
|
|
poq: check-circom
|
|
circom blend/poq.circom --c --r1cs --no_asm --O2 --output blend
|
|
# circom-generated main() has no return on the success path; patch it before -O3 turns it into an infinite loop
|
|
{{sed_i}} ':a;N;$!ba;s/\n}\n\n*$/\n return 0;\n}/' blend/poq_cpp/main.cpp
|
|
cp -r {{src}}/poq blend/poq_cpp/poq
|
|
cp {{src}}/circom_adapter.cpp {{src}}/circom_adapter.hpp {{src}}/circom_fwd.hpp {{src}}/types.hpp blend/poq_cpp/
|
|
cp {{ci_makefile}} blend/poq_cpp/Makefile
|
|
cp blend/test_ffi.cpp blend/poq_cpp/test_ffi.cpp
|
|
make -C blend/poq_cpp PROJECT=poq linux-lib
|
|
|
|
# Run a simple smoke test of the PoQ witness generator.
|
|
test-poq: poq
|
|
g++ -std=c++11 -O3 -I blend/poq_cpp blend/poq_cpp/test_ffi.cpp -L blend/poq_cpp -lwitness_poq -lgmp -o blend/poq_cpp/test_ffi
|
|
cd blend/poq_cpp && ./test_ffi
|
|
|
|
# Build the PoL circuit and its C++ witness generator, equivalent to the CI build.
|
|
pol: check-circom
|
|
circom mantle/pol.circom --c --r1cs --no_asm --O2 --output mantle
|
|
# circom-generated main() has no return on the success path; patch it before -O3 turns it into an infinite loop
|
|
{{sed_i}} ':a;N;$!ba;s/\n}\n\n*$/\n return 0;\n}/' mantle/pol_cpp/main.cpp
|
|
cp -r {{src}}/pol mantle/pol_cpp/pol
|
|
cp {{src}}/circom_adapter.cpp {{src}}/circom_adapter.hpp {{src}}/circom_fwd.hpp {{src}}/types.hpp mantle/pol_cpp/
|
|
cp {{ci_makefile}} mantle/pol_cpp/Makefile
|
|
cp mantle/test_pol.cpp mantle/pol_cpp/test_pol.cpp
|
|
make -C mantle/pol_cpp PROJECT=pol linux-lib
|
|
|
|
# Run a simple smoke test of the PoL witness generator.
|
|
test-pol: pol
|
|
g++ -std=c++11 -O3 -I mantle/pol_cpp mantle/pol_cpp/test_pol.cpp -L mantle/pol_cpp -lwitness_pol -lgmp -o mantle/pol_cpp/test_pol
|
|
cd mantle/pol_cpp && ./test_pol
|
|
|
|
# Build the PoC circuit and its C++ witness generator, equivalent to the CI build.
|
|
poc: check-circom
|
|
circom mantle/poc.circom --c --r1cs --no_asm --O2 --output mantle
|
|
# circom-generated main() has no return on the success path; patch it before -O3 turns it into an infinite loop
|
|
{{sed_i}} ':a;N;$!ba;s/\n}\n\n*$/\n return 0;\n}/' mantle/poc_cpp/main.cpp
|
|
cp -r {{src}}/poc mantle/poc_cpp/poc
|
|
cp {{src}}/circom_adapter.cpp {{src}}/circom_adapter.hpp {{src}}/circom_fwd.hpp {{src}}/types.hpp mantle/poc_cpp/
|
|
cp {{ci_makefile}} mantle/poc_cpp/Makefile
|
|
cp mantle/test_poc.cpp mantle/poc_cpp/test_poc.cpp
|
|
make -C mantle/poc_cpp PROJECT=poc linux-lib
|
|
|
|
# Run a simple smoke test of the PoC witness generator.
|
|
test-poc: poc
|
|
g++ -std=c++11 -O3 -I mantle/poc_cpp mantle/poc_cpp/test_poc.cpp -L mantle/poc_cpp -lwitness_poc -lgmp -o mantle/poc_cpp/test_poc
|
|
cd mantle/poc_cpp && ./test_poc
|
|
|
|
# Build the signature circuit and its C++ witness generator, equivalent to the CI build.
|
|
signature: check-circom
|
|
circom mantle/signature.circom --c --r1cs --no_asm --O2 --output mantle
|
|
# circom-generated main() has no return on the success path; patch it before -O3 turns it into an infinite loop
|
|
{{sed_i}} ':a;N;$!ba;s/\n}\n\n*$/\n return 0;\n}/' mantle/signature_cpp/main.cpp
|
|
cp -r {{src}}/signature mantle/signature_cpp/signature
|
|
cp {{src}}/circom_adapter.cpp {{src}}/circom_adapter.hpp {{src}}/circom_fwd.hpp {{src}}/types.hpp mantle/signature_cpp/
|
|
cp {{ci_makefile}} mantle/signature_cpp/Makefile
|
|
cp mantle/test_signature.cpp mantle/signature_cpp/test_signature.cpp
|
|
make -C mantle/signature_cpp PROJECT=signature linux-lib
|
|
|
|
# Run a simple smoke test of the signature witness generator.
|
|
test-signature: signature
|
|
g++ -std=c++11 -O3 -I mantle/signature_cpp mantle/signature_cpp/test_signature.cpp -L mantle/signature_cpp -lwitness_signature -lgmp -o mantle/signature_cpp/test_signature
|
|
cd mantle/signature_cpp && ./test_signature
|
|
|
|
clean:
|
|
rm -rf blend/poq_cpp mantle/pol_cpp mantle/poc_cpp mantle/signature_cpp
|