mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
120 lines
3.8 KiB
CMake
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
|
|
)
|