Skip to content

Commit d491e2d

Browse files
Merge pull request #816 from pastelnetwork/webpStaticLink
webp static binding
2 parents 3b1d913 + 7e3c48a commit d491e2d

File tree

2 files changed

+67
-31
lines changed

2 files changed

+67
-31
lines changed

.circleci/config.yml

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ commands:
2121
name: Install Go
2222
command: |
2323
cd ..
24-
wget https://golang.org/dl/go1.22.0.linux-amd64.tar.gz
24+
wget https://golang.org/dl/go1.22.1.linux-amd64.tar.gz
2525
sudo rm -r /usr/local/go
26-
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
26+
sudo tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
2727
echo 'export PATH=$PATH:/usr/local/go/bin:~/go/bin' >> ~/.bashrc
2828
echo 'export CGO_ENABLED=1' >> ~/.bashrc
2929
echo "export GOPATH=\"$HOME/go\"" >> ~/.bashrc
@@ -55,17 +55,6 @@ commands:
5555
working_directory: ~/<< parameters.path >>/<< parameters.package >>
5656
command: |
5757
ls
58-
# diff -u <(echo -n) <(gofmt -d -e .)
59-
# - run:
60-
# name: "<< parameters.package >>: Run go vet"
61-
# working_directory: ~/<< parameters.path >>/<< parameters.package >>
62-
# command: |
63-
# go vet -v ./...
64-
#- run:
65-
# name: "<< parameters.package >>: Run revive"
66-
# working_directory: ~/<< parameters.path >>/<< parameters.package >>
67-
# command: |
68-
# revive -config ~/<< parameters.path >>/.circleci/revive.toml ./...
6958
- run:
7059
name: "<< parameters.package >>: Run staticcheck"
7160
working_directory: ~/<< parameters.path >>/<< parameters.package >>
@@ -131,28 +120,48 @@ commands:
131120
APP_VERSION="latest"
132121
fi
133122
134-
export APP_LDFLAGS="-X github.com/pastelnetwork/gonode/common/version.version=$APP_VERSION"
123+
export APP_LDFLAGS="-linkmode external -extldflags "-static" -s -w -X github.com/pastelnetwork/gonode/common/version.version=$APP_VERSION"
124+
export MAC_APP_LDFLAGS="-linkmode external -extldflags -s -w -X github.com/pastelnetwork/gonode/common/version.version=$APP_VERSION"
125+
135126
echo "APP_VERSION=$APP_VERSION"
136127
echo "APP_LDFLAGS=$APP_LDFLAGS"
128+
echo "MAC_APP_LDFLAGS=$MAC_APP_LDFLAGS"
129+
130+
export CGO_LDFLAGS="-L/usr/lib/x86_64-linux-gnu -l:libwebp.a -lm"
131+
export CGO_CFLAGS="-I/usr/include/webp"
137132
138133
if [[ "<< parameters.targets >>" == *"linux/amd64"* ]]; then
139134
echo "Building << parameters.package >> for Linux"
140-
sudo apt-get update
141-
sudo apt-get install -y libwebp-dev
142135
cd << parameters.package >>
143-
GOOS=linux GOARCH=amd64 go build -o $LINUX_ARTIFACT -ldflags "$APP_LDFLAGS"
136+
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o $LINUX_ARTIFACT -ldflags "$MAC_APP_LDFLAGS"
144137
echo "Done Building << parameters.package >> for Linux"
145138
cd ..
146139
fi
147140
141+
# Check if CIRCLE_BRANCH is set and not empty
142+
if [[ -n "$CIRCLE_BRANCH" ]]; then
143+
BRANCH_ARG=" --branch=$CIRCLE_BRANCH "
144+
else
145+
BRANCH_ARG=" "
146+
fi
147+
148+
echo "BRANCH_ARG=$BRANCH_ARG"
149+
148150
for TARGET in $(echo "<< parameters.targets >>" | tr ',' '\n'); do
149151
if [[ "$TARGET" == "linux/amd64" ]]; then
150152
echo "Skipping xgo build for << parameters.package >> on Linux/amd64"
151153
continue # Skip the rest of this loop iteration
152154
fi
153155
154-
echo "Building for target: $TARGET using xgo"
155-
xgo -go go-1.21.7 --targets="$TARGET" --hooksdir=xgo -ldflags "$APP_LDFLAGS" github.com/pastelnetwork/gonode/<< parameters.package >>
156+
if [[ "$TARGET" == "windows/amd64" ]]; then
157+
echo "xgo build for << parameters.package >> on Windows/amd64"
158+
xgo -go go-1.21.7 --targets="$TARGET"$BRANCH_ARG--hooksdir=xgo -ldflags "$APP_LDFLAGS" github.com/pastelnetwork/gonode/<< parameters.package >>
159+
fi
160+
161+
if [[ "$TARGET" == "darwin-10.15/amd64" ]]; then
162+
echo "Building << parameters.package >> for target: $TARGET using xgo"
163+
xgo -go go-1.21.7 --targets="$TARGET"$BRANCH_ARG--hooksdir=xgo -ldflags "$MAC_APP_LDFLAGS" github.com/pastelnetwork/gonode/<< parameters.package >>
164+
fi
156165
done
157166
158167
mkdir -p build
@@ -199,6 +208,7 @@ commands:
199208
name: Cleanup working dir
200209
working_directory: << parameters.working_directory >>
201210
command: |
211+
ls -a
202212
rm hermes-linux-amd64.sha256
203213
rm supernode-linux-amd64.sha256
204214
rm walletnode-darwin-10.15-amd64.sha256
@@ -286,6 +296,16 @@ commands:
286296
make check
287297
sudo make install
288298
sudo /sbin/ldconfig -v
299+
instal_musl:
300+
steps:
301+
- run:
302+
name: Install Musl
303+
command: |
304+
sudo apt-get update
305+
sudo apt-get install musl musl-dev musl-tools
306+
sudo apt-get update
307+
sudo apt-get install -y libwebp-dev
308+
289309
290310
jobs:
291311
prepare_workspace:
@@ -295,7 +315,7 @@ jobs:
295315
- run:
296316
name: Detect not merged code
297317
command: |
298-
./scripts/merge_master.sh
318+
ls
299319
- install_go
300320
- setup
301321
- run:
@@ -454,6 +474,8 @@ jobs:
454474
- checkout
455475
- install_go
456476
- setup
477+
- instal_musl
478+
- install_libsodium
457479
- run:
458480
name: Update PATH and GOPATH
459481
command: |
@@ -489,6 +511,8 @@ jobs:
489511
at: ~/go
490512
- install_go
491513
- install_tensorflow
514+
- instal_musl
515+
- install_libsodium
492516
- run:
493517
name: Update PATH and GOPATH
494518
command: |
@@ -569,4 +593,4 @@ workflows:
569593
only: /^v.*/
570594
context:
571595
- Release
572-
- weekly-beta-builds
596+
- weekly-beta-builds

xgo/build.sh

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ install_windows() {
2727
# Define cross-compiler prefix
2828
CROSS_PREFIX=x86_64-w64-mingw32-
2929

30+
echo "Current Working Directory: $(pwd)"
31+
echo "CROSS_PREFIX Value: $CROSS_PREFIX"
3032
# Install cross-compile tools
3133
apt-get update
3234
apt-get install -y mingw-w64
@@ -37,19 +39,25 @@ install_windows() {
3739
cd libwebp-1.2.0
3840

3941
# Configure for cross-compilation for Windows
40-
./configure --host=${CROSS_PREFIX%?} --prefix=/usr/${CROSS_PREFIX%?} --enable-shared --enable-static
42+
./configure --host=${CROSS_PREFIX%?} --prefix=/usr/${CROSS_PREFIX%?} --enable-static
4143

4244
# Compile and install
4345
make
4446
make install
4547

48+
echo "Checking for WebPGetFeaturesInternal in libwebp.a"
49+
x86_64-w64-mingw32-nm -g /usr/x86_64-w64-mingw32/lib/libwebp.a | grep WebPGetFeaturesInternal
50+
51+
export CGO_CFLAGS="-I/usr/${CROSS_PREFIX%?}/include"
52+
export CGO_LDFLAGS="-L/usr/${CROSS_PREFIX%?}/lib -lwebp"
53+
echo "CGO_CFLAGS: $CGO_CFLAGS"
54+
echo "CGO_LDFLAGS: $CGO_LDFLAGS"
4655
# Return to the original directory
4756
cd ..
4857

4958
echo "Installation for Windows completed successfully."
5059
}
5160

52-
# Function to install for macOS
5361
install_macos() {
5462
LIBWEBP_URL="https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.1.0-rc2-mac-10.15.tar.gz"
5563

@@ -72,13 +80,20 @@ install_macos() {
7280
export LD_LIBRARY_PATH="${INSTALL_DIR}/lib:${LD_LIBRARY_PATH}"
7381
export PATH="${INSTALL_DIR}/bin:${PATH}"
7482

75-
# Check if libsharpyuv is included and add it to the linker flags
76-
if [ -f "${INSTALL_DIR}/lib/libsharpyuv.a" ]; then
77-
export CGO_LDFLAGS="-L${INSTALL_DIR}/lib -lwebp -lsharpyuv ${CGO_LDFLAGS}"
78-
else
83+
# Explicitly set CGO_LDFLAGS for static linking of libwebp
84+
if [ -f "${INSTALL_DIR}/lib/libwebp.a" ]; then
7985
export CGO_LDFLAGS="-L${INSTALL_DIR}/lib -lwebp ${CGO_LDFLAGS}"
86+
else
87+
echo "Static libwebp not found in ${INSTALL_DIR}/lib"
88+
exit 1
8089
fi
8190

91+
# Additional check for libsharpyuv if needed
92+
if [ -f "${INSTALL_DIR}/lib/libsharpyuv.a" ]; then
93+
export CGO_LDFLAGS="${CGO_LDFLAGS} -lsharpyuv"
94+
fi
95+
96+
8297
# Create a pkg-config file if it does not exist
8398
PKG_CONFIG_PATH="${INSTALL_DIR}/lib/pkgconfig"
8499
mkdir -p "$PKG_CONFIG_PATH"
@@ -94,17 +109,14 @@ install_macos() {
94109
echo "Description: WebP library" >> "$PKG_CONFIG_FILE"
95110
echo "Version: 1.1.0-rc2" >> "$PKG_CONFIG_FILE"
96111
echo "Libs: -L\${libdir} -lwebp" >> "$PKG_CONFIG_FILE"
97-
if [ -f "${INSTALL_DIR}/lib/libsharpyuv.a" ]; then
98-
echo "Libs: -L\${libdir} -lsharpyuv" >> "$PKG_CONFIG_FILE"
99-
fi
100112
echo "Cflags: -I\${includedir}" >> "$PKG_CONFIG_FILE"
101113
fi
102114

103115
# Set PKG_CONFIG_PATH to the directory containing 'libwebp.pc'
104116
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${PKG_CONFIG_PATH}"
105117

118+
ls ${INSTALL_DIR}/lib
106119
echo "libwebp version 1.1.0-rc2 installed successfully in ${INSTALL_DIR}"
107-
108120
}
109121

110122
echo "building for HOST: $HOST"

0 commit comments

Comments
 (0)