mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
build mostly static and organize build files
This commit is contained in:
parent
9e20702180
commit
b2e0f2cf11
6 changed files with 117 additions and 96 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,6 +2,7 @@
|
|||
/build
|
||||
|
||||
# ide/lsp files
|
||||
/.zed
|
||||
/.vscode
|
||||
/.clangd
|
||||
/.cache
|
||||
|
|
|
|||
|
|
@ -1,26 +1,24 @@
|
|||
cmake_minimum_required(VERSION 3.29)
|
||||
|
||||
# cmake options
|
||||
|
||||
set(CMAKE_CXX_COMPILER clang++)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
set(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# main project
|
||||
# subprojects
|
||||
include(cmake/FetchDXVK.cmake)
|
||||
include(cmake/FetchPeParse.cmake)
|
||||
|
||||
add_subdirectory(lsfg-vk-gen)
|
||||
|
||||
# main project
|
||||
project(lsfg-vk
|
||||
VERSION 0.0.1
|
||||
DESCRIPTION "lsfg-vk: LSFG on Linux through Vulkan"
|
||||
LANGUAGES CXX)
|
||||
|
||||
add_subdirectory(lsfg-vk-gen)
|
||||
|
||||
file(GLOB SOURCES
|
||||
"src/loader/*.cpp"
|
||||
"src/mini/*.cpp"
|
||||
|
|
@ -54,9 +52,4 @@ target_compile_options(lsfg-vk PRIVATE
|
|||
-Wno-cast-function-type-strict
|
||||
)
|
||||
|
||||
install(FILES "${CMAKE_BINARY_DIR}/peparse/src/peparse_git/pe-parser-library/build/libpe-parse.so" DESTINATION lib)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/dxvk/native/usr/lib/libdxvk_d3d11.so.0.20602" DESTINATION lib RENAME libdxvk_d3d11.so.0)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/dxvk/native/usr/lib/libdxvk_dxgi.so.0.20602" DESTINATION lib RENAME libdxvk_dxgi.so.0)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/dxvk/libdxbc.so" DESTINATION lib)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/liblsfg-vk.so" DESTINATION lib)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/lsfg-vk-gen/liblsfg-vk-gen.so" DESTINATION lib)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ By specifying an `LD_PRELOAD`, lsfg-vk can place itself inbetween your game and
|
|||
In order to compile LSFG, make sure you have the following components installed on your system:
|
||||
- Traditional build tools (+ bash, sed, git)
|
||||
- Clang compiler (this project does NOT compile easily with GCC)
|
||||
- Vulkan and SPIR-V header files
|
||||
- Vulkan header files
|
||||
- CMake build system
|
||||
- Meson build system (for DXVK)
|
||||
- Ninja build system (backend for CMake)
|
||||
|
|
|
|||
74
cmake/FetchDXVK.cmake
Normal file
74
cmake/FetchDXVK.cmake
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
include(ExternalProject)
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
set(BUILD_TYPE "release")
|
||||
set(STRIP_FLAG "--strip")
|
||||
else()
|
||||
set(BUILD_TYPE "debug")
|
||||
set(STRIP_FLAG "")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(dxvk_git
|
||||
GIT_REPOSITORY "https://github.com/doitsujin/dxvk"
|
||||
GIT_TAG "v2.6.2"
|
||||
UPDATE_DISCONNECTED true
|
||||
USES_TERMINAL_CONFIGURE true
|
||||
USES_TERMINAL_BUILD true
|
||||
BUILD_IN_SOURCE true
|
||||
CONFIGURE_COMMAND
|
||||
sed -i s/private://g
|
||||
src/dxvk/dxvk_shader.h &&
|
||||
CC=clang CXX=clang++ CFLAGS=-w CXXFLAGS=-w
|
||||
meson setup
|
||||
--buildtype ${BUILD_TYPE}
|
||||
--prefix <SOURCE_DIR>/build-native
|
||||
${STRIP_FLAG}
|
||||
-Dbuild_id=false
|
||||
--force-fallback-for=libdisplay-info
|
||||
--wipe
|
||||
build
|
||||
BUILD_COMMAND
|
||||
ninja -C build install &&
|
||||
mv build/src/dxvk/libdxvk.a build/src/dxvk/libldxvk.a &&
|
||||
cd build/src/dxgi/libdxvk_dxgi.so.0.20602.p &&
|
||||
ar rcs -o ../libdxgi.a
|
||||
dxgi_adapter.cpp.o dxgi_enums.cpp.o dxgi_factory.cpp.o
|
||||
dxgi_format.cpp.o dxgi_main.cpp.o dxgi_monitor.cpp.o
|
||||
dxgi_options.cpp.o dxgi_output.cpp.o dxgi_surface.cpp.o
|
||||
dxgi_swapchain.cpp.o &&
|
||||
cd ../../d3d11/libdxvk_d3d11.so.0.20602.p &&
|
||||
ar rcs -o ../libd3d11.a
|
||||
d3d11_annotation.cpp.o d3d11_blend.cpp.o d3d11_buffer.cpp.o
|
||||
d3d11_class_linkage.cpp.o d3d11_cmdlist.cpp.o d3d11_context.cpp.o
|
||||
d3d11_context_def.cpp.o d3d11_context_ext.cpp.o d3d11_context_imm.cpp.o
|
||||
d3d11_cuda.cpp.o d3d11_depth_stencil.cpp.o d3d11_device.cpp.o
|
||||
d3d11_enums.cpp.o d3d11_features.cpp.o d3d11_fence.cpp.o
|
||||
d3d11_gdi.cpp.o d3d11_initializer.cpp.o d3d11_input_layout.cpp.o
|
||||
d3d11_interop.cpp.o d3d11_main.cpp.o d3d11_on_12.cpp.o
|
||||
d3d11_options.cpp.o d3d11_query.cpp.o d3d11_rasterizer.cpp.o
|
||||
d3d11_resource.cpp.o d3d11_sampler.cpp.o d3d11_shader.cpp.o
|
||||
d3d11_state.cpp.o d3d11_state_object.cpp.o d3d11_swapchain.cpp.o
|
||||
d3d11_texture.cpp.o d3d11_util.cpp.o d3d11_video.cpp.o
|
||||
d3d11_view_dsv.cpp.o d3d11_view_rtv.cpp.o d3d11_view_srv.cpp.o
|
||||
d3d11_view_uav.cpp.o
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
ExternalProject_Get_Property(dxvk_git SOURCE_DIR)
|
||||
|
||||
add_library(dxvk INTERFACE)
|
||||
add_dependencies(dxvk dxvk_git)
|
||||
|
||||
target_link_directories(dxvk
|
||||
INTERFACE ${SOURCE_DIR}/build/src/dxvk
|
||||
INTERFACE ${SOURCE_DIR}/build/src/dxbc
|
||||
INTERFACE ${SOURCE_DIR}/build/src/dxgi
|
||||
INTERFACE ${SOURCE_DIR}/build/src/d3d11
|
||||
INTERFACE ${SOURCE_DIR}/build/src/spirv
|
||||
INTERFACE ${SOURCE_DIR}/build/src/util)
|
||||
target_include_directories(dxvk SYSTEM
|
||||
INTERFACE ${SOURCE_DIR}/build-native/include/dxvk
|
||||
INTERFACE ${SOURCE_DIR}/src
|
||||
INTERFACE ${SOURCE_DIR}/include/spirv/include)
|
||||
target_link_libraries(dxvk INTERFACE
|
||||
-Wl,--start-group dxgi d3d11 util ldxvk dxbc spirv -Wl,--end-group)
|
||||
32
cmake/FetchPeParse.cmake
Normal file
32
cmake/FetchPeParse.cmake
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
include(ExternalProject)
|
||||
|
||||
ExternalProject_Add(peparse_git
|
||||
GIT_REPOSITORY "https://github.com/trailofbits/pe-parse"
|
||||
GIT_TAG "v2.1.1"
|
||||
UPDATE_DISCONNECTED true
|
||||
USES_TERMINAL_CONFIGURE true
|
||||
USES_TERMINAL_BUILD true
|
||||
BUILD_IN_SOURCE true
|
||||
CONFIGURE_COMMAND
|
||||
cmake -S pe-parser-library -B build -G Ninja
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DCMAKE_C_COMPILER=clang
|
||||
-DCMAKE_CXX_COMPILER=clang++
|
||||
-DCMAKE_C_FLAGS=-fPIC
|
||||
-DCMAKE_CXX_FLAGS=-fPIC
|
||||
BUILD_COMMAND
|
||||
ninja -C build
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
ExternalProject_Get_Property(peparse_git SOURCE_DIR)
|
||||
|
||||
add_library(peparse INTERFACE)
|
||||
add_dependencies(peparse peparse_git)
|
||||
|
||||
target_link_directories(peparse
|
||||
INTERFACE ${SOURCE_DIR}/build)
|
||||
target_include_directories(peparse SYSTEM
|
||||
INTERFACE ${SOURCE_DIR}/pe-parser-library/include)
|
||||
target_link_libraries(peparse
|
||||
INTERFACE pe-parse)
|
||||
|
|
@ -1,83 +1,4 @@
|
|||
# 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://g
|
||||
src/dxvk/dxvk_shader.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 libdxbc.so $(find build/src/{dxbc,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)
|
||||
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
|
||||
dxbc)
|
||||
|
||||
# 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)
|
||||
project(lsfg-vk-gen LANGUAGES CXX)
|
||||
|
||||
file(GLOB BACKEND_SOURCES
|
||||
"src/core/*.cpp"
|
||||
|
|
@ -86,7 +7,7 @@ file(GLOB BACKEND_SOURCES
|
|||
"src/*.cpp"
|
||||
)
|
||||
|
||||
add_library(lsfg-vk-gen SHARED ${BACKEND_SOURCES})
|
||||
add_library(lsfg-vk-gen STATIC ${BACKEND_SOURCES})
|
||||
|
||||
target_include_directories(lsfg-vk-gen
|
||||
PRIVATE include
|
||||
|
|
@ -96,7 +17,7 @@ target_link_libraries(lsfg-vk-gen
|
|||
set_target_properties(lsfg-vk-gen
|
||||
PROPERTIES CXX_CLANG_TIDY clang-tidy)
|
||||
target_compile_options(lsfg-vk-gen PRIVATE
|
||||
-Weverything
|
||||
-Weverything -fPIC
|
||||
# disable compat c++ flags
|
||||
-Wno-pre-c++20-compat-pedantic
|
||||
-Wno-pre-c++17-compat
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue