Skip to content

Commit

Permalink
add build-pgo make target (#741)
Browse files Browse the repository at this point in the history
  • Loading branch information
davidhewitt authored Jul 6, 2023
1 parent 3a9c162 commit 634087a
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 8 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ jobs:
python-version: ${{ matrix.python-version }}

- run: pip install -r tests/requirements.txt
- run: pip install -e . --config-settings=build-args='--profile dev'
- run: make build-dev

- run: pip freeze
- run: pytest
Expand Down Expand Up @@ -202,7 +202,7 @@ jobs:
- run: pip install -r tests/requirements-linting.txt
if: steps.cache-py.outputs.cache-hit != 'true'

- run: pip install .
- run: make build-dev

- run: pip freeze

Expand Down
51 changes: 45 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ black = black python/pydantic_core tests generate_self_schema.py wasm-preview/ru
ruff = ruff python/pydantic_core tests generate_self_schema.py wasm-preview/run_tests.py
mypy-stubtest = python -m mypy.stubtest pydantic_core._pydantic_core --allowlist .mypy-stubtest-allowlist

# using pip install cargo (via maturin via pip) doesn't get the tty handle
# so doesn't render color without some help
export CARGO_TERM_COLOR=$(shell (test -t 0 && echo "always") || echo "auto")
# maturin develop only makes sense inside a virtual env, is otherwise
# more or less equivalent to pip install -e just a little nicer
USE_MATURIN = $(shell [ "$$VIRTUAL_ENV" != "" ] && (which maturin))

.PHONY: install
install:
pip install -U pip wheel pre-commit
Expand All @@ -16,23 +23,55 @@ install-rust-coverage:
cargo install rustfilt coverage-prepare
rustup component add llvm-tools-preview

.PHONY: install-pgo
rustup component add llvm-tools-preview

.PHONY: build-dev
build-dev:
@rm -f python/pydantic_core/*.so
cargo build --features extension-module
@rm -f target/debug/lib_pydantic_core.d
@rm -f target/debug/lib_pydantic_core.rlib
@mv target/debug/lib_pydantic_core.* python/pydantic_core/_pydantic_core.so
ifneq ($(USE_MATURIN),)
maturin develop
else
pip install -v -e . --config-settings=build-args='--profile dev'
endif

.PHONY: build-prod
build-prod:
@rm -f python/pydantic_core/*.so
ifneq ($(USE_MATURIN),)
maturin develop --release
else
pip install -v -e .
endif

.PHONY: build-coverage
build-coverage:
rm -f python/pydantic_core/*.so
maturin develop -- -C instrument-coverage
@rm -f python/pydantic_core/*.so
ifneq ($(USE_MATURIN),)
RUSTFLAGS='-C instrument-coverage' maturin develop --release
else
RUSTFLAGS='-C instrument-coverage' pip install -v -e .
endif

.PHONY: build-pgo
build-pgo:
@rm -f python/pydantic_core/*.so
$(eval PROFDATA := $(shell mktemp -d))
ifneq ($(USE_MATURIN),)
RUSTFLAGS='-Cprofile-generate=$(PROFDATA)' maturin develop --release
else
RUSTFLAGS='-Cprofile-generate=$(PROFDATA)' pip install -v -e .
endif
pytest tests/benchmarks
$(eval LLVM_PROFDATA := $(shell rustup run stable bash -c 'echo $$RUSTUP_HOME/toolchains/$$RUSTUP_TOOLCHAIN/lib/rustlib/$$(rustc -Vv | grep host | cut -d " " -f 2)/bin/llvm-profdata'))
$(LLVM_PROFDATA) merge -o $(PROFDATA)/merged.profdata $(PROFDATA)
ifneq ($(USE_MATURIN),)
RUSTFLAGS='-Cprofile-use=$(PROFDATA)/merged.profdata' maturin develop --release
else
RUSTFLAGS='-Cprofile-use=$(PROFDATA)/merged.profdata' pip install -v -e .
endif
@rm -rf $(PROFDATA)


.PHONY: build-wasm
build-wasm:
Expand Down

0 comments on commit 634087a

Please sign in to comment.