Makefile 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. toml = $@/Cargo.toml
  2. bin = $@/target/debug/$@
  3. doc-crate-toml=./.imag-documentation/Cargo.toml
  4. ECHO=$(shell which echo) -e
  5. MAKE=$(shell which make)
  6. BASH=$(shell which bash)
  7. CARGO=$(shell which cargo)
  8. BINS=$(shell find -maxdepth 1 -name "imag-*" -type d | sort)
  9. LIBS=$(shell find -maxdepth 1 -name "libimag*" -type d | sort)
  10. BIN_TARGETS=$(patsubst imag-%,,$(BINS))
  11. BIN_TARGET_TESTS=$(foreach x,$(BIN_TARGETS),$(x)-test)
  12. LIB_TARGETS=$(LIBS)
  13. LIB_TARGETS_TEST=$(foreach x,$(subst ./,,$(LIBS)),$(x)-test)
  14. TARGETS=$(BIN_TARGETS) $(LIB_TARGETS)
  15. RELEASE_TARGETS=$(foreach x,$(TARGETS),$(x)-release)
  16. INSTALL_TARGETS=$(foreach x,$(BIN_TARGETS),$(x)-install)
  17. UPDATE_TARGETS=$(foreach x,$(TARGETS),$(x)-update)
  18. CLEAN_TARGETS=$(foreach x,$(TARGETS),$(x)-clean)
  19. all: $(TARGETS) imag-bin
  20. @$(ECHO) "\t[ALL ]"
  21. imag-bin:
  22. @$(ECHO) "\t[IMAG ][BUILD ]"
  23. @$(CARGO) build --manifest-path ./bin/Cargo.toml
  24. imag-bin-release:
  25. @$(ECHO) "\t[IMAG ][RELEASE]"
  26. @$(CARGO) build --release --manifest-path ./bin/Cargo.toml
  27. imag-bin-update:
  28. @$(ECHO) "\t[IMAG ][UPDATE ]"
  29. @$(CARGO) update --manifest-path ./bin/Cargo.toml
  30. imag-bin-install:
  31. @$(ECHO) "\t[IMAG ][INSTALL]"
  32. @$(CARGO) install --force --path ./bin
  33. imag-bin-clean:
  34. @$(ECHO) "\t[IMAG ][CLEAN ]"
  35. @$(CARGO) clean --manifest-path ./bin/Cargo.toml
  36. release: $(RELEASE_TARGETS) imag-bin-release
  37. @$(ECHO) "\t[RELEASE]"
  38. bin: $(BIN_TARGETS) imag-bin
  39. @$(ECHO) "\t[ALLBIN ]"
  40. bin-test: $(BIN_TARGET_TESTS)
  41. lib: $(LIB_TARGETS)
  42. @$(ECHO) "\t[ALLLIB ]"
  43. lib-test: $(LIB_TARGETS_TEST)
  44. test: bin-test lib-test
  45. install: $(INSTALL_TARGETS) imag-bin-install
  46. @$(ECHO) "\t[INSTALL]"
  47. update: $(UPDATE_TARGETS) imag-bin-update
  48. @$(ECHO) "\t[UPDATE ]"
  49. clean: $(CLEAN_TARGETS) imag-bin-clean
  50. @$(ECHO) "\t[CLEAN ]"
  51. $(TARGETS): %: .FORCE
  52. @$(ECHO) "\t[CARGO ]:\t$@"
  53. @$(CARGO) build --manifest-path ./$@/Cargo.toml
  54. $(BIN_TARGET_TESTS): %-test: % .FORCE
  55. @$(ECHO) "\t[BINTEST]:\t$@"
  56. if [ -f $(subst -test,,$@)/tests/Makefile ]; then \
  57. $(MAKE) -C $(subst -test,,$@)/tests || exit 1;\
  58. fi;
  59. $(RELEASE_TARGETS): %: .FORCE
  60. @$(ECHO) "\t[RELEASE]:\t$(subst -release,,$@)"
  61. @$(CARGO) build --release --manifest-path ./$(subst -release,,$@)/Cargo.toml
  62. $(LIB_TARGETS_TEST): %: .FORCE
  63. @$(ECHO) "\t[TEST ]:\t$@"
  64. @$(CARGO) test --manifest-path ./$(subst -test,,$@)/Cargo.toml
  65. $(INSTALL_TARGETS): %: .FORCE imag-bin-install
  66. @$(ECHO) "\t[INSTALL]:\t$(subst -install,,$@)"
  67. @$(CARGO) install --force --path ./$(subst -install,,$@)
  68. $(UPDATE_TARGETS): %: .FORCE
  69. @$(ECHO) "\t[UPDATE ]:\t$(subst -update,,$@)"
  70. @$(CARGO) update --manifest-path ./$(subst -update,,$@)/Cargo.toml
  71. $(CLEAN_TARGETS): %: .FORCE
  72. @$(ECHO) "\t[CLEAN ]:\t$(subst -clean,,$@)"
  73. @$(CARGO) clean --manifest-path ./$(subst -clean,,$@)/Cargo.toml
  74. .FORCE: