-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
216 lines (180 loc) · 10.7 KB
/
Makefile
File metadata and controls
216 lines (180 loc) · 10.7 KB
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
.PHONY: clean build build-all package package-all publish publish-all
# Variables
VERSION = 0.0.42
NUGET_API_KEY ?= $(NUGET_API_KEY)
PS_API_KEY := $(PS_API_KEY)
MAVEN_AUTH := $(shell echo "$(MAVEN_USERNAME):$(MAVEN_PASSWORD)" | base64)
export CROSS_CONTAINER_ENGINE_NO_BUILDKIT = 1
export LD_LIBRARY_PATH=$(pwd)/target/lib:$LD_LIBRARY_PATH
# Bump version in all relevant files
bump:
@echo "Bumping version to $(VERSION) recursively..."
# Update Cargo.toml files (enforce version format X.Y.Z)
@find crates -name "Cargo.toml" -exec sed -i 's/^version = "[0-9]\+\.[0-9]\+\.[0-9]\+"/version = "$(VERSION)"/' {} \;
# Update version in lib.rs files (Rust source files)
#@find crates -name "*.rs" -exec sed -i -E "s/(^[[:space:]]*const VERSION: &str = )\"[0-9]+\.[0-9]+\.[0-9]+\";/\1\"$(VERSION)\";/g" {} \;
# Update version in .csproj files (C# project files)
@find dotnet -name "*.csproj" -exec sed -i 's/<version>[0-9]\+\.[0-9]\+\.[0-9]\+<\/version>/<version>$(VERSION)<\/version>/' {} \;
# Update version in JSON files (e.g., package.json)
@find node -name "package.json" -exec sed -i 's/"version": "[0-9]\+\.[0-9]\+\.[0-9]\+"/"version": "$(VERSION)"/' {} \;
# Update version in .toml files (e.g., pyproject.toml)
@find python -name "*.toml" -exec sed -i 's/^version = "[0-9]\+\.[0-9]\+\.[0-9]\+"/version = "$(VERSION)"/' {} \;
# Update version in Python setup files (setup.py)
@find python -name "setup.py" -exec sed -i 's/version="[0-9]\+\.[0-9]\+\.[0-9]\+"/version="$(VERSION)"/' {} \;
# Update version in Markdown files (e.g., README.md)
@find . -name "*.md" -exec sed -i 's/\b[0-9]\+\.[0-9]\+\.[0-9]\+\b/$(VERSION)/g' {} \;
# Clean up backup files created by sed
@find . -name "*.bak" -type f -delete
# Update version in pom.xml files (java project files)
# @find java -name "pom.xml" -exec sed -i 's/<version>[0-9]\+\.[0-9]\+\.[0-9]\+<\/version>/<version>$(VERSION)<\/version>/' {} \;
@find java -name "pom.xml" -exec sed -i '/<artifactId>client<\/artifactId>/{n;s/<version>[0-9]\+\.[0-9]\+\.[0-9]\+<\/version>/<version>${VERSION}<\/version>/}' {} \;
# Update version in conanfile.py (conan package manager)
@find c -name "*.py" -exec sed -i 's/version = "[0-9]\+\.[0-9]\+\.[0-9]\+"/version = "$(VERSION)"/' {} \;
# Update version in openiap.psd1 (powershell module)
@find pwsh -name "*.psm1" -exec sed -i "s/\$OpenIapVersion = '[0-9]\+\.[0-9]\+\.[0-9]\+'/\$OpenIapVersion = '$(VERSION)'/" {} \;
@find pwsh -name "*.psd1" -exec sed -i "s/ModuleVersion = '[0-9]\+\.[0-9]\+\.[0-9]\+'/ModuleVersion = '$(VERSION)'/" {} \;
# Update OPENIAP_VERSION in c/Makefile
@sed -i 's/^OPENIAP_VERSION := [0-9]\+\.[0-9]\+\.[0-9]\+/OPENIAP_VERSION := $(VERSION)/' c/Makefile
@echo "Version bump completed to $(VERSION)"
# Clean up
clean:
rm -rf node/lib node/*.tgz node/*.csv dotnet/lib dotnet/runtime dotnet/*.csv dotnet/bin dotnet/obj go/lib c/lib
rm -rf python/openiap/lib python/*.csv python/build python/dist java/jars
# rm -rf target/lib target/cli php/vendor
rm -rf java/lib java/target
rm -rf lib
cargo clean
# Create target directories
prepare:
mkdir -p target/lib target/cli
# Build Rust binaries
build-linux:
mkdir -p target/lib target/bootstrap target/cli lib
rm -rf target/release/
cross build --target x86_64-unknown-linux-gnu --release
cp target/x86_64-unknown-linux-gnu/release/libopeniap_clib.so target/lib/libopeniap-linux-x64.so
cp target/x86_64-unknown-linux-gnu/release/libopeniap_bootstrap.so target/bootstrap/bootstrap-linux-x64.so
cp target/x86_64-unknown-linux-gnu/release/openiap target/cli/linux-x64-openiap
cp target/x86_64-unknown-linux-gnu/release/openiap-bootstrap target/cli/linux-x64-openiap-bootstrap
rm -rf target/release/
cross build --target aarch64-unknown-linux-gnu --release
cp target/aarch64-unknown-linux-gnu/release/libopeniap_clib.so target/lib/libopeniap-linux-arm64.so
cp target/aarch64-unknown-linux-gnu/release/libopeniap_bootstrap.so target/bootstrap/bootstrap-linux-arm64.so
cp target/aarch64-unknown-linux-gnu/release/openiap target/cli/linux-arm64-openiap
cp target/aarch64-unknown-linux-gnu/release/openiap-bootstrap target/cli/linux-arm64-openiap-bootstrap
rm -rf target/release/
cross build --target x86_64-unknown-linux-musl --release
cp target/x86_64-unknown-linux-musl/release/libopeniap_clib.so target/lib/libopeniap-linux-musl-x64.so
cp target/x86_64-unknown-linux-musl/release/libopeniap_bootstrap.so target/bootstrap/bootstrap-linux-musl-x64.so
cp target/x86_64-unknown-linux-musl/release/openiap target/cli/linux-x64-musl-openiap
cp target/x86_64-unknown-linux-musl/release/openiap-bootstrap target/cli/linux-x64-musl-openiap-bootstrap
rm -rf target/release/
cross build --target aarch64-unknown-linux-musl --release
cp target/aarch64-unknown-linux-musl/release/libopeniap_clib.so target/lib/libopeniap-linux-musl-arm64.so
cp target/aarch64-unknown-linux-musl/release/libopeniap_bootstrap.so target/bootstrap/bootstrap-linux-musl-arm64.so
cp target/aarch64-unknown-linux-musl/release/openiap target/cli/linux-arm64-musl-openiap
cp target/aarch64-unknown-linux-musl/release/openiap-bootstrap target/cli/linux-arm64-musl-openiap-bootstrap
cp crates/clib/clib_openiap.h php/src/clib_openiap.h
cp crates/clib/clib_openiap.h c/include/clib_openiap.h
cp crates/clib/clib_openiap.h go/clib_openiap.h
cp target/bootstrap/* lib
build-macos:
mkdir -p target/lib target/cli target/bootstrap target/cli lib
rm -rf target/release/
cross build --target aarch64-apple-darwin --release
cp target/aarch64-apple-darwin/release/libopeniap_clib.dylib target/lib/libopeniap-macos-arm64.dylib
cp target/aarch64-apple-darwin/release/libopeniap_bootstrap.dylib target/bootstrap/bootstrap-macos-arm64.dylib
cp target/aarch64-apple-darwin/release/openiap target/cli/macos-arm64-openiap
cp target/aarch64-apple-darwin/release/openiap-bootstrap target/cli/macos-arm64-openiap-bootstrap
rm -rf target/release/
cross build --target x86_64-apple-darwin --release
cp target/x86_64-apple-darwin/release/libopeniap_clib.dylib target/lib/libopeniap-macos-x64.dylib
cp target/x86_64-apple-darwin/release/libopeniap_bootstrap.dylib target/bootstrap/bootstrap-macos-x64.dylib
cp target/x86_64-apple-darwin/release/openiap target/cli/macos-x64-openiap
cp target/x86_64-apple-darwin/release/openiap-bootstrap target/cli/macos-x64-openiap-bootstrap
build-windows:
mkdir -p target/lib target/cli target/bootstrap target/cli lib
rm -rf target/release/
cross build --target x86_64-pc-windows-gnu --release
cp target/x86_64-pc-windows-gnu/release/openiap_clib.dll target/lib/openiap-windows-x64.dll
cp target/x86_64-pc-windows-gnu/release/openiap_bootstrap.dll target/bootstrap/bootstrap-windows-x64.dll
cp target/x86_64-pc-windows-gnu/release/openiap.exe target/cli/windows-x64-openiap.exe
cp target/x86_64-pc-windows-gnu/release/openiap-bootstrap.exe target/cli/windows-x64-openiap-bootstrap.exe
rm -rf target/release/
cross build --target i686-pc-windows-gnu --release
cp target/i686-pc-windows-gnu/release/openiap_clib.dll target/lib/openiap-windows-i686.dll
cp target/i686-pc-windows-gnu/release/openiap_bootstrap.dll target/bootstrap/bootstrap-windows-i686.dll
cp target/i686-pc-windows-gnu/release/openiap.exe target/cli/windows-i686-openiap.exe
cp target/i686-pc-windows-gnu/release/openiap-bootstrap.exe target/cli/windows-i686-openiap-bootstrap.exe
build-java:
# (cd java && mvn clean package)
build-go:
(cd go && go build -o cli ./cmd/cli)
copy-lib:
rm -rf node/lib && mkdir -p node/lib && cp target/bootstrap/* node/lib
rm -rf dotnet/lib && mkdir -p dotnet/lib && cp target/bootstrap/* dotnet/lib
rm -rf python/openiap/lib && mkdir -p python/openiap/lib && cp target/bootstrap/* python/openiap/lib
rm -rf java/lib && mkdir -p java/lib && cp target/bootstrap/* java/lib
rm -rf c/lib && mkdir -p c/lib && cp target/lib/* c/lib
rm -rf go/lib && mkdir -p go/lib && cp target/lib/* go/lib && rm -rf go/lib/*.a
# Package language bindings
package-node:
# make build-linux && make copy-lib && make package-node
# npm install openiap-0.0.39.tgz
@echo "Building Node.js package"
(cd node && npm run build && npm pack)
package-dotnet:
# make build-linux && make copy-lib && make package-dotnet
# dotnet add package openiap --version 0.0.39 --source .
@echo "Building .NET package"
(cd dotnet && dotnet build --configuration Release openiap.csproj && dotnet pack -p:NuspecFile=openiap.nuspec --configuration Release openiap.csproj)
#(cd dotnet && dotnet build --configuration Release openiap-slim.csproj && dotnet pack -p:NuspecFile=openiap.nuspec --configuration Release openiap-slim.csproj)
package-python:
# make build-linux && make copy-lib && make package-python
@echo "Building Python package"
(cd python && python setup.py sdist)
package-java:
# make build-linux && make copy-lib && make package-java
# mvn install:install-file -Dfile=client-0.0.39-jar-with-dependencies.jar -DgroupId=com.openiap -DartifactId=client -Dversion=0.0.39 -Dpackaging=jar
# mvn compile exec:java -Dexec.mainClass="io.openiap.mainTestCli"
@echo "Building java jar"
(cd java && mvn clean package)
package-c:
conan create c -s os=Linux -s arch=x86_64
conan create c -s os=Linux -s arch=armv8
conan create c -s os=Macos -s arch=x86_64
conan create c -s os=Macos -s arch=armv8
conan create c -s os=Windows -s arch=x86
conan create c -s os=Windows -s arch=x86_64
publish-node:
(cd node && npm publish)
publish-dotnet:
dotnet nuget push dotnet/bin/Release/openiap.$(VERSION).nupkg --source https://api.nuget.org/v3/index.json --api-key $(NUGET_API_KEY)
# dotnet nuget push dotnet/bin/Release/openiap-slim.$(VERSION).nupkg --source https://api.nuget.org/v3/index.json --api-key $(NUGET_API_KEY)
publish-pwsh:
rm -rf pwsh/openiap/lib
@(pwsh -Command "Publish-Module -Path ./pwsh/openiap -NuGetApiKey $(PS_API_KEY)")
publish-python:
(cd python && python3 -m twine upload dist/*)
publish-java:
# no longer needed, we can simply use mvn
# (cd java/target/central-publishing && curl --request POST \
# --verbose \
# --header 'Authorization: Bearer $(MAVEN_AUTH)' \
# --form bundle=@central-bundle.zip \
# https://central.sonatype.com/api/v1/publisher/upload)
(cd java && mvn deploy)
publish-cargo:
cargo publish -p openiap-proto --allow-dirty
cargo publish -p openiap-client --allow-dirty
cargo publish -p openiap --allow-dirty
cargo publish -p openiap-clib --allow-dirty --no-verify
# Combined tasks
build-all: clean prepare build-linux build-macos build-windows build-java
package-all: copy-lib package-node package-dotnet package-python package-java
publish-all: copy-lib publish-node publish-dotnet publish-pwsh publish-python publish-java publish-cargo
build-and-package-all: build-all package-all
build-and-publish-all: build-all package-all publish-all
latest: build-all package-all publish-all
echo-done:
@echo "Build and publish process completed!"