SHELL := bash .ONESHELL: .SHELLFLAGS := -eu -o pipefail -c .DELETE_ON_ERROR: MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --no-builtin-rules TESTJOBS := 4 OS:=$(shell uname -s) RELEASEFLAGS := WASMTARGET := bundler # or web ifeq ($(OS),Linux) TESTJOBS:=$(shell nproc) RELEASEFLAGS=--target x86_64-unknown-linux-musl endif ifeq ($(OS),FreeBSD) TESTJOBS:=$(shell sysctl -n hw.ncpu) endif ifeq ($(origin .RECIPEPREFIX), undefined) $(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later) endif .RECIPEPREFIX = > .PHONY: help help: ## List the available make targets. > @grep -h "##" $(MAKEFILE_LIST) | grep -v grep | sed -E 's/^([^:]*): *## */\1: /' .PHONY: build build: ## Make a debug build of the project. > cargo build .PHONY: release release: ## Make an optimized build of the project. > cargo build --release $(RELEASEFLAGS) .PHONY: wasm wasm: ## Build the parser as wasm. > cargo build --target=wasm32-unknown-unknown --profile wasm --bin wasm --features wasm > wasm-bindgen --target $(WASMTARGET) --out-dir target/wasm32-unknown-unknown/js target/wasm32-unknown-unknown/wasm/wasm.wasm .PHONY: clean clean: ## Delete the built binaries. > cargo clean > $(MAKE) -C docker/organic_development TARGET=builder clean > $(MAKE) -C docker/organic_development TARGET=format clean > $(MAKE) -C docker/organic_development TARGET=clippy clean > $(MAKE) -C docker/organic_development TARGET=wasm clean > $(MAKE) -C docker/organic_test TARGET=tester build .PHONY: format format: ## Format the code. > cargo fmt .PHONY: docker_format docker_format: ## Format the code using docker. > $(MAKE) -C docker/organic_development TARGET=format build > docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "organic-cargo-registry:/usr/local/cargo/registry" organic-development-format cargo fmt .PHONY: docker_clippy docker_clippy: ## Lint the code using docker. > $(MAKE) -C docker/organic_development TARGET=clippy build > docker run --rm -i -t --mount type=tmpfs,destination=/tmp -v "$(shell readlink -f .):/source" --workdir=/source --env CARGO_TARGET_DIR=/target -v "organic-cargo-registry:/usr/local/cargo/registry" organic-development-clippy cargo clippy --no-deps --all-targets --all-features -- -D warnings .PHONY: clippy clippy: ## Lint the code. > cargo clippy --no-deps --all-targets --all-features -- -D warnings .PHONY: test test: ## Run the test suite. > cargo test --no-default-features --features compare --no-fail-fast --lib --test test_loader -- --test-threads $(TESTJOBS) .PHONY: doc doc: ## Generate documentation. > cargo doc --no-deps --open --lib --release --all-features .PHONY: docker_test docker_test: ## Run the test suite using docker. > $(MAKE) -C docker/organic_test TARGET=tester build > docker run --init --rm -i -t --read-only -v "$$(readlink -f ./):/source:ro" --mount type=tmpfs,destination=/tmp --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source organic-test --no-default-features --features compare --no-fail-fast --lib --test test_loader -- --test-threads $(TESTJOBS) .PHONY: docker_wasm_test docker_wasm_test: ## Run the test suite with wasm tests. > $(MAKE) -C docker/organic_test TARGET=tester build > docker run --init --rm -i -t --read-only -v "$$(readlink -f ./):/source:ro" --mount type=tmpfs,destination=/tmp --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source organic-test --no-default-features --features compare,wasm_test --no-fail-fast --lib --test test_loader autogen_wasm_ -- --test-threads $(TESTJOBS) .PHONY: build_test build_test: > cargo build --no-default-features > cargo build --no-default-features --features compare > cargo build --no-default-features --features tracing > cargo build --no-default-features --features compare,tracing > cargo build --no-default-features --features compare,foreign_document_test > cargo build --no-default-features --features compare,tracing,foreign_document_test > cargo build --target wasm32-unknown-unknown --profile wasm --bin wasm --no-default-features --features wasm > cargo build --bin wasm_test --no-default-features --features wasm_test .PHONY: foreign_document_test foreign_document_test: > $(MAKE) -C docker/organic_test TARGET=foreign-document build > docker run --init --rm -i -t --read-only -v "$$(readlink -f ./):/source:ro" --mount type=tmpfs,destination=/tmp --mount source=cargo-cache,target=/usr/local/cargo/registry --mount source=rust-cache,target=/target --env CARGO_TARGET_DIR=/target -w /source organic-test-foreign-document .PHONY: dockerclean dockerclean: # Delete volumes created for running the tests in docker. This does not touch anything related to the jaeger docker container. > docker volume rm cargo-cache rust-cache .PHONY: integrationtest integrationtest: > cargo test --no-default-features --features compare --no-fail-fast --test test_loader -- --test-threads $(TESTJOBS) .PHONY: unittest unittest: > cargo test --no-default-features --lib -- --test-threads $(TESTJOBS) .PHONY: jaeger jaeger: # 4317 for OTLP gRPC, 4318 for OTLP HTTP. We currently use gRPC but I forward both ports regardless. # # These flags didn't help even though they seem like they would: --collector.queue-size=20000 --collector.num-workers=100 > docker run -d --rm --name organicdocker --read-only -p 4317:4317 -p 4318:4318 -p 16686:16686 -e COLLECTOR_OTLP_ENABLED=true jaegertracing/all-in-one:1.47 --collector.grpc-server.max-message-size=20000000 --collector.otlp.grpc.max-message-size=20000000 .PHONY: jaegerweb jaegerweb: > xdg-open 'http://localhost:16686' .PHONY: jaegerstop jaegerstop: > docker stop organicdocker