-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
285 lines (225 loc) · 15.8 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
278
279
280
281
282
283
284
285
ENABLE_VLC?=true
ENABLE_LIBAV?=true
FORCE_DEBUG?=false
WINDOWS_VLC_VERSION?=3.0.21
ANDROID_NDK_VERSION?=r27b
GOTAGS:=
ifeq ($(ENABLE_LIBAV), true)
GOTAGS:=$(GOTAGS),with_libav
endif
ifeq ($(ENABLE_VLC), true)
GOTAGS:=$(GOTAGS),with_libvlc
endif
ifeq ($(FORCE_DEBUG), true)
GOTAGS:=$(GOTAGS),force_debug
else
GOTAGS:=$(GOTAGS),release
endif
GOTAGS:=$(GOTAGS:,%=%)
GOBUILD_FLAGS?=-buildvcs=true
ifneq ($(GOTAGS),)
GOBUILD_FLAGS+=-tags=$(GOTAGS)
FYNEBUILD_FLAGS+=--tags $(GOTAGS)
endif
GOPATH?=$(shell go env GOPATH)
WINDOWS_CGO_FLAGS?=-I$(PWD)/3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/sdk/include
WINDOWS_EXTLINKER_FLAGS?=-L$(PWD)/3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/sdk/lib -L$(PWD)/3rdparty/amd64/windows/ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0/lib
WINDOWS_PKG_CONFIG_PATH?=$(PWD)/3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/sdk/lib/pkgconfig
GIT_COMMIT?=$(shell git rev-list -1 HEAD)
GOVERSION_GE_1_23=$(shell go run ./tools/goversion/ ge 1.23.0)
VERSION_STRING?=$(shell git rev-list -1 HEAD)
BUILD_DATE_STRING?=$(shell date +%s)
LINKER_FLAGS?=-X=github.com/xaionaro-go/streamctl/pkg/buildvars.GitCommit=$(GIT_COMMIT) -X=github.com/xaionaro-go/streamctl/pkg/buildvars.Version=$(VERSION_STRING) -X=github.com/xaionaro-go/streamctl/pkg/buildvars.BuildDateString=$(BUILD_DATE_STRING) -X=github.com/xaionaro-go/streamctl/pkg/buildvars.TwitchClientID=$(TWITCH_CLIENT_ID) -X=github.com/xaionaro-go/streamctl/pkg/buildvars.TwitchClientSecret=$(TWITCH_CLIENT_SECRET)
LINKER_FLAGS_ANDROID?=$(LINKER_FLAGS)
LINKER_FLAGS_DARWIN?=$(LINKER_FLAGS)
LINKER_FLAGS_LINUX?=$(LINKER_FLAGS)
LINKER_FLAGS_WINDOWS?=$(LINKER_FLAGS) '-extldflags=$(WINDOWS_EXTLINKER_FLAGS)'
ifeq ($(GOVERSION_GE_1_23),true) # see https://github.com/wlynxg/anet/?tab=readme-ov-file#how-to-build-with-go-1230-or-later
LINKER_FLAGS_ANDROID+=-checklinkname=0
endif
all: streampanel-linux-amd64 streampanel-linux-arm64 streampanel-android-arm64 streampanel-windows
$(GOPATH)/bin/pkg-config-wrapper:
go install github.com/xaionaro-go/pkg-config-wrapper@5dd443e6c18336416c49047e2ba0002e26a85278
3rdparty/arm64/android-ndk-$(ANDROID_NDK_VERSION):
mkdir -p 3rdparty/arm64
cd 3rdparty/arm64 && wget https://dl.google.com/android/repository/android-ndk-$(ANDROID_NDK_VERSION)-linux.zip && unzip android-ndk-$(ANDROID_NDK_VERSION)-linux.zip && rm -f android-ndk-$(ANDROID_NDK_VERSION)-linux.zip
3rdparty/arm64/termux:
mkdir -p 3rdparty/arm64/termux
cd 3rdparty/arm64/termux && \
for PACKAGE in \
vlc_3.0.21-1_aarch64.deb \
vlc-static_3.0.21-1_aarch64.deb \
ffmpeg_6.1.2_aarch64.deb \
ffmpeg-static_6.1.2_aarch64.deb \
libvpx-static_1:1.14.1_aarch64.deb \
libwebp-static_1.4.0-rc1-0_aarch64.deb \
; do \
wget https://github.com/xaionaro/termux-prebuilt-packages/raw/refs/heads/main/$$PACKAGE && ar x $$PACKAGE && tar -xJvf data.tar.xz && rm -f data.tar.xz control.tar.xz debian-binary $$PACKAGE; \
done
3rdparty/amd64/windows/ready:
mkdir -p 3rdparty/amd64/windows
sh -c 'cd 3rdparty/amd64/windows && wget https://get.videolan.org/vlc/$(WINDOWS_VLC_VERSION)/win64/vlc-$(WINDOWS_VLC_VERSION)-win64.7z && 7z -y x vlc-$(WINDOWS_VLC_VERSION)-win64.7z && rm -f vlc-$(WINDOWS_VLC_VERSION)-win64.7z'
sh -c 'cd 3rdparty/amd64/windows && wget https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2024-04-30-12-51/ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0.zip && unzip -o ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0.zip && rm -f ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0.zip'
mkdir 3rdparty/amd64/windows/mpv
sh -c 'cd 3rdparty/amd64/windows/mpv && wget https://github.com/shinchiro/mpv-winbuild-cmake/releases/download/20241025/mpv-x86_64-20241025-git-5c59f8a.7z && 7z -y x mpv-x86_64-20241025-git-5c59f8a.7z && rm -f mpv-x86_64-20241025-git-5c59f8a.7z'
touch 3rdparty/amd64/windows/ready
windows-builddir: build/streampanel-windows-amd64
build/streampanel-windows-amd64:
mkdir -p build/streampanel-windows-amd64
windows-debug-builddir: build/streampanel-windows-debug-amd64
build/streampanel-windows-debug-amd64:
mkdir -p build/streampanel-windows-debug-amd64
windows-deps: build/streampanel-windows-amd64/libvlc.dll build/streampanel-windows-amd64/avdevice-61.dll build/streampanel-windows-amd64/mpv/mpv.exe
windows-debug-deps: build/streampanel-windows-debug-amd64/libvlc.dll build/streampanel-windows-debug-amd64/avdevice-61.dll build/streampanel-windows-debug-amd64/mpv/mpv.exe
build/streampanel-windows-amd64/libvlc.dll: windows-builddir 3rdparty/amd64/windows/ready
cp -av 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/*.dll 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/plugins build/streampanel-windows-amd64/
build/streampanel-windows-amd64/avdevice-61.dll: windows-builddir 3rdparty/amd64/windows/ready
cp -av 3rdparty/amd64/windows/ffmpeg*/bin/*.dll build/streampanel-windows-amd64/
build/streampanel-windows-amd64/mpv/mpv.exe: windows-builddir 3rdparty/amd64/windows/ready
mkdir -p build/streampanel-windows-amd64/mpv
cp -av 3rdparty/amd64/windows/mpv/*.exe 3rdparty/amd64/windows/mpv/*.dll build/streampanel-windows-amd64/mpv/
build/streampanel-windows-debug-amd64/libvlc.dll: windows-debug-builddir 3rdparty/amd64/windows/ready
cp -av 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/*.dll 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/plugins build/streampanel-windows-debug-amd64/
build/streampanel-windows-debug-amd64/avdevice-61.dll: windows-debug-builddir 3rdparty/amd64/windows/ready
cp -av 3rdparty/amd64/windows/ffmpeg*/bin/*.dll build/streampanel-windows-debug-amd64/
build/streampanel-windows-debug-amd64/mpv/mpv.exe: windows-debug-builddir 3rdparty/amd64/windows/ready
mkdir -p build/streampanel-windows-debug-amd64/mpv
cp -av 3rdparty/amd64/windows/mpv/*.exe 3rdparty/amd64/windows/mpv/*.dll build/streampanel-windows-debug-amd64/mpv/
streampanel-linux-amd64: builddir
$(eval INSTALL_DEST?=build/streampanel-linux-amd64)
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_LINUX)" -o "$(INSTALL_DEST)" ./cmd/streampanel
streampanel-linux-arm64: builddir
$(eval INSTALL_DEST?=build/streampanel-linux-arm64)
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_LINUX)" -o "$(INSTALL_DEST)" ./cmd/streampanel
streampanel-macos-amd64: builddir
$(eval INSTALL_DEST?=build/streampanel-macos-amd64)
CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_DARWIN)" -o "$(INSTALL_DEST)" ./cmd/streampanel
streampanel-macos-arm64: builddir
$(eval INSTALL_DEST?=build/streampanel-macos-arm64)
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_DARWIN)" -o "$(INSTALL_DEST)" ./cmd/streampanel
DOCKER_IMAGE?=xaionaro2/streampanel-android-builder
DOCKER_CONTAINER_NAME?=streampanel-android-builder
dockerbuilder-android-arm64:
docker pull $(DOCKER_IMAGE)
docker start $(DOCKER_IMAGE) >/dev/null 2>&1 || \
docker run \
--detach \
--init \
--name $(DOCKER_CONTAINER_NAME) \
--volume ".:/project" \
--tty \
$(DOCKER_IMAGE) >/dev/null 2>&1 || /bin/true
dockerbuild-streampanel-android-arm64: dockerbuilder-android-arm64
docker exec $(DOCKER_CONTAINER_NAME) make ENABLE_VLC="$(ENABLE_VLC)" ENABLE_LIBAV="$(ENABLE_LIBAV)" FORCE_DEBUG="$(FORCE_DEBUG)" -C /project streampanel-android-arm64-in-docker
checkconfig-android-in-docker:
@if [ "$(ENABLE_VLC)" != 'false' ]; then \
echo "VLC is not supported for Android builds, yet, please disable it with ENABLE_VLC=false."; \
exit 1; \
fi
checkconfig-android:
@if [ "$(ENABLE_VLC)" != 'false' ]; then \
echo "VLC is not supported for Android builds, yet, please disable it with ENABLE_VLC=false."; \
exit 1; \
fi
@if [ "$(ENABLE_LIBAV)" != 'false' ]; then \
echo "Building with LibAV support is not supported outside of the docker container yet. Please either disable LibAV with ENABLE_LIBAV=false or use `make dockerbuild-streampanel-android-arm64` instead."; \
exit 1; \
fi
streampanel-android-arm64-in-docker: build-streampanel-android-arm64-in-docker check-streampanel-android-arm64-static-cgo
build-streampanel-android-arm64-in-docker: checkconfig-android-in-docker builddir $(GOPATH)/bin/pkg-config-wrapper
go mod tidy
git config --global --add safe.directory /project
$(eval ANDROID_NDK_HOME=$(shell ls -d /home/builder/lib/android-ndk-* | tail -1))
cd cmd/streampanel && \
PKG_CONFIG_WRAPPER_LOG='/tmp/pkg_config_wrapper.log' \
PKG_CONFIG_WRAPPER_LOG_LEVEL='trace' \
PKG_CONFIG_LIBS_FORCE_STATIC='libav*,libvlc' \
PKG_CONFIG_ERASE="-fopenmp=*,-landroid,-lcamera2ndk,-lmediandk" \
PKG_CONFIG='$(GOPATH)/bin/pkg-config-wrapper' \
PKG_CONFIG_PATH='/data/data/com.termux/files/usr/lib/pkgconfig' \
CGO_CFLAGS='-I$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ -I/data/data/com.termux/files/usr/include -Wno-incompatible-function-pointer-types -Wno-unused-result -Wno-xor-used-as-pow' \
CGO_LDFLAGS='-v -Wl,-Bdynamic -ldl -lc -lcamera2ndk -lmediandk -L$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/ -L$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/24/ -L/data/data/com.termux/files/usr/lib' \
ANDROID_NDK_HOME="$(ANDROID_NDK_HOME)" \
PATH="${PATH}:${HOME}/go/bin" \
GOFLAGS="$(GOBUILD_FLAGS) -ldflags=$(shell echo ${LINKER_FLAGS_ANDROID} | tr " " ",")" \
fyne package $(FYNEBUILD_FLAGS) -release -os android/arm64 && mv streampanel.apk ../../build/streampanel-arm64.apk
streampanel-android-arm64-static-cgo: build-streampanel-android-arm64-static-cgo check-streampanel-android-arm64-static-cgo
build-streampanel-android-arm64-static-cgo: builddir $(GOPATH)/bin/pkg-config-wrapper 3rdparty/arm64/android-ndk-$(ANDROID_NDK_VERSION) 3rdparty/arm64/termux
$(eval ANDROID_NDK_HOME=$(PWD)/3rdparty/arm64/android-ndk-$(ANDROID_NDK_VERSION))
cd cmd/streampanel && \
PKG_CONFIG_LIBS_FORCE_STATIC='libav*,libvlc' \
PKG_CONFIG_ERASE="-fopenmp=*,-landroid" \
PKG_CONFIG='$(GOPATH)/bin/pkg-config-wrapper' \
PKG_CONFIG_PATH='$(PWD)/3rdparty/arm64/termux/data/data/com.termux/files/usr/lib/pkgconfig' \
CGO_CFLAGS='-I$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ -I$(PWD)/3rdparty/arm64/termux/data/data/com.termux/files/usr/include -Wno-incompatible-function-pointer-types -Wno-unused-result -Wno-xor-used-as-pow' \
CGO_LDFLAGS='-ldl -lc -L$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/ -L$(PWD)/3rdparty/arm64/termux/data/data/com.termux/files/usr/lib' \
ANDROID_NDK_HOME="$(ANDROID_NDK_HOME)" \
fyne package $(FYNEBUILD_FLAGS) -release -os android/arm64 && mv streampanel.apk ../../build/streampanel-arm64.apk
check-streampanel-android-arm64-static-cgo:
$(eval TEMP_DIR:=$(shell mktemp -d))
@echo "temp_dir:<$(TEMP_DIR)>"
@cp build/streampanel-arm64.apk "$(TEMP_DIR)/streampanel.zip"
@cd "$(TEMP_DIR)" && unzip streampanel.zip >/dev/null
@if readelf -d "$(TEMP_DIR)/lib/arm64-v8a/libstreampanel.so" | grep STATIC_TLS; then \
readelf -d "$(TEMP_DIR)/lib/arm64-v8a/libstreampanel.so"; \
echo "The resulting APK is linked in a wrong way, 'readlink -d' showed flag 'STATIC_TLS', so the application will crash when you will try to launch it."; \
rm -rf "$(TEMP_DIR)"; \
exit 1; \
fi
@if ! readelf -d "$(TEMP_DIR)/lib/arm64-v8a/libstreampanel.so" | grep libdl.so >/dev/null; then \
readelf -d "$(TEMP_DIR)/lib/arm64-v8a/libstreampanel.so"; \
echo "The resulting APK is linked in a wrong way, 'readlink -d' showed it does not use 'libdl.so', which likely means some wacky stuff happened and the application is not guaranteed to work."; \
rm -rf "$(TEMP_DIR)"; \
exit 1; \
fi
rm -rf "$(TEMP_DIR)"
streampanel-android-arm64: checkconfig-android builddir 3rdparty/arm64/android-ndk-$(ANDROID_NDK_VERSION)
$(eval ANDROID_NDK_HOME=$(PWD)/3rdparty/arm64/android-ndk-$(ANDROID_NDK_VERSION))
cd cmd/streampanel && ANDROID_NDK_HOME="$(ANDROID_NDK_HOME)" fyne package $(FYNEBUILD_FLAGS) -release -os android/arm64 && mv streampanel-arm64.apk ../../build/
install-android-arm64:
adb shell pm uninstall center.dx.streampanel >/dev/null 2>&1 || /bin/true
adb install build/streampanel-arm64.apk
streampanel-ios: builddir
cd cmd/streampanel && fyne package $(GOBUILD_FLAGS) -release -os ios && mv streampanel.ipa ../../build/
streampanel-windows-using-gobuild: windows-builddir windows-deps
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) CGO_ENABLED=1 CGO_LDFLAGS="-static" CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" CC=x86_64-w64-mingw32-gcc GOOS=windows go build $(GOBUILD_FLAGS) -ldflags "-H windowsgui $(LINKER_FLAGS_WINDOWS)" -o build/streampanel-windows-amd64/streampanel.exe ./cmd/streampanel/
streampanel-windows-debug-using-gobuild: windows-builddir windows-debug-deps
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) CGO_ENABLED=1 CGO_LDFLAGS="-static" CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" CC=x86_64-w64-mingw32-gcc GOOS=windows go build $(GOBUILD_FLAGS) -ldflags "-a $(LINKER_FLAGS_WINDOWS)" -o build/streampanel-windows-debug-amd64/streampanel-debug.exe ./cmd/streampanel/
streampanel-windows: windows-builddir windows-deps
cd cmd/streampanel && \
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) \
CGO_ENABLED=1 \
CGO_LDFLAGS="-static $(WINDOWS_EXTLINKER_FLAGS)" \
CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" \
CC=x86_64-w64-mingw32-gcc \
GOFLAGS="$(GOBUILD_FLAGS) -ldflags=$(shell echo ${LINKER_FLAGS_WINDOWS} | tr " " ",")" \
fyne package $(FYNEBUILD_FLAGS) -release -os windows && \
mv streampanel.exe ../../build/streampanel-windows-amd64/streampanel.exe
streampanel-windows-debug: streampanel-windows-debug-using-gobuild
streamd-linux-amd64: builddir
CGO_ENABLED=1 CGO_LDFLAGS="-static" GOOS=linux GOARCH=amd64 go build -o build/streamd-linux-amd64 ./cmd/streamd
streamcli-linux-amd64: builddir
CGO_ENABLED=0 CGO_LDFLAGS="-static" GOOS=linux GOARCH=amd64 go build -o build/streamcli-linux-amd64 ./cmd/streamcli
streamcli-linux-arm64: builddir
CGO_ENABLED=0 CGO_LDFLAGS="-static" GOOS=linux GOARCH=arm64 go build -o build/streamcli-linux-arm64 ./cmd/streamcli
player-windows: windows-builddir windows-deps
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) CGO_ENABLED=1 CGO_LDFLAGS="-static" CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" CC=x86_64-w64-mingw32-gcc GOOS=windows go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_WINDOWS)" -o build/streampanel-windows-amd64/player.exe ./pkg/player/cmd/player/
streamplayer-windows: windows-builddir windows-deps
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) CGO_ENABLED=1 CGO_LDFLAGS="-static" CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" CC=x86_64-w64-mingw32-gcc GOOS=windows go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_WINDOWS)" -o build/streampanel-windows-amd64/streamplayer.exe ./pkg/streamplayer/cmd/streamplayer/
builddir:
mkdir -p build
streampanel-windows-amd64.zip: streampanel-windows
sh -c 'cd build && zip -r streampanel-windows-amd64.zip streampanel-windows-amd64'
streampanel-windows-debug-amd64.zip: streampanel-windows-debug
sh -c 'cd build && zip -r streampanel-windows-debug-amd64.zip streampanel-windows-debug-amd64'
priv/android-apk.keystore:
mkdir -p priv
keytool -genkey -v -keystore priv/android-apk.keystore -alias streampanel -keyalg RSA -keysize 2048 -validity 36500
signer-sign-streampanel-arm64-apk: priv/android-apk.keystore
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA256 -keystore priv/android-apk.keystore build/streampanel-arm64.apk streampanel
subtitleswindow-linux-amd64: builddir
$(eval INSTALL_DEST?=build/subtitleswindow-linux-amd64)
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_LINUX)" -o "$(INSTALL_DEST)" ./pkg/subtitleswindow/cmd/subtitleswindow
subtitleswindow-windows-amd64: builddir windows-deps
$(eval INSTALL_DEST?=build/subtitleswindow-windows-amd64.exe)
PKG_CONFIG_PATH=$(WINDOWS_PKG_CONFIG_PATH) CGO_ENABLED=1 CGO_LDFLAGS="-static" CGO_CFLAGS="$(WINDOWS_CGO_FLAGS)" CC=x86_64-w64-mingw32-gcc GOOS=windows go build $(GOBUILD_FLAGS) -ldflags "$(LINKER_FLAGS_WINDOWS)" -o "$(INSTALL_DEST)" ./pkg/subtitleswindow/cmd/subtitleswindow