Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNik Reist <zeroability@tutanota.com>2020-06-06 13:01:46 +0300
committerDavide Beatrici <git@davidebeatrici.dev>2020-07-11 20:37:21 +0300
commit13e61b4dc317e6b94962d57f4e1de46d26a5ebb3 (patch)
treee5a2cc3bf3aaae656f19ee2f5c90bbba855d66dc /overlay
parent2ee48b07c0a446547727941bf3bda0d755cfb95c (diff)
overlay: build 32 bit library also in 64 bit builds on Windows
GCC and Clang provide the "-m32" and "-m64" options, which tell the compiler to build as 32 bit and 64 bit, respectively. Unfortunately MSVC doesn't provide similar options, thus this commit converts "overlay" from a subdirectory to a project. If the build is 32 bit, the project is processed a single time and compiles a 32 bit library. If the build is 64 bit, the project is processed two times and compiles a 64 bit and a 32 bit library.
Diffstat (limited to 'overlay')
-rw-r--r--overlay/CMakeLists.txt90
-rw-r--r--overlay/overlay_exe/CMakeLists.txt25
-rw-r--r--overlay/scripts/build_overlay_xcompile.cmd14
3 files changed, 112 insertions, 17 deletions
diff --git a/overlay/CMakeLists.txt b/overlay/CMakeLists.txt
index 47545e665..e95006ce0 100644
--- a/overlay/CMakeLists.txt
+++ b/overlay/CMakeLists.txt
@@ -2,8 +2,20 @@
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+option(BUILD_OVERLAY_XCOMPILE "Build an x86 overlay" OFF)
-add_subdirectory(overlay_exe)
+if(BUILD_OVERLAY_XCOMPILE)
+ cmake_minimum_required(VERSION 3.15)
+
+ set(version "1.4.0" CACHE STRING "Project version")
+
+ project(overlay_xcompile
+ VERSION ${version}
+ LANGUAGES CXX
+ )
+
+ include("${PARENT_SOURCE_DIR}/cmake/compiler.cmake")
+endif()
set(DX11_PIXEL_SHADERS "overlay11.ps")
set(DX11_VERTEX_SHADERS "overlay11.vs")
@@ -16,7 +28,7 @@ set(COMPILED_EFFECTS "overlay.hex")
set(OVERLAY_RC "mumble_ol.rc")
# We save the output name in a variable because it's used by configure_file()
-if(64_BIT)
+if(64_BIT AND NOT BUILD_OVERLAY_XCOMPILE)
set(OUTPUT_NAME "mumble_ol_x64")
else()
set(OUTPUT_NAME "mumble_ol")
@@ -63,8 +75,6 @@ add_custom_target(build-overlay-files ALL DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_DX11_PIXEL_SHADERS}"
)
-target_include_directories(overlay PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
-
add_dependencies(overlay build-overlay-files)
target_sources(overlay
@@ -93,14 +103,31 @@ target_sources(overlay
"overlay_whitelist.h"
"${CMAKE_CURRENT_BINARY_DIR}/${OVERLAY_RC}"
- "${3RDPARTY_DIR}/GL/glext.h"
)
-set_property(TARGET overlay PROPERTY OUTPUT_NAME ${OUTPUT_NAME})
-set_property(TARGET overlay PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+set_target_properties(overlay PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
+
+find_package(Boost REQUIRED)
-find_pkg(Boost REQUIRED)
-target_include_directories(overlay PRIVATE ${Boost_INCLUDE_DIRS})
+if(BUILD_OVERLAY_XCOMPILE)
+ set_target_properties(overlay PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${MUMBLE_BINARY_DIR})
+
+ target_include_directories(overlay
+ PRIVATE
+ ${Boost_INCLUDE_DIRS}
+ ${PARENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+else()
+ set_target_properties(overlay PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+ target_include_directories(overlay
+ PRIVATE
+ ${Boost_INCLUDE_DIRS}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+endif()
if(64_BIT)
add_subdirectory("${3RDPARTY_DIR}/minhook-src" "${CMAKE_CURRENT_BINARY_DIR}/minhook" EXCLUDE_FROM_ALL)
@@ -110,5 +137,48 @@ endif()
if(MSVC)
# Set "/MT" for release builds and "/MTd" for debug ones.
- set_property(TARGET overlay PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+ set_target_properties(overlay PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
+
+if(64_BIT AND MSVC)
+ include(ExternalProject)
+
+ if(CMAKE_GENERATOR MATCHES "Visual Studio")
+ ExternalProject_Add(overlay_xcompile
+ DOWNLOAD_COMMAND ""
+ CMAKE_GENERATOR ${CMAKE_GENERATOR}
+ CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ "-DVCPKG_TARGET_TRIPLET=x86-windows-static-md"
+ "-DPARENT_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
+ "-DMUMBLE_SOURCE_DIR=${CMAKE_SOURCE_DIR}/src/mumble"
+ "-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
+ "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
+ "-DBUILD_OVERLAY_XCOMPILE=ON"
+ "-Dsymbols=${symbols}"
+ ${CMAKE_SOURCE_DIR}/overlay
+ CMAKE_GENERATOR_PLATFORM "Win32"
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/overlay/overlay_xcompile-prefix
+ INSTALL_COMMAND ""
+ )
+ else()
+ ExternalProject_Add(overlay_xcompile
+ DOWNLOAD_COMMAND ""
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ${CMAKE_SOURCE_DIR}/overlay/scripts/build_overlay_xcompile.cmd
+ -G ${CMAKE_GENERATOR}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ "-DVCPKG_TARGET_TRIPLET=x86-windows-static-md"
+ "-DPARENT_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
+ "-DMUMBLE_SOURCE_DIR=${CMAKE_SOURCE_DIR}/src/mumble"
+ "-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
+ "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
+ "-DBUILD_OVERLAY_XCOMPILE=ON"
+ "-Dsymbols=${symbols}"
+ ${CMAKE_SOURCE_DIR}/overlay
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/overlay/overlay_xcompile-prefix
+ INSTALL_COMMAND ""
+ )
+ endif()
+endif()
+
+add_subdirectory(overlay_exe)
diff --git a/overlay/overlay_exe/CMakeLists.txt b/overlay/overlay_exe/CMakeLists.txt
index 53c71e80b..f3fc8e35c 100644
--- a/overlay/overlay_exe/CMakeLists.txt
+++ b/overlay/overlay_exe/CMakeLists.txt
@@ -8,13 +8,15 @@ set(OVERLAY_EXE_RC "overlay_exe.rc")
add_definitions("-DUNICODE" "-DWIN32_LEAN_AND_MEAN")
# We save the output name in a variable because it's used by configure_file()
-if(64_BIT)
+if(64_BIT AND NOT BUILD_OVERLAY_XCOMPILE)
set(OUTPUT_NAME "mumble_ol_helper_x64")
else()
set(OUTPUT_NAME "mumble_ol_helper")
endif()
-get_target_property(MUMBLE_SOURCE_DIR mumble SOURCE_DIR)
+if(NOT BUILD_OVERLAY_XCOMPILE)
+ get_target_property(MUMBLE_SOURCE_DIR mumble SOURCE_DIR)
+endif()
configure_file(${OVERLAY_EXE_RC} ${CMAKE_CURRENT_BINARY_DIR})
@@ -26,13 +28,22 @@ add_executable(overlay_exe WIN32
"${CMAKE_CURRENT_BINARY_DIR}/${OVERLAY_EXE_RC}"
)
-set_property(TARGET overlay_exe PROPERTY OUTPUT_NAME ${OUTPUT_NAME})
-set_property(TARGET overlay_exe PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+set_target_properties(overlay_exe PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
+
+if(BUILD_OVERLAY_XCOMPILE)
+ set_target_properties(overlay_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${MUMBLE_BINARY_DIR})
+
+ target_include_directories(overlay_exe PRIVATE ${PARENT_SOURCE_DIR}/overlay)
+else()
+ set_target_properties(overlay_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+
+ target_include_directories(overlay_exe PRIVATE ${CMAKE_SOURCE_DIR}/overlay)
+endif()
if(MSVC)
- set_property(TARGET overlay_exe PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+ set_target_properties(overlay_exe PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
-find_library(LIB_SHLWAPI "shlwapi")
-target_link_libraries(overlay_exe PRIVATE ${LIB_SHLWAPI})
+add_dependencies(overlay_exe overlay)
+target_link_libraries(overlay_exe PRIVATE Shlwapi.lib)
diff --git a/overlay/scripts/build_overlay_xcompile.cmd b/overlay/scripts/build_overlay_xcompile.cmd
new file mode 100644
index 000000000..622dacadd
--- /dev/null
+++ b/overlay/scripts/build_overlay_xcompile.cmd
@@ -0,0 +1,14 @@
+@echo off
+
+for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do (
+ set InstallDir=%%i
+)
+
+if exist "%InstallDir%\Common7\Tools\vsdevcmd.bat" (
+ "%InstallDir%\Common7\Tools\vsdevcmd.bat" -arch=x86 -host_arch=x64
+ cmake %*
+ cmake --build .
+ exit
+)
+
+exit