From aedc2c2da956a0fbbee1f434bb7daa6fd2e284f5 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 27 May 2018 21:30:32 +0200 Subject: [PATCH] Also build "noconsole" binary for Windows On Windows, an application is either console or gui, it cannot be both. Scrcpy should be both: it outputs important information to console, but we still want to be able to ignore the console and launch it without a visible cmd.exe window. Therefore, build two binaries: - scrcpy.exe - scrcpy-noconsole.exe --- Makefile.CrossWindows | 31 ++++++++++++++++++++++++++++--- app/meson.build | 11 ++++++++++- meson_options.txt | 1 + 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Makefile.CrossWindows b/Makefile.CrossWindows index 3d6bc59e..f1197cd8 100644 --- a/Makefile.CrossWindows +++ b/Makefile.CrossWindows @@ -11,7 +11,8 @@ .PHONY: default clean \ build-server \ prepare-deps-win32 prepare-deps-win64 \ - build-win32 build-win64 \ + build-win32 build-win32-noconsole \ + build-win64 build-win64-noconsole \ dist-win32 dist-win64 \ zip-win32 zip-win64 \ sums release @@ -20,7 +21,9 @@ GRADLE ?= ./gradlew SERVER_BUILD_DIR := build-server WIN32_BUILD_DIR := build-win32 +WIN32_NOCONSOLE_BUILD_DIR := build-win32-noconsole WIN64_BUILD_DIR := build-win64 +WIN64_NOCONSOLE_BUILD_DIR := build-win64-noconsole DIST := dist WIN32_TARGET_DIR := scrcpy-win32 @@ -55,6 +58,16 @@ build-win32: prepare-deps-win32 -Doverride_server_path=scrcpy-server.jar ) ninja -C "$(WIN32_BUILD_DIR)" +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)" + prepare-deps-win64: -$(MAKE) -C prebuilt-deps prepare-win64 @@ -67,10 +80,21 @@ build-win64: prepare-deps-win64 -Doverride_server_path=scrcpy-server.jar ) ninja -C "$(WIN64_BUILD_DIR)" -dist-win32: build-server build-win32 +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 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)/" + cp "$(WIN32_NOCONSOLE_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN32_TARGET_DIR)/scrcpy-noconsole.exe" 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)/" @@ -80,10 +104,11 @@ dist-win32: build-server build-win32 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)/" -dist-win64: build-server build-win64 +dist-win64: build-server build-win64 build-win64-noconsole 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)/" + cp "$(WIN64_NOCONSOLE_BUILD_DIR)"/app/scrcpy.exe "$(DIST)/$(WIN64_TARGET_DIR)/scrcpy-noconsole.exe" 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)/" diff --git a/app/meson.build b/app/meson.build index ab3cbd0d..e092ce97 100644 --- a/app/meson.build +++ b/app/meson.build @@ -129,7 +129,16 @@ conf.set('HIDPI_SUPPORT', get_option('hidpi_support')) configure_file(configuration: conf, output: 'config.h') src_dir = include_directories('src') -executable('scrcpy', src, dependencies: dependencies, include_directories: src_dir, install: true) + +if get_option('windows_noconsole') + c_args = [ '-mwindows' ] + link_args = [ '-mwindows' ] +else + c_args = [] + link_args = [] +endif + +executable('scrcpy', src, dependencies: dependencies, include_directories: src_dir, install: true, c_args: c_args, link_args: link_args) ### TESTS diff --git a/meson_options.txt b/meson_options.txt index b154bd97..baacd19b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,5 +1,6 @@ option('build_app', type: 'boolean', value: true, description: 'Build the client') option('build_server', type: 'boolean', value: true, description: 'Build the server') +option('windows_noconsole', type: 'boolean', value: false, description: 'Disable console on Windows (pass -mwindows flag)') option('prebuilt_server', type: 'string', description: 'Path of the prebuilt server') option('override_server_path', type: 'string', description: 'Hardcoded path to find the server at runtime') option('skip_frames', type: 'boolean', value: true, description: 'Always display the most recent frame')