summaryrefslogtreecommitdiff
path: root/Makefile
blob: 3d18c2b4638193a4993ed611a03d2e8c9d26dd01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# This makefile does nothing but delegating the actual building to cmake.
PYTHON = python3

all:
	@mkdir -p build && cd build && cmake .. $(shell $(PYTHON) ./scripts/get_python_cmake_flags.py) && $(MAKE)

local:
	@./scripts/build_local.sh

android:
	@./scripts/build_android.sh

ios:
	@./scripts/build_ios.sh

clean: # This will remove ALL build folders.
	@rm -r build*/
	@$(RM) -r $(SHELLCHECK_GHA_GENERATED_FOLDER)

linecount:
	@cloc --read-lang-def=caffe.cloc caffe2 || \
		echo "Cloc is not available on the machine. You can install cloc with " && \
		echo "    sudo apt-get install cloc"

SHELLCHECK_GHA_GENERATED_FOLDER=.shellcheck_generated_gha
shellcheck-gha:
	@$(RM) -r $(SHELLCHECK_GHA_GENERATED_FOLDER)
	tools/extract_scripts.py --out=$(SHELLCHECK_GHA_GENERATED_FOLDER)
	tools/linter/run_shellcheck.sh $(SHELLCHECK_GHA_GENERATED_FOLDER)

generate-gha-workflows:
	.github/scripts/generate_ci_workflows.py
	$(MAKE) shellcheck-gha

shellcheck:
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'shellcheck' \
		--step "Regenerate workflows"
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'shellcheck' \
		--step "Assert that regenerating the workflows didn't change them"
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'shellcheck' \
		--step 'Extract scripts from GitHub Actions workflows'
	@$(PYTHON) tools/actions_local_runner.py \
		$(CHANGED_ONLY) \
		--job 'shellcheck'

setup_lint:
	$(PYTHON) tools/actions_local_runner.py --file .github/workflows/lint.yml \
		--job 'flake8-py3' --step 'Install dependencies' --no-quiet
	$(PYTHON) tools/actions_local_runner.py --file .github/workflows/lint.yml \
		--job 'cmakelint' --step 'Install dependencies' --no-quiet
	$(PYTHON) tools/actions_local_runner.py --file .github/workflows/lint.yml \
		--job 'mypy' --step 'Install dependencies' --no-quiet
	$(PYTHON) tools/actions_local_runner.py --file .github/workflows/lint.yml \
		--job 'shellcheck' --step 'Install Jinja2' --no-quiet

	@if [ "$$(uname)" = "Darwin" ]; then \
		if [ -z "$$(which brew)" ]; then \
			echo "'brew' is required to install ShellCheck, get it here: https://brew.sh "; \
			exit 1; \
		fi; \
		brew install shellcheck; \
	else \
		$(PYTHON) tools/actions_local_runner.py --file .github/workflows/lint.yml \
		--job 'shellcheck' --step 'Install ShellCheck' --no-quiet; \
	fi
	$(PYTHON) -mpip install jinja2 --user
	$(PYTHON) -mpip install -r tools/linter/clang_tidy/requirements.txt --user
	$(PYTHON) -m tools.linter.install.clang_tidy

quick_checks:
# TODO: This is broken when 'git config submodule.recurse' is 'true' since the
# lints will descend into third_party submodules
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'quick-checks' \
		--step 'Ensure no trailing spaces' \
		--step 'Ensure no tabs' \
		--step 'Ensure no non-breaking spaces' \
		--step 'Ensure canonical include' \
		--step 'Ensure no versionless Python shebangs' \
		--step 'Ensure no unqualified noqa' \
		--step 'Ensure GitHub PyPi dependencies are pinned' \
		--step 'Ensure no unqualified type ignore' \
		--step 'Ensure no direct cub include' \
		--step 'Ensure correct trailing newlines' \
		--step 'Ensure no raw cuda api calls'

flake8:
	@$(PYTHON) tools/actions_local_runner.py \
		$(CHANGED_ONLY) \
		--job 'flake8-py3'

mypy:
	@$(PYTHON) tools/actions_local_runner.py \
		$(CHANGED_ONLY) \
		--job 'mypy'

cmakelint:
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'cmakelint' \
		--step 'Run cmakelint'

clang-tidy:
	@$(PYTHON) tools/actions_local_runner.py \
		$(CHANGED_ONLY) \
		--job 'clang-tidy'

toc:
	@$(PYTHON) tools/actions_local_runner.py \
		--file .github/workflows/lint.yml \
		--job 'toc' \
		--step "Regenerate ToCs and check that they didn't change"

lint: flake8 mypy quick_checks cmakelint shellcheck

quicklint: CHANGED_ONLY=--changed-only
quicklint: mypy flake8 quick_checks cmakelint shellcheck clang-tidy