Makefile 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. .POSIX:
  2. # Install prefix
  3. PREFIX = $(HOME)/.cargo
  4. # Cargo binary
  5. CARGO = cargo
  6. # Compile target
  7. RUST_TARGET = $(shell rustc -Vv | grep '^host: ' | cut -d' ' -f2)
  8. # Uncomment when doing musl static builds
  9. #RUSTFLAGS = -C target-feature=+crt-static -C link-self-contained=yes
  10. # zkas compiler binary
  11. ZKAS = ../../zkas
  12. # zkas circuits
  13. PROOFS_SRC = $(shell find proof -type f -name '*.zk')
  14. PROOFS_BIN = $(PROOFS_SRC:=.bin)
  15. SRC = \
  16. Cargo.toml \
  17. ../../Cargo.toml \
  18. $(shell find src -type f -name '*.rs') \
  19. $(shell find ../../src -type f -name '*.rs') \
  20. BIN = $(shell grep '^name = ' Cargo.toml | sed 1q | cut -d' ' -f3 | tr -d '"')
  21. all: $(BIN)
  22. $(PROOFS_BIN): $(ZKAS) $(PROOFS_SRC)
  23. $(ZKAS) $(basename $@) -o $@
  24. $(BIN): $(PROOFS_BIN) $(SRC)
  25. RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) build --target=$(RUST_TARGET) --release --package $@ --bin $@
  26. cp -f ../../target/$(RUST_TARGET)/release/$@ $@
  27. cp -f ../../target/$(RUST_TARGET)/release/$@ ../../$@
  28. # To build for android, install the Android NDK (Android Studio)
  29. # and then install cargo-ndk: `cargo install cargo-ndk`.
  30. # After that, add new android rust toolchains:
  31. # - rustup target add aarch64-linux-android
  32. # - rustup target add armv7-linux-androideabi
  33. # - rustup target add x86_64-linux-android
  34. # - rustup target add i686-linux-android
  35. $(BIN).android64:
  36. RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) ndk -t arm64-v8a -o ./jniLibs build --release --package $(BIN)
  37. cp -f ../../target/aarch64-linux-android/release/$(BIN) $@
  38. # UNTESTED:
  39. #$(BIN).android32:
  40. # RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) ndk -t armeabi-v7a -o ./jniLibs build --release --package $(BIN)
  41. # cp -f ../../target/armv7-linux-androideabi/release/$(BIN) $(BIN).$@
  42. # This target doesn't require installing any packages from Android Studio
  43. podman-android:
  44. # s/podman/docker/ if you are using docker instead
  45. podman build -t test:latest . --file android.Dockerfile
  46. # Use this command to get an interactive terminal inside docker:
  47. #docker run -v $(shell pwd)/../../:/root/src -it test:latest /bin/bash
  48. podman run --rm -v $(shell pwd)/../../:/root/src -t test:latest make _aarch64-android
  49. cp -f ../../target/aarch64-linux-android/release/darkirc darkirc.aarch64-android
  50. # Invoked inside docker by the command above
  51. # We need to mount this directory as a volume using -v so docker can access it
  52. _aarch64-android:
  53. cargo build --release --target aarch64-linux-android --package darkirc
  54. clippy: all
  55. RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) clippy --target=$(RUST_TARGET) --release --package $(BIN) --tests
  56. clean:
  57. RUSTFLAGS="$(RUSTFLAGS)" $(CARGO) clean --target=$(RUST_TARGET) --release --package $(BIN)
  58. rm -f $(BIN) ../../$(BIN) $(BIN).android64 $(BIN).android32
  59. install: all
  60. mkdir -p $(DESTDIR)$(PREFIX)/bin
  61. cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
  62. chmod 755 $(DESTDIR)$(PREFIX)/bin/$(BIN)
  63. uninstall:
  64. rm -f $(DESTDIR)$(PREFIX)/bin/$(BIN)
  65. .PHONY: all clean install uninstall