Makefile.CrossWindows 5.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
# This makefile provides recipes to build a "portable" version of scrcpy for
# Windows.
#
# Here, "portable" means that the client and server binaries are expected to be
# anywhere, but in the same directory, instead of well-defined separate
# locations (e.g. /usr/bin/scrcpy and /usr/share/scrcpy/scrcpy-server.jar).
#
# In particular, this implies to change the location from where the client push
# the server to the device.

.PHONY: default clean \
	build-server \
	prepare-deps-win32 prepare-deps-win64 \
14 15
	build-win32 build-win32-noconsole \
	build-win64 build-win64-noconsole \
16 17 18 19 20 21 22 23
	dist-win32 dist-win64 \
	zip-win32 zip-win64 \
	sums release

GRADLE ?= ./gradlew

SERVER_BUILD_DIR := build-server
WIN32_BUILD_DIR := build-win32
24
WIN32_NOCONSOLE_BUILD_DIR := build-win32-noconsole
25
WIN64_BUILD_DIR := build-win64
26
WIN64_NOCONSOLE_BUILD_DIR := build-win64-noconsole
27 28 29 30 31 32 33 34 35 36 37 38 39 40

DIST := dist
WIN32_TARGET_DIR := scrcpy-win32
WIN64_TARGET_DIR := scrcpy-win64

VERSION := $(shell git describe --tags --always)
WIN32_TARGET := $(WIN32_TARGET_DIR)-$(VERSION).zip
WIN64_TARGET := $(WIN64_TARGET_DIR)-$(VERSION).zip

release: clean zip-win32 zip-win64 sums
	@echo "Release created in $(DIST)/."

clean:
	$(GRADLE) clean
41 42
	rm -rf "$(SERVER_BUILD_DIR)" "$(WIN32_BUILD_DIR)" "$(WIN64_BUILD_DIR)" \
		   "$(WIN32_NOCONSOLE_BUILD_DIR)" "$(WIN64_NOCONSOLE_BUILD_DIR)" "$(DIST)"
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

build-server:
	[ -d "$(SERVER_BUILD_DIR)" ] || ( mkdir "$(SERVER_BUILD_DIR)" && \
		meson "$(SERVER_BUILD_DIR)" \
			--buildtype release -Dbuild_app=false )
		ninja -C "$(SERVER_BUILD_DIR)"

prepare-deps-win32:
	-$(MAKE) -C prebuilt-deps prepare-win32

build-win32: prepare-deps-win32
	[ -d "$(WIN32_BUILD_DIR)" ] || ( mkdir "$(WIN32_BUILD_DIR)" && \
		meson "$(WIN32_BUILD_DIR)" \
			--cross-file cross_win32.txt \
			--buildtype release --strip -Db_lto=true \
			-Dbuild_server=false \
			-Doverride_server_path=scrcpy-server.jar )
	ninja -C "$(WIN32_BUILD_DIR)"

62 63 64 65 66 67 68 69 70 71
build-win32-noconsole: prepare-deps-win32
	[ -d "$(WIN32_NOCONSOLE_BUILD_DIR)" ] || ( mkdir "$(WIN32_NOCONSOLE_BUILD_DIR)" && \
		meson "$(WIN32_NOCONSOLE_BUILD_DIR)" \
			--cross-file cross_win32.txt \
			--buildtype release --strip -Db_lto=true \
			-Dbuild_server=false \
			-Dwindows_noconsole=true \
			-Doverride_server_path=scrcpy-server.jar )
	ninja -C "$(WIN32_NOCONSOLE_BUILD_DIR)"

72 73 74 75 76 77 78 79 80 81 82 83
prepare-deps-win64:
	-$(MAKE) -C prebuilt-deps prepare-win64

build-win64: prepare-deps-win64
	[ -d "$(WIN64_BUILD_DIR)" ] || ( mkdir "$(WIN64_BUILD_DIR)" && \
		meson "$(WIN64_BUILD_DIR)" \
			--cross-file cross_win64.txt \
			--buildtype release --strip -Db_lto=true \
			-Dbuild_server=false \
			-Doverride_server_path=scrcpy-server.jar )
	ninja -C "$(WIN64_BUILD_DIR)"

84 85 86 87 88 89 90 91 92 93 94
build-win64-noconsole: prepare-deps-win64
	[ -d "$(WIN64_NOCONSOLE_BUILD_DIR)" ] || ( mkdir "$(WIN64_NOCONSOLE_BUILD_DIR)" && \
		meson "$(WIN64_NOCONSOLE_BUILD_DIR)" \
			--cross-file cross_win64.txt \
			--buildtype release --strip -Db_lto=true \
			-Dbuild_server=false \
			-Dwindows_noconsole=true \
			-Doverride_server_path=scrcpy-server.jar )
	ninja -C "$(WIN64_NOCONSOLE_BUILD_DIR)"

dist-win32: build-server build-win32 build-win32-noconsole
95 96 97
	mkdir -p "$(DIST)/$(WIN32_TARGET_DIR)"
	cp "$(SERVER_BUILD_DIR)"/server/scrcpy-server.jar "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp "$(WIN32_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN32_TARGET_DIR)/"
98
	cp "$(WIN32_NOCONSOLE_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN32_TARGET_DIR)/scrcpy-noconsole.exe"
99 100 101 102 103 104 105 106 107
	cp prebuilt-deps/ffmpeg-4.0-win32-shared/bin/avutil-56.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win32-shared/bin/avcodec-58.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win32-shared/bin/avformat-58.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win32-shared/bin/swresample-3.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/adb.exe "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/AdbWinApi.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/AdbWinUsbApi.dll "$(DIST)/$(WIN32_TARGET_DIR)/"
	cp prebuilt-deps/SDL2-2.0.8/i686-w64-mingw32/bin/SDL2.dll "$(DIST)/$(WIN32_TARGET_DIR)/"

108
dist-win64: build-server build-win64 build-win64-noconsole
109 110 111
	mkdir -p "$(DIST)/$(WIN64_TARGET_DIR)"
	cp "$(SERVER_BUILD_DIR)"/server/scrcpy-server.jar "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp "$(WIN64_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN64_TARGET_DIR)/"
112
	cp "$(WIN64_NOCONSOLE_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN64_TARGET_DIR)/scrcpy-noconsole.exe"
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
	cp prebuilt-deps/ffmpeg-4.0-win64-shared/bin/avutil-56.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win64-shared/bin/avcodec-58.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win64-shared/bin/avformat-58.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/ffmpeg-4.0-win64-shared/bin/swresample-3.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/adb.exe "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/AdbWinApi.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/platform-tools/AdbWinUsbApi.dll "$(DIST)/$(WIN64_TARGET_DIR)/"
	cp prebuilt-deps/SDL2-2.0.8/x86_64-w64-mingw32/bin/SDL2.dll "$(DIST)/$(WIN64_TARGET_DIR)/"

zip-win32: dist-win32
	cd "$(DIST)"; \
		zip -r "$(WIN32_TARGET)" "$(WIN32_TARGET_DIR)"

zip-win64: dist-win64
	cd "$(DIST)"; \
		zip -r "$(WIN64_TARGET)" "$(WIN64_TARGET_DIR)"

sums:
	cd "$(DIST)"; \
R
Romain Vimont 已提交
132
		sha256sum *.zip > SHA256SUMS.txt