mirror of
https://github.com/xaionaro-go/streamctl.git
synced 2025-12-24 12:27:57 +08:00
255 lines
12 KiB
Makefile
255 lines
12 KiB
Makefile
|
|
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
|
|
endif
|
|
GOTAGS:=$(GOTAGS:,%=%)
|
|
|
|
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_LINKER_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
|
|
|
|
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:
|
|
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 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 ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0.zip && rm -f ffmpeg-n7.0-21-gfb8f0ea7b3-win64-gpl-shared-7.0.zip'
|
|
|
|
streampanel-linux-amd64: builddir
|
|
$(eval INSTALL_DEST?=build/streampanel-linux-amd64)
|
|
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build $(GOBUILD_FLAGS) -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) -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) -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) -o "$(INSTALL_DEST)" ./cmd/streampanel
|
|
|
|
3rdparty/arm64/termux-packages:
|
|
mkdir -p 3rdparty/arm64/
|
|
cd 3rdparty/arm64 && git clone --depth=1 -b feat/static_libav https://github.com/xaionaro/termux-packages
|
|
|
|
3rdparty/arm64/termux-packages/environment-ready: 3rdparty/arm64/termux-packages
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/update-docker.sh || /bin/true
|
|
|
|
cp 3rdparty/arm64/termux-patched-scripts/run-docker.sh \
|
|
3rdparty/arm64/termux-packages/scripts/run-docker.sh
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./scripts/setup-android-sdk.sh
|
|
|
|
# downloading dependencies (e.g. we do not need ccls,
|
|
# but we need the most of the dependencies of ccls)
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I gettext
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I ccls
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I termux-api
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I xdotool
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I xdg-utils
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I liblzma
|
|
|
|
if ! [ -f /data/data/com.termux/files/usr/lib/liblzma.a ]; then \
|
|
cd 3rdparty/arm64/termux-packages; \
|
|
./scripts/run-docker.sh rm -f /data/data/.built-packages/liblzma; \
|
|
./scripts/run-docker.sh ./build-package.sh -I liblzma; \
|
|
fi
|
|
|
|
if ! [ -f /data/data/com.termux/files/usr/lib/libiconv.a ]; then \
|
|
cd 3rdparty/arm64/termux-packages; \
|
|
./scripts/run-docker.sh rm -f /data/data/.built-packages/libiconv; \
|
|
./scripts/run-docker.sh ./build-package.sh -I libiconv; \
|
|
fi
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh -I libx11
|
|
|
|
# building what we need
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh ffmpeg
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh ./build-package.sh libxxf86vm
|
|
|
|
#cd 3rdparty/arm64/termux-packages && \
|
|
#./scripts/run-docker.sh ./build-package.sh vlc
|
|
|
|
# installing fyne
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh sudo apt update
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh sudo apt install -y golang-go
|
|
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh go install fyne.io/fyne/v2/cmd/fyne@latest
|
|
|
|
# avoiding fyne loading wrong GL libraries:
|
|
rm -f /data/data/com.termux/files/usr/lib/*lib*GL*
|
|
|
|
# marking to do not redo all the work above next time:
|
|
touch 3rdparty/arm64/termux-packages/environment-ready
|
|
|
|
dockerbuild-streampanel-android-arm64: 3rdparty/arm64/termux-packages/environment-ready
|
|
cd 3rdparty/arm64/termux-packages && \
|
|
./scripts/run-docker.sh 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
|
|
$(eval ANDROID_NDK_HOME=$(shell ls -d /home/builder/lib/android-ndk-*))
|
|
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" \
|
|
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='-ldl -lc -L$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/ -L/data/data/com.termux/files/usr/lib' \
|
|
ANDROID_NDK_HOME="$(ANDROID_NDK_HOME)" \
|
|
PATH="${PATH}:${HOME}/go/bin" \
|
|
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: 3rdparty/amd64/windows builddir
|
|
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 '-extldflags=$(WINDOWS_LINKER_FLAGS)'" -o build/windows-amd64/streampanel.exe ./cmd/streampanel/
|
|
cp 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/*.dll build/windows-amd64/
|
|
|
|
streampanel-windows-debug: 3rdparty/amd64/windows builddir
|
|
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 '-extldflags=$(WINDOWS_LINKER_FLAGS)'" -o build/windows-amd64/streampanel-debug.exe ./cmd/streampanel/
|
|
cp 3rdparty/amd64/windows/vlc-$(WINDOWS_VLC_VERSION)/*.dll build/windows-amd64/
|
|
|
|
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
|
|
|
|
builddir:
|
|
mkdir -p build
|