lsfg-vk/lsfg-vk-gen/CMakeLists.txt
2025-07-04 14:38:42 +02:00

120 lines
3.8 KiB
CMake

# dxvk subproject
include(ExternalProject)
ExternalProject_Add(dxvk_git
PREFIX ${CMAKE_BINARY_DIR}/dxvk
GIT_REPOSITORY "https://github.com/doitsujin/dxvk"
GIT_TAG "v2.6.2"
UPDATE_DISCONNECTED true
USES_TERMINAL_CONFIGURE true
USES_TERMINAL_BUILD true
CONFIGURE_COMMAND
cd ${CMAKE_BINARY_DIR}/dxvk/src/dxvk_git &&
sed -i s/private://
src/dxvk/dxvk_device.h &&
CFLAGS=-w CXXFLAGS=-w CC=clang CXX=clang++ meson setup
--buildtype "release"
--prefix "${CMAKE_BINARY_DIR}/dxvk/native/usr"
--strip
-Dbuild_id=false
--force-fallback-for=libdisplay-info
--wipe
${CMAKE_BINARY_DIR}/dxvk/build
BUILD_COMMAND
cd ${CMAKE_BINARY_DIR}/dxvk &&
ninja -C build install && # sorry cursed lol
echo "clang -shared -o libdxvkinternals.so $(find build/src/{dxbc,wsi,vulkan,dxvk,dxgi,spirv,util}/*.p -type f -name \\*.o)" > archive.sh &&
bash archive.sh
INSTALL_COMMAND ""
)
add_library(dxvk INTERFACE)
add_dependencies(dxvk dxvk_git)
target_link_directories(dxvk
INTERFACE ${CMAKE_BINARY_DIR}/dxvk/native/usr/lib
INTERFACE ${CMAKE_BINARY_DIR}/dxvk)
target_include_directories(dxvk SYSTEM
INTERFACE ${CMAKE_BINARY_DIR}/dxvk/native/usr/include/dxvk
INTERFACE ${CMAKE_BINARY_DIR}/dxvk/src/dxvk_git/src
INTERFACE ${CMAKE_BINARY_DIR}/dxvk/src/dxvk_git/include/spirv/include)
target_link_libraries(dxvk INTERFACE
dxvk_d3d11 dxvk_dxgi display-info dxvkinternals)
# pe-parse subproject
ExternalProject_Add(peparse_git
PREFIX ${CMAKE_BINARY_DIR}/peparse
GIT_REPOSITORY "https://github.com/trailofbits/pe-parse"
GIT_TAG "v2.1.1"
UPDATE_DISCONNECTED true
USES_TERMINAL_CONFIGURE true
USES_TERMINAL_BUILD true
CONFIGURE_COMMAND
cd ${CMAKE_BINARY_DIR}/peparse/src/peparse_git/pe-parser-library &&
CC=clang CXX=clang++ CXXFLAGS=-Wno-deprecated-declarations
cmake -B build -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DBUILD_SHARED_LIBS=1
BUILD_COMMAND
cd ${CMAKE_BINARY_DIR}/peparse/src/peparse_git/pe-parser-library &&
ninja -C build
INSTALL_COMMAND ""
)
add_library(peparse INTERFACE)
add_dependencies(peparse peparse_git)
target_link_directories(peparse
INTERFACE ${CMAKE_BINARY_DIR}/peparse/src/peparse_git/pe-parser-library/build)
target_include_directories(peparse SYSTEM
INTERFACE ${CMAKE_BINARY_DIR}/peparse/src/peparse_git/pe-parser-library/include)
target_link_libraries(peparse
INTERFACE pe-parse)
# main project
project(lsfg-vk-gen
VERSION 0.0.1
DESCRIPTION "lsfg-vk-gen: LSFG on Linux through Vulkan (backend)"
LANGUAGES CXX)
file(GLOB BACKEND_SOURCES
"src/core/*.cpp"
"src/pool/*.cpp"
"src/shaderchains/*.cpp"
"src/*.cpp"
)
add_library(lsfg-vk-gen SHARED ${BACKEND_SOURCES})
target_include_directories(lsfg-vk-gen
PRIVATE include
PUBLIC public)
target_link_libraries(lsfg-vk-gen
PUBLIC vulkan peparse crypto dxvk)
set_target_properties(lsfg-vk-gen
PROPERTIES CXX_CLANG_TIDY clang-tidy)
target_compile_options(lsfg-vk-gen PRIVATE
-Weverything
# disable compat c++ flags
-Wno-pre-c++20-compat-pedantic
-Wno-pre-c++17-compat
-Wno-c++98-compat-pedantic
-Wno-c++98-compat
# disable other flags
-Wno-missing-designated-field-initializers
-Wno-shadow # allow shadowing
-Wno-switch-enum # ignore missing cases
-Wno-switch-default # ignore missing default
-Wno-padded # ignore automatic padding
-Wno-exit-time-destructors # allow globals
-Wno-global-constructors
# required for vulkan
-Wno-cast-function-type-strict
# required for peparse
-Wno-unused-template
# required for dxvk (yeah don't worry about it)
-Qunused-arguments -Wl,--unresolved-symbols=ignore-all1
)