-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
277 lines (227 loc) · 8.31 KB
/
Makefile
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
SHELL := /bin/bash
# Disable built-in rules and variables
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
NETWORK := local
###########################################################################
# OS we're running on
ifeq ($(OS),Windows_NT)
detected_OS := Windows
else
detected_OS := $(shell sh -c 'uname 2>/dev/null || echo Unknown')
endif
ifeq ($(detected_OS),Darwin) # Mac OS X (Intel)
OS += macos
DIDC += didc-macos
endif
ifeq ($(detected_OS),Linux) # Ubuntu
OS += linux
DIDC += didc-linux64
endif
ifeq ($(detected_OS),Windows_NT) # Windows (icpp supports it but you cannot run this Makefile)
OS += windows_cannot_run_make
endif
ifeq ($(detected_OS),Unknown) # Unknown
OS += unknown
endif
###########################################################################
# latest release of didc
VERSION_DIDC := $(shell curl --silent "https://api.github.com/repos/dfinity/candid/releases/latest" | grep -e '"tag_name"' | cut -c 16-25)
# version to install for clang
VERSION_CLANG := $(shell cat version_clang.txt)
###########################################################################
# Use some clang tools that come with wasi-sdk
WASI_SDK_COMPILER_VERSION := $(shell python -c "import sys; sys.path.append('src'); from src.icpp.version_wasi_sdk import __version__; print(__version__)")
WASI_SDK_COMPILER_ROOT := $(shell python -c "import sys; sys.path.append('src'); from src.icpp.config_default import WASI_SDK_COMPILER_ROOT; print(WASI_SDK_COMPILER_ROOT)")
CLANG_FORMAT = $(WASI_SDK_COMPILER_ROOT)/bin/clang-format
CLANG_TIDY = $(WASI_SDK_COMPILER_ROOT)/bin/clang-tidy
.PHONY: summary
summary:
@echo "-------------------------------------------------------------"
@echo OS=$(OS)
@echo VERSION_DIDC=$(VERSION_DIDC)
@echo VERSION_CLANG=$(VERSION_CLANG)
@echo WASI_SDK_COMPILER_VERSION=$(WASI_SDK_COMPILER_VERSION)
@echo WASI_SDK_COMPILER_ROOT=$(WASI_SDK_COMPILER_ROOT)
@echo CLANG_FORMAT=$(CLANG_FORMAT)
@echo CLANG_TIDY=$(CLANG_TIDY)
@echo "-------------------------------------------------------------"
###########################################################################
# CI/CD - Phony Makefile targets
#
.PHONY: all-tests
all-tests: all-static all-canister-native all-canister-deploy-local-pytest
.PHONY: all-canister-deploy-local-pytest
all-canister-deploy-local-pytest:
dfx identity use default
@python -m scripts.all_canister_deploy_local_pytest
.PHONY: all-canister-native
all-canister-native:
@python -m scripts.all_canister_native
.PHONY: all-static
all-static: \
cpp-format cpp-lint \
python-format python-lint python-type
CPP_AND_H_FILES = $(shell ls \
icpp-candid/src/icpp_candid/*/*.cpp icpp-candid/src/icpp_candid/*/*.h \
src/icpp/ic/*/*.cpp src/icpp/ic/*/*.h \
src/icpp/canisters/*/src/*.cpp src/icpp/canisters/*/src/*.h \
src/icpp/canisters/*/native/*.cpp src/icpp/canisters/*/native/*.h \
test/canisters/*/src/*.cpp test/canisters/*/src/*.h \
test/canisters/*/native/*.cpp test/canisters/*/native/*.h)
.PHONY: cpp-format
cpp-format:
@echo "---"
@echo "cpp-format"
$(CLANG_FORMAT) --style=file --verbose -i $(CPP_AND_H_FILES)
.PHONY: cpp-lint
cpp-lint:
@echo "---"
@echo "cpp-lint"
@echo "TO IMPLEMENT with clang-tidy"
.PHONY: dfx-canisters-of-project-local
dfx-canisters-of-project-local:
@$(eval CANISTER_WALLET := $(shell dfx identity get-wallet))
@$(eval CANISTER_CANDID_UI_LOCAL := $(shell dfx canister id __Candid_UI))
@$(eval CANISTER := $(shell dfx canister id $(CANISTER_NAME)))
@echo '-------------------------------------------------'
@echo "NETWORK : local"
@echo "cycles canister : $(CANISTER_WALLET)"
@echo "Candid UI canister : $(CANISTER_CANDID_UI_LOCAL)"
@echo "canister : $(CANISTER)"
@echo '-------------------------------------------------'
@echo 'View in browser at:'
@echo "Candid UI of canister : http://localhost:8000?canisterId=$(CANISTER_CANDID_UI_LOCAL)&id=$(CANISTER)"
.PHONY: dfx-canister-call
dfx-canister-call:
@dfx canister --network $(NETWORK) call --output $(CANISTER_OUTPUT) --type $(CANISTER_INPUT) $(CANISTER_NAME) $(CANISTER_METHOD) $(CANISTER_ARGUMENT)
.PHONY: dfx-start-local
dfx-start-local:
@dfx stop
@dfx start --clean
.PHONY: dfx-stop-local
dfx-stop-local:
@dfx stop
.PHONY: clean-dfx
clean-dfx:
rm -rf $(shell find . -name '.dfx' -type d)
.PHONY: clean-build
clean-build:
rm -rf build build-native build-native-unit
rm -rf $(shell find ./src -name 'build' -type d)
rm -rf $(shell find ./tests -name 'build' -type d)
.PHONY: python-clean
python-clean:
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
PYTHON_DIRS ?= test src/icpp
.PHONY: python-format
python-format:
@echo "---"
@echo "python-format"
python -m black $(PYTHON_DIRS)
.PHONY: python-lint
python-lint:
@echo "---"
@echo "python-lint"
python -m pylint --jobs=0 --rcfile=.pylintrc $(PYTHON_DIRS)
.PHONY: python-type
python-type:
@echo "---"
@echo "python-type"
python -m mypy --config-file .mypy.ini --show-column-numbers --strict $(PYTHON_DIRS)
###########################################################################
# Toolchain installation for .github/workflows
# Note for clang++
# This command does not contain latest LLVM version that ships with wasi-sdk
# sudo apt-get update && sudo apt-get install clang-$(VERSION_CLANG)
.PHONY: install-clang-ubuntu
install-clang-ubuntu:
@echo "Installing clang-$(VERSION_CLANG) compiler"
# sudo apt-get remove python3-lldb-14
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
echo | sudo ./llvm.sh $(VERSION_CLANG)
rm llvm.sh
@echo "Creating soft links for compiler executables"
sudo ln --force -s /usr/bin/clang-$(VERSION_CLANG) /usr/bin/clang
sudo ln --force -s /usr/bin/clang++-$(VERSION_CLANG) /usr/bin/clang++
# This installs ~/bin/dfx
# Make sure to source ~/.profile afterwards -> it adds ~/bin to the path if it exists
.PHONY: install-dfx
install-dfx:
DFXVM_INIT_YES=true sh -ci "$$(curl -fsSL https://sdk.dfinity.org/install.sh)"
.PHONY: install-didc
install-didc:
@echo "Installing didc $(VERSION_DIDC) ..."
sudo rm -rf /usr/local/bin/didc
wget https://github.com/dfinity/candid/releases/download/${VERSION_DIDC}/$(DIDC)
sudo mv $(DIDC) /usr/local/bin/didc
chmod +x /usr/local/bin/didc
@echo " "
@echo "Installed successfully in:"
@echo /usr/local/bin/didc
.PHONY: install-jp-ubuntu
install-jp-ubuntu:
sudo apt-get update && sudo apt-get install jp
.PHONY: install-jp-mac
install-jp-mac:
brew install jp
.PHONY: install-homebrew-mac
install-homebrew-mac:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
.PHONY: install-python
install-python:
pip install --upgrade pip
cd icpp-candid && rm -rf src/*.egg-info && pip install -e ".[dev]"
rm -rf src/*.egg-info
pip install -e ".[dev]"
.PHONY: install-python-w-demos
install-python-w-demos:
pip install --upgrade pip
cd icpp-candid && rm -rf src/*.egg-info && pip install -e ".[dev]"
rm -rf src/*.egg-info
pip install -e ".[dev]"
cd ../icpp-demos && pip install -r requirements.txt
.PHONY: install-python-w-icpp-llm
install-python-w-icpp-llm:
pip install --upgrade pip
cd icpp-candid && rm -rf src/*.egg-info && pip install -e ".[dev]"
rm -rf src/*.egg-info
pip install -e ".[dev]"
cd ../icpp_llm && pip install -r requirements.txt
.PHONY: install-python-w-llama_cpp_canister
install-python-w-llama_cpp_canister:
pip install --upgrade pip
cd icpp-candid && rm -rf src/*.egg-info && pip install -e ".[dev]"
rm -rf src/*.egg-info
pip install -e ".[dev]"
cd ../../../onicai/repos/llama_cpp_canister && pip install -r requirements.txt
# .PHONY:install-rust
# install-rust:
# @echo "Installing rust"
# curl https://sh.rustup.rs -sSf | sh -s -- -y
# @echo "Installing ic-cdk-optimizer"
# cargo install ic-cdk-optimizer
.PHONY: install-wabt
install-wabt:
sudo apt-get update && sudo apt-get install wabt
###########################################################################
# Building and publishing the pypi package
.PHONY: pypi-build
pypi-build:
rm -rf dist
python -m build
.PHONY: testpypi-upload
testpypi-upload:
twine upload --config-file .pypirc -r testpypi dist/*
.PHONY: testpypi-install
testpypi-install:
pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ icpp
.PHONY: pypi-upload
pypi-upload:
twine upload --config-file .pypirc dist/*
.PHONY: pypi-install
pypi-install:
pip install icpp