205 lines
6.2 KiB
CMake
205 lines
6.2 KiB
CMake
# Copyright 2020-2023 The Mumble Developers. All rights reserved.
|
|
# 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)
|
|
|
|
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
|
|
)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${3RDPARTY_DIR}/cmake-compiler-flags")
|
|
include("${MUMBLE_SOURCE_ROOT}/cmake/compiler.cmake")
|
|
endif()
|
|
|
|
set(DX11_PIXEL_SHADERS "overlay11.ps")
|
|
set(DX11_VERTEX_SHADERS "overlay11.vs")
|
|
set(EFFECTS "overlay.fx")
|
|
|
|
set(COMPILED_DX11_PIXEL_SHADERS "overlay11.ps.h")
|
|
set(COMPILED_DX11_VERTEX_SHADERS "overlay11.vs.h")
|
|
set(COMPILED_EFFECTS "overlay.hex")
|
|
|
|
set(OVERLAY_RC "${CMAKE_CURRENT_BINARY_DIR}/mumble_ol.rc")
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mumble_ol.rc.in" "${OVERLAY_RC}")
|
|
|
|
# We save the output name in a variable because it's used by configure_file()
|
|
if(64_BIT AND NOT BUILD_OVERLAY_XCOMPILE)
|
|
set(OUTPUT_NAME "mumble_ol_x64")
|
|
else()
|
|
set(OUTPUT_NAME "mumble_ol")
|
|
endif()
|
|
|
|
remove_definitions("-DUNICODE")
|
|
|
|
add_library(overlay SHARED)
|
|
|
|
# The overlay doesn't work well with unity builds
|
|
set_target_properties(overlay PROPERTIES UNITY_BUILD FALSE)
|
|
|
|
find_program(FXC "fxc" DOC "Effect-Compiler tool")
|
|
if(NOT FXC)
|
|
message(FATAL_ERROR "Effect-Compiler tool not found!")
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${COMPILED_DX11_PIXEL_SHADERS}
|
|
COMMAND ${FXC} "/Tps_5_0" "/O3" "/Vng_pixel_shader" "/Fh" "${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_DX11_PIXEL_SHADERS}" "${CMAKE_CURRENT_SOURCE_DIR}/${DX11_PIXEL_SHADERS}"
|
|
MAIN_DEPENDENCY ${DX11_PIXEL_SHADERS}
|
|
COMMENT "Compiling ${DX11_PIXEL_SHADERS}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${COMPILED_DX11_VERTEX_SHADERS}
|
|
COMMAND ${FXC} "/Tvs_5_0" "/O3" "/Vng_vertex_shader" "/Fh" "${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_DX11_VERTEX_SHADERS}" "${CMAKE_CURRENT_SOURCE_DIR}/${DX11_VERTEX_SHADERS}"
|
|
MAIN_DEPENDENCY ${DX11_VERTEX_SHADERS}
|
|
COMMENT "Compiling ${DX11_VERTEX_SHADERS}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${COMPILED_EFFECTS}
|
|
COMMAND ${FXC} "/Tfx_4_0" "/O3" "/Fh" "${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_EFFECTS}" "${CMAKE_CURRENT_SOURCE_DIR}/${EFFECTS}"
|
|
MAIN_DEPENDENCY ${EFFECTS}
|
|
COMMENT "Compiling ${EFFECTS}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(build-overlay-files ALL DEPENDS
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_EFFECTS}"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_DX11_VERTEX_SHADERS}"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${COMPILED_DX11_PIXEL_SHADERS}"
|
|
)
|
|
|
|
add_dependencies(overlay build-overlay-files)
|
|
|
|
target_sources(overlay
|
|
PRIVATE
|
|
"D11StateBlock.cpp"
|
|
"D11StateBlock.h"
|
|
"HardHook.cpp"
|
|
"HardHook.h"
|
|
"ancestor.cpp"
|
|
"ancestor.h"
|
|
"d3d9.cpp"
|
|
"d3d10.cpp"
|
|
"d3d11.cpp"
|
|
"dxgi.cpp"
|
|
"excludecheck.cpp"
|
|
"excludecheck.h"
|
|
"lib.cpp"
|
|
"lib.h"
|
|
"ods.cpp"
|
|
"ods.h"
|
|
"olsettings.cpp"
|
|
"olsettings.h"
|
|
"opengl.cpp"
|
|
"overlay_blacklist.h"
|
|
"overlay_launchers.h"
|
|
"overlay_whitelist.h"
|
|
|
|
"${OVERLAY_RC}"
|
|
)
|
|
|
|
set_target_properties(overlay PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
|
|
|
|
find_package(Boost REQUIRED)
|
|
|
|
if(BUILD_OVERLAY_XCOMPILE)
|
|
set_target_properties(overlay PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${MUMBLE_BINARY_DIR})
|
|
|
|
target_include_directories(overlay
|
|
PRIVATE
|
|
${Boost_INCLUDE_DIRS}
|
|
${MUMBLE_SOURCE_ROOT}
|
|
${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}
|
|
)
|
|
|
|
install(TARGETS overlay RUNTIME DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_client)
|
|
endif()
|
|
|
|
if(64_BIT AND NOT BUILD_OVERLAY_XCOMPILE)
|
|
add_subdirectory("${3RDPARTY_DIR}/minhook" "${CMAKE_CURRENT_BINARY_DIR}/minhook" EXCLUDE_FROM_ALL)
|
|
target_compile_definitions(overlay PRIVATE "USE_MINHOOK")
|
|
target_link_libraries(overlay PRIVATE minhook)
|
|
|
|
set_target_properties(minhook PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
|
endif()
|
|
|
|
if(MSVC)
|
|
# Set "/MT" for release builds and "/MTd" for debug ones.
|
|
set_target_properties(overlay PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
|
endif()
|
|
|
|
if(64_BIT AND MSVC)
|
|
include(ExternalProject)
|
|
|
|
string(REPLACE "x64" "x86" XCOMPILE_TRIPLET "${VCPKG_TARGET_TRIPLET}")
|
|
message(STATUS "Using cross-compilation triplet '${XCOMPILE_TRIPLET}'")
|
|
|
|
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=${XCOMPILE_TRIPLET}"
|
|
"-DMUMBLE_SOURCE_ROOT=${CMAKE_SOURCE_DIR}"
|
|
"-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
|
|
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
|
"-D3RDPARTY_DIR=${3RDPARTY_DIR}"
|
|
# Force MSVC, because CMake prioritizes MinGW over it.
|
|
"-DCMAKE_C_COMPILER=cl.exe"
|
|
"-DCMAKE_CXX_COMPILER=cl.exe"
|
|
"-DBUILD_OVERLAY_XCOMPILE=ON"
|
|
"-Dsymbols=${symbols}"
|
|
"-Dversion=${PROJECT_VERSION}"
|
|
${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=${XCOMPILE_TRIPLET}"
|
|
"-DMUMBLE_SOURCE_ROOT=${CMAKE_SOURCE_DIR}"
|
|
"-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
|
|
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
|
"-D3RDPARTY_DIR=${3RDPARTY_DIR}"
|
|
# Force MSVC, because CMake prioritizes MinGW over it.
|
|
"-DCMAKE_C_COMPILER=cl.exe"
|
|
"-DCMAKE_CXX_COMPILER=cl.exe"
|
|
"-DBUILD_OVERLAY_XCOMPILE=ON"
|
|
"-Dsymbols=${symbols}"
|
|
"-Dversion=${PROJECT_VERSION}"
|
|
${CMAKE_SOURCE_DIR}/overlay
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/overlay/overlay_xcompile-prefix
|
|
INSTALL_COMMAND ""
|
|
)
|
|
endif()
|
|
install(FILES ${CMAKE_BINARY_DIR}/mumble_ol.dll ${CMAKE_BINARY_DIR}/mumble_ol_helper.exe DESTINATION . COMPONENT mumble_client)
|
|
endif()
|
|
|
|
add_subdirectory(overlay_exe)
|