[Build] Convert build system to raw cmake and remove premake layer

This commit is contained in:
Herman S.
2026-03-04 15:28:01 +09:00
parent f1bfb9416d
commit 71c5702ee8
106 changed files with 1829 additions and 3249 deletions

View File

@@ -77,11 +77,6 @@ jobs:
- uses: actions/checkout@main
with:
fetch-depth: 0
- uses: actions/cache@main
id: cache
with:
key: ${{ hashFiles('tools/build/bin/premake5.exe') }}
path: tools/build/bin/premake5
- name: Cache Vulkan SDK
id: cache-vulkan-sdk-linux
uses: actions/cache@v4
@@ -95,7 +90,7 @@ jobs:
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
sudo apt-add-repository "deb http://apt.llvm.org/${UBUNTU_BASE}/ llvm-toolchain-${UBUNTU_BASE}-${{ matrix.LLVM_VERSION }} main"
sudo apt-get -y update
sudo apt-get -y install mesa-vulkan-drivers valgrind libc++-dev libc++abi-dev libgtk-3-dev libsdl2-dev libvulkan-dev libx11-xcb-dev clang-${{ matrix.LLVM_VERSION }} ninja-build spirv-tools
sudo apt-get -y install mesa-vulkan-drivers valgrind libc++-dev libc++abi-dev libgtk-3-dev libsdl2-dev libvulkan-dev libx11-xcb-dev clang-${{ matrix.LLVM_VERSION }} lld-${{ matrix.LLVM_VERSION }} ninja-build spirv-tools cmake
# Install Vulkan SDK
if [ '${{ steps.cache-vulkan-sdk-linux.outputs.cache-hit }}' != 'true' ]; then
@@ -112,11 +107,7 @@ jobs:
which spirv-opt && spirv-opt --version || echo "Warning: spirv-opt not found"
which spirv-dis || echo "Warning: spirv-dis not found"
git submodule update --init --depth=1 -j$(getconf _NPROCESSORS_ONLN) $(grep -oP '(?<=path = )(?!third_party\/(DirectXShaderCompiler|premake-(androidndk|export-compile-commands))).+' .gitmodules)
if [ '${{ steps.cache.outputs.cache-hit }}' != 'true' ]; then
./xenia-build.py premake
cp third_party/premake-core/bin/release/premake5 tools/build/bin
fi
git submodule update --init --depth=1 -j$(getconf _NPROCESSORS_ONLN) $(grep -oP '(?<=path = )(?!third_party\/DirectXShaderCompiler).+' .gitmodules)
- name: Build
env:
CC: clang-${{ matrix.LLVM_VERSION }}

View File

@@ -123,19 +123,19 @@ jobs:
echo "Warning: fxc.exe not found in Windows SDK"
}
git submodule update --init --depth=1 -j $env:NUMBER_OF_PROCESSORS (Select-String -CaseSensitive '(?<=path = )(?!third_party\/(premake-(androidndk|cmake|export-compile-commands))).+' .gitmodules).Matches.Value
git submodule update --init --depth=1 -j $env:NUMBER_OF_PROCESSORS (Select-String -CaseSensitive '(?<=path = ).+' .gitmodules).Matches.Value
- name: Build
run: python xenia-build.py build --config=Release --target=src\xenia-app
run: python xenia-build.py build --config=Release --target=xenia-app
- name: Prepare artifacts
id: prepare_artifacts
run: |
foreach ($file in 'build\bin\Windows\Release\xenia_canary.exe','build\bin\Windows\Release\xenia_canary.pdb') {
foreach ($file in 'build\bin\Windows\Release\xenia_canary.exe') {
if ((get-item $file).Length -le 100000) {
echo "::error::$file is too small."
}
}
robocopy . build\bin\Windows\Release LICENSE /r:0 /w:0
robocopy build\bin\Windows\Release artifacts\xenia_canary xenia_canary.exe xenia_canary.pdb LICENSE /r:0 /w:0
robocopy . build\bin\Windows\Release LICENSE /r:0 /w:0
robocopy build\bin\Windows\Release artifacts\xenia_canary xenia_canary.exe LICENSE /r:0 /w:0
If ($LastExitCode -le 7) { echo "LastExitCode = $LastExitCode";$LastExitCode = 0 }
- name: Upload xenia canary artifacts
if: steps.prepare_artifacts.outcome == 'success'

12
.gitmodules vendored
View File

@@ -7,16 +7,10 @@
[submodule "third_party/catch"]
path = third_party/catch
url = https://github.com/catchorg/Catch2.git
[submodule "third_party/premake-core"]
path = third_party/premake-core
url = https://github.com/premake/premake-core.git
[submodule "third_party/snappy"]
path = third_party/snappy
url = https://github.com/google/snappy.git
ignore = dirty
[submodule "third_party/premake-export-compile-commands"]
path = third_party/premake-export-compile-commands
url = https://github.com/xenia-project/premake-export-compile-commands.git
[submodule "third_party/discord-rpc"]
path = third_party/discord-rpc
url = https://github.com/discordapp/discord-rpc.git
@@ -50,9 +44,6 @@
[submodule "third_party/DirectXShaderCompiler"]
path = third_party/DirectXShaderCompiler
url = https://github.com/microsoft/DirectXShaderCompiler.git
[submodule "third_party/premake-cmake"]
path = third_party/premake-cmake
url = https://github.com/JoelLinn/premake-cmake.git
[submodule "third_party/date"]
path = third_party/date
url = https://github.com/HowardHinnant/date.git
@@ -63,9 +54,6 @@
path = third_party/FFmpeg
url = https://github.com/has207/FFmpeg.git
branch = xmaframes
[submodule "third_party/premake-androidndk"]
path = third_party/premake-androidndk
url = https://github.com/Triang3l/premake-androidndk.git
[submodule "third_party/FidelityFX-CAS"]
path = third_party/FidelityFX-CAS
url = https://github.com/GPUOpen-Effects/FidelityFX-CAS.git

231
CMakeLists.txt Normal file
View File

@@ -0,0 +1,231 @@
cmake_minimum_required(VERSION 3.20)
project(xenia LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
# Options
option(XENIA_BUILD_TESTS "Build test suites" OFF)
option(XENIA_BUILD_MISC "Build misc subprojects (trace viewers, shader compiler, vfs-dump, demos)" OFF)
# Multi-config generators (VS, Ninja Multi-Config)
get_property(_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_is_multi_config)
set(CMAKE_CONFIGURATION_TYPES "Checked;Debug;Release" CACHE STRING "" FORCE)
endif()
# Custom Checked configuration (ASan + debug runtime)
set(CMAKE_C_FLAGS_CHECKED "${CMAKE_C_FLAGS_DEBUG}" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_CHECKED "${CMAKE_STATIC_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
# Platform name for output paths
if(WIN32)
set(XE_PLATFORM_NAME "Windows")
else()
set(XE_PLATFORM_NAME "Linux")
endif()
# Output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/${XE_PLATFORM_NAME}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/${XE_PLATFORM_NAME}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/obj/${XE_PLATFORM_NAME}")
# Create scratch/ if needed
file(MAKE_DIRECTORY "${PROJECT_SOURCE_DIR}/scratch")
# Include helpers
include(cmake/XeniaHelpers.cmake)
# Global include directories (these apply to all targets via directory scope)
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/third_party
)
# Global defines
add_compile_definitions(
VULKAN_HPP_NO_TO_STRING
IMGUI_DISABLE_DEFAULT_FONT
IMGUI_USE_STB_SPRINTF
USE_CPP17 # Tabulate
)
# Static library define
add_compile_definitions(_LIB)
# ==============================================================================
# Platform-specific global settings
# ==============================================================================
if(MSVC)
# Global MSVC settings
add_compile_options(
/utf-8 # Build correctly on systems with non-Latin codepages
/wd4201 # Nameless struct/unions are ok
/arch:AVX # AVX vector extensions
/MP # Multi-processor compilation
)
add_compile_definitions(
_CRT_NONSTDC_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS
WIN32
_WIN64=1
_AMD64=1
UNICODE
_UNICODE
IMGUI_DISABLE_OBSOLETE_FUNCTIONS
)
add_link_options(
/ignore:4006 # Ignores complaints about empty obj files
/ignore:4221
)
# Global Windows system libraries
link_libraries(
ntdll wsock32 ws2_32 xinput comctl32 shcore shlwapi dxguid bcrypt
)
# Windows manifest for executables is handled per-target
# --- Per-configuration MSVC flags ---
# Checked
string(APPEND CMAKE_C_FLAGS_CHECKED " /RTCsu /fsanitize=address")
string(APPEND CMAKE_CXX_FLAGS_CHECKED " /RTCsu /fsanitize=address")
string(APPEND CMAKE_EXE_LINKER_FLAGS_CHECKED " /INCREMENTAL:NO")
add_compile_definitions($<$<CONFIG:Checked>:DEBUG>)
# Debug: use release runtime (/MD) for heap performance, matching premake
string(REPLACE "/MDd" "/MD" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
string(REPLACE "/MDd" "/MD" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
add_compile_definitions($<$<CONFIG:Debug>:DEBUG>)
add_compile_definitions($<$<CONFIG:Debug>:_NO_DEBUG_HEAP=1>)
# Checked or Debug: full symbols
string(APPEND CMAKE_C_FLAGS_CHECKED " /Zi")
string(APPEND CMAKE_CXX_FLAGS_CHECKED " /Zi")
# Debug already has /Zi by default
# Release
add_compile_definitions($<$<CONFIG:Release>:NDEBUG>)
add_compile_definitions($<$<CONFIG:Release>:_NO_DEBUG_HEAP=1>)
add_compile_options($<$<CONFIG:Release>:/Gw>)
add_compile_options($<$<CONFIG:Release>:/GS->) # NoBufferSecurityCheck
# Replace /Ob2 with /Ob3 in CMake's default Release flags
string(REPLACE "/Ob2" "/Ob3" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "/Ob2" "/Ob3" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
# Link-time optimization (whole program optimization)
add_compile_options($<$<CONFIG:Release>:/GL>)
add_link_options($<$<CONFIG:Release>:/LTCG>)
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
else()
# GCC/Clang (Linux)
add_compile_options(-mavx)
# Disable specific warnings for C++
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-Wno-switch>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-attributes>
)
# Clang-specific C++ warnings
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-register>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-volatile>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion>
)
# Check Clang version for newer warnings
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 20)
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-literal-operator>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-nontrivial-memcall>
)
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21)
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-Wno-character-conversion>
)
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# GCC-specific
add_compile_options(
$<$<COMPILE_LANGUAGE:CXX>:-Wno-unused-result>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-volatile>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-template-id-cdtor>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-return-type>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated>
-fpermissive # HACK
)
add_link_options(-fpermissive)
# GCC: do not use -Werror
endif()
# C-specific warnings
add_compile_options(
$<$<COMPILE_LANGUAGE:C>:-Wno-implicit-function-declaration>
)
# GTK3 via pkg-config
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-x11-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_compile_options(${GTK3_CFLAGS_OTHER})
# Global Linux libraries
link_libraries(stdc++fs dl lz4 pthread rt)
# Link groups for executables (resolves circular deps)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--start-group")
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -Wl,--end-group")
# --- Per-configuration Linux flags ---
# Checked
string(APPEND CMAKE_C_FLAGS_CHECKED " -fsanitize=address")
string(APPEND CMAKE_CXX_FLAGS_CHECKED " -fsanitize=address")
string(APPEND CMAKE_EXE_LINKER_FLAGS_CHECKED " -fsanitize=address")
add_compile_definitions(
$<$<CONFIG:Checked>:DEBUG>
$<$<CONFIG:Checked>:_GLIBCXX_DEBUG>
)
# Debug
add_compile_definitions(
$<$<CONFIG:Debug>:DEBUG>
$<$<CONFIG:Debug>:_NO_DEBUG_HEAP=1>
$<$<CONFIG:Debug>:_GLIBCXX_DEBUG>
)
# Release
add_compile_definitions(
$<$<CONFIG:Release>:NDEBUG>
$<$<CONFIG:Release>:_NO_DEBUG_HEAP=1>
)
add_compile_options($<$<CONFIG:Release>:-O3>)
# Link-time optimization (use lld to avoid system linker LTO plugin version mismatch)
add_compile_options($<$<CONFIG:Release>:-flto=thin>)
add_link_options($<$<CONFIG:Release>:-flto=thin>)
add_link_options($<$<CONFIG:Release>:-fuse-ld=lld>)
# No symbols in release on non-Windows
string(REPLACE "-g" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "-g" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
endif()
# ==============================================================================
# Subdirectories
# ==============================================================================
# Third-party libraries first (no -Werror applied to these)
add_subdirectory(third_party)
# Xenia source modules (xe_target_defaults applies -Werror)
add_subdirectory(src/xenia)
# Set default startup project for Visual Studio
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT xenia-app)

55
CMakePresets.json Normal file
View File

@@ -0,0 +1,55 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 20,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"displayName": "Ninja Multi-Config",
"generator": "Ninja Multi-Config",
"binaryDir": "${sourceDir}/build"
},
{
"name": "vs",
"displayName": "Visual Studio 2022",
"generator": "Visual Studio 17 2022",
"architecture": "x64",
"binaryDir": "${sourceDir}/build"
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "default",
"configuration": "Debug"
},
{
"name": "release",
"configurePreset": "default",
"configuration": "Release"
},
{
"name": "checked",
"configurePreset": "default",
"configuration": "Checked"
},
{
"name": "vs-debug",
"configurePreset": "vs",
"configuration": "Debug"
},
{
"name": "vs-release",
"configurePreset": "vs",
"configuration": "Release"
},
{
"name": "vs-checked",
"configurePreset": "vs",
"configuration": "Checked"
}
]
}

160
cmake/XeniaHelpers.cmake Normal file
View File

@@ -0,0 +1,160 @@
# XeniaHelpers.cmake - Helper functions for the Xenia build system.
# Replaces tools/build/scripts/*.lua
include(CMakeParseArguments)
# Platform suffix lists for file filtering
set(XE_PLATFORM_SUFFIXES
_win _linux _posix _gnulinux _x11 _gtk _android _mac
)
# xe_platform_sources(target base_path [RECURSIVE])
#
# Adds platform-filtered source files to a target.
# Globs *.h, *.cc, *.cpp, *.c, *.inc from base_path.
# Excludes all platform suffixes, then adds back the ones matching the current platform.
# Always excludes *_main.cc and *_test.cc.
function(xe_platform_sources target base_path)
set(options RECURSIVE)
cmake_parse_arguments(ARG "${options}" "" "" ${ARGN})
if(ARG_RECURSIVE)
set(glob_mode GLOB_RECURSE)
set(pattern "**")
else()
set(glob_mode GLOB)
set(pattern "*")
endif()
# Glob all source files
file(${glob_mode} _all_sources "${base_path}/*.h"
"${base_path}/*.cc"
"${base_path}/*.cpp"
"${base_path}/*.c"
"${base_path}/*.inc"
)
# Build exclude patterns
set(_excluded)
foreach(src ${_all_sources})
get_filename_component(_name_we ${src} NAME_WE)
# Exclude *_main.cc, *_test.cc, and *_demo.cc
if(_name_we MATCHES "_main$" OR _name_we MATCHES "_test$" OR _name_we MATCHES "_demo$")
list(APPEND _excluded ${src})
continue()
endif()
# Exclude all platform suffixes
foreach(suffix ${XE_PLATFORM_SUFFIXES})
if(_name_we MATCHES "${suffix}$")
list(APPEND _excluded ${src})
break()
endif()
endforeach()
endforeach()
# Remove excluded files
set(_sources ${_all_sources})
if(_excluded)
list(REMOVE_ITEM _sources ${_excluded})
endif()
# Add back platform-specific files
if(WIN32)
file(${glob_mode} _plat_sources "${base_path}/*_win.h"
"${base_path}/*_win.cc"
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
file(${glob_mode} _plat_sources "${base_path}/*_posix.h"
"${base_path}/*_posix.cc"
"${base_path}/*_linux.h"
"${base_path}/*_linux.cc"
"${base_path}/*_gnulinux.h"
"${base_path}/*_gnulinux.cc"
"${base_path}/*_x11.h"
"${base_path}/*_x11.cc"
"${base_path}/*_gtk.h"
"${base_path}/*_gtk.cc"
)
endif()
list(APPEND _sources ${_plat_sources})
target_sources(${target} PRIVATE ${_sources})
endfunction()
# xe_target_defaults(target)
#
# Applies xenia-specific compile settings to a target:
# - Fatal warnings (-Werror / /WX)
# - Common include directories
function(xe_target_defaults target)
target_include_directories(${target} PRIVATE
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/third_party
)
if(MSVC)
target_compile_options(${target} PRIVATE /WX)
elseif(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# GCC is too noisy for -Werror; only apply to Clang
target_compile_options(${target} PRIVATE -Werror)
endif()
endfunction()
# xe_force_c(files...)
#
# Forces the given source files to compile as C.
function(xe_force_c)
set_source_files_properties(${ARGN} PROPERTIES LANGUAGE C)
endfunction()
# xe_force_cxx(files...)
#
# Forces the given source files to compile as C++.
function(xe_force_cxx)
set_source_files_properties(${ARGN} PROPERTIES LANGUAGE CXX)
endfunction()
# xe_test_suite(name base_path LINKS lib1 lib2 ...)
#
# Creates a Catch2 test executable from *_test.cc files in base_path.
function(xe_test_suite name base_path)
cmake_parse_arguments(ARG "" "" "LINKS" ${ARGN})
file(GLOB _test_sources CONFIGURE_DEPENDS "${base_path}/*_test.cc")
if(NOT _test_sources)
return()
endif()
add_executable(${name}
${_test_sources}
${PROJECT_SOURCE_DIR}/tools/build/src/test_suite_main.cc
)
# Add platform-specific console app main
if(WIN32)
target_sources(${name} PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc)
else()
target_sources(${name} PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_posix.cc)
endif()
target_compile_definitions(${name} PRIVATE
"XE_TEST_SUITE_NAME=\"${name}\""
)
target_include_directories(${name} PRIVATE
${PROJECT_SOURCE_DIR}/tools/build
${PROJECT_SOURCE_DIR}/tools/build/src
${PROJECT_SOURCE_DIR}/tools/build/third_party/catch/include
)
if(ARG_LINKS)
target_link_libraries(${name} PRIVATE ${ARG_LINKS})
endif()
xe_target_defaults(${name})
if(MSVC)
# Disable Edit and Continue - breaks Catch2 __LINE__ usage
target_compile_options(${name} PRIVATE /Zi)
endif()
endfunction()

View File

@@ -1,384 +0,0 @@
include("tools/build")
if _ACTION == "export-compile-commands" then
require("third_party/premake-export-compile-commands/export-compile-commands")
end
if os.istarget("android") then
require("third_party/premake-androidndk/androidndk")
end
if _ACTION == "cmake" then
require("third_party/premake-cmake/cmake")
end
location(build_root)
targetdir(build_bin)
objdir(build_obj)
-- Define variables for enabling specific submodules
-- Todo: Add changing from xb command
enableTests = false
enableMiscSubprojects = false
-- Define an ARCH variable
-- Only use this to enable architecture-specific functionality.
if os.istarget("linux") then
ARCH = os.outputof("uname -p")
else
ARCH = "unknown"
end
includedirs({
".",
"src",
"third_party",
})
defines({
"VULKAN_HPP_NO_TO_STRING",
"IMGUI_DISABLE_DEFAULT_FONT",
--"IMGUI_USE_WCHAR32",
"IMGUI_USE_STB_SPRINTF",
--"IMGUI_ENABLE_FREETYPE",
"USE_CPP17", -- Tabulate
})
cdialect("C17")
cppdialect("C++20")
symbols("On")
fatalwarnings("All")
-- TODO(DrChat): Find a way to disable this on other architectures.
if ARCH ~= "ppc64" then
filter("architecture:x86_64")
vectorextensions("AVX")
filter({})
end
filter("kind:StaticLib")
defines({
"_LIB",
})
filter("configurations:Checked")
runtime("Debug")
sanitize("Address")
flags("NoIncrementalLink")
editandcontinue("Off")
staticruntime("Off")
optimize("Off")
removedefines({
"IMGUI_USE_STB_SPRINTF",
})
defines({
"DEBUG",
})
filter({"configurations:Checked", "platforms:Windows"}) -- "toolset:msc"
buildoptions({
"/RTCsu", -- Full Run-Time Checks.
})
filter({"configurations:Checked or Debug", "platforms:Linux"})
defines({
"_GLIBCXX_DEBUG", -- libstdc++ debug mode
})
filter({"configurations:Checked or Debug", "platforms:Windows"}) -- "toolset:msc"
symbols("Full")
filter("configurations:Debug")
runtime("Release")
optimize("Off")
defines({
"DEBUG",
"_NO_DEBUG_HEAP=1",
})
filter("configurations:Release")
runtime("Release")
defines({
"NDEBUG",
"_NO_DEBUG_HEAP=1",
})
optimize("Speed")
flags({
"NoBufferSecurityCheck"
})
inlining("Auto")
editandcontinue("Off")
-- Not using floatingpoint("Fast") - NaN checks are used in some places
-- (though rarely), overall preferable to avoid any functional differences
-- between debug and release builds, and to have calculations involved in GPU
-- (especially anything that may affect vertex position invariance) and CPU
-- (such as constant propagation) emulation as predictable as possible,
-- including handling of specials since games make assumptions about them.
filter({"configurations:Release", "platforms:not Windows"})
symbols("Off")
filter({"configurations:Release", "platforms:Windows"}) -- "toolset:msc"
linktimeoptimization("On")
buildoptions({
"/Gw",
"/Ob3",
-- "/Qpar", -- TODO: Test this.
})
filter("platforms:Linux")
system("linux")
toolset("clang")
--buildoptions({
-- "-mlzcnt", -- (don't) Assume lzcnt is supported.
--})
pkg_config.all("gtk+-x11-3.0")
links({
"stdc++fs",
"dl",
"lz4",
"pthread",
"rt",
})
filter({"platforms:Linux", "kind:*App"})
linkgroups("On")
filter({"language:C++", "toolset:clang or gcc"}) -- "platforms:Linux"
disablewarnings({
"switch",
"attributes",
})
filter({"language:C++", "toolset:gcc"}) -- "platforms:Linux"
disablewarnings({
"unused-result",
"volatile",
"template-id-cdtor",
"return-type",
"deprecated",
})
filter("toolset:gcc") -- "platforms:Linux"
removefatalwarnings("All") -- HACK
if ARCH == "ppc64" then
buildoptions({
"-m32",
"-mpowerpc64"
})
linkoptions({
"-m32",
"-mpowerpc64"
})
else
buildoptions({
"-fpermissive", -- HACK
})
linkoptions({
"-fpermissive", -- HACK
})
end
filter({"language:C++", "toolset:clang"}) -- "platforms:Linux"
disablewarnings({
"deprecated-register",
"deprecated-volatile",
"deprecated-enum-enum-conversion",
})
CLANG_BIN = os.getenv("CC") or _OPTIONS["cc"] or "clang"
if os.istarget("linux") and string.contains(CLANG_BIN, "clang") then
CLANG_VER = tonumber(string.match(os.outputof(CLANG_BIN.." --version"), "version (%d%d)"))
if CLANG_VER >= 20 then
filter({"language:C++", "toolset:clang"}) -- "platforms:Linux"
disablewarnings({
"deprecated-literal-operator", -- Needed only for tabulate
"nontrivial-memcall",
})
end
if CLANG_VER >= 21 then
filter({"language:C++", "toolset:clang"}) -- "platforms:Linux"
disablewarnings({
"character-conversion", -- Needed for utfcpp third-party library
})
end
end
filter({"language:C", "toolset:clang or gcc"}) -- "platforms:Linux"
disablewarnings({
"implicit-function-declaration",
})
if os.istarget("android") then
filter("platforms:Android-*")
system("android")
systemversion("24")
cppstl("c++")
staticruntime("On")
-- Hidden visibility is needed to prevent dynamic relocations in FFmpeg
-- AArch64 Neon libavcodec assembly with PIC (accesses extern lookup tables
-- using `adrp` and `add`, without the Global Object Table, expecting that all
-- FFmpeg symbols that aren't a part of the FFmpeg API are hidden by FFmpeg's
-- original build system) by resolving those relocations at link time instead.
visibility("Hidden")
links({
"android",
"dl",
"log",
})
end
filter("platforms:Windows")
system("windows")
toolset("msc")
buildoptions({
"/utf-8", -- 'build correctly on systems with non-Latin codepages'.
-- Disable warnings
"/wd4201", -- Nameless struct/unions are ok.
})
flags({
"MultiProcessorCompile", -- Multiprocessor compilation.
"NoMinimalRebuild", -- Required for /MP above.
})
defines({
"_CRT_NONSTDC_NO_DEPRECATE",
"_CRT_SECURE_NO_WARNINGS",
"WIN32",
"_WIN64=1",
"_AMD64=1",
"IMGUI_DISABLE_OBSOLETE_FUNCTIONS",
})
linkoptions({
"/ignore:4006", -- Ignores complaints about empty obj files.
"/ignore:4221",
})
links({
"ntdll",
"wsock32",
"ws2_32",
"xinput",
"comctl32",
"shcore",
"shlwapi",
"dxguid",
"bcrypt",
})
-- Embed the manifest for things like dependencies and DPI awareness.
filter({"platforms:Windows", "kind:ConsoleApp or WindowedApp"})
files({
"src/xenia/base/app_win32.manifest"
})
-- Create scratch/ path
if not os.isdir("scratch") then
os.mkdir("scratch")
end
workspace("xenia")
uuid("931ef4b0-6170-4f7a-aaf2-0fece7632747")
startproject("xenia-app")
if os.istarget("android") then
platforms({"Android-ARM64", "Android-x86_64"})
filter("platforms:Android-ARM64")
architecture("ARM64")
filter("platforms:Android-x86_64")
architecture("x86_64")
filter({})
else
architecture("x86_64")
if os.istarget("linux") then
platforms({"Linux"})
elseif os.istarget("macosx") then
platforms({"Mac"})
xcodebuildsettings({
["ARCHS"] = "x86_64"
})
elseif os.istarget("windows") then
platforms({"Windows"})
-- 10.0.15063.0: ID3D12GraphicsCommandList1::SetSamplePositions.
-- 10.0.19041.0: D3D12_HEAP_FLAG_CREATE_NOT_ZEROED.
-- 10.0.22000.0: DWMWA_WINDOW_CORNER_PREFERENCE.
systemversion("latest")
filter({})
end
end
configurations({"Checked", "Debug", "Release"})
include("third_party/aes_128.lua")
include("third_party/capstone.lua")
include("third_party/dxbc.lua")
include("third_party/discord-rpc.lua")
include("third_party/cxxopts.lua")
include("third_party/tomlplusplus.lua")
include("third_party/ffmpeg-xenia/premake5.lua")
include("third_party/fmt.lua")
include("third_party/glslang-spirv.lua")
include("third_party/imgui.lua")
include("third_party/mspack.lua")
include("third_party/snappy.lua")
include("third_party/xxhash.lua")
include("third_party/zarchive.lua")
include("third_party/zstd.lua")
include("third_party/zlib-ng.lua")
include("third_party/pugixml.lua")
if os.istarget("windows") then
include("third_party/libusb.lua")
end
if not os.istarget("android") then
-- SDL2 requires sdl2-config, and as of November 2020 isn't high-quality on
-- Android yet, most importantly in game controllers - the keycode and axis
-- enums are being ruined during conversion to SDL2 enums resulting in only
-- one controller (Nvidia Shield) being supported, digital triggers are also
-- not supported; lifecycle management (especially surface loss) is also
-- complicated.
include("third_party/SDL2.lua")
end
-- Disable treating warnings as fatal errors for all third party projects, as
-- well as other things relevant only to Xenia itself.
for _, prj in ipairs(premake.api.scope.current.solution.projects) do
project(prj.name)
removefiles({
"src/xenia/base/app_win32.manifest"
})
removefatalwarnings("All")
end
include("src/xenia")
include("src/xenia/app")
include("src/xenia/app/discord")
include("src/xenia/apu")
include("src/xenia/apu/nop")
include("src/xenia/base")
include("src/xenia/cpu")
include("src/xenia/cpu/backend/x64")
include("src/xenia/debug/ui")
include("src/xenia/gpu")
include("src/xenia/gpu/null")
include("src/xenia/gpu/vulkan")
include("src/xenia/hid")
include("src/xenia/hid/nop")
include("src/xenia/hid/skylander")
include("src/xenia/kernel")
include("src/xenia/patcher")
include("src/xenia/ui")
include("src/xenia/ui/vulkan")
include("src/xenia/vfs")
if not os.istarget("android") then
include("src/xenia/apu/sdl")
include("src/xenia/helper/sdl")
include("src/xenia/hid/sdl")
end
if os.istarget("linux") then
include("src/xenia/apu/alsa")
end
if os.istarget("windows") then
include("src/xenia/apu/xaudio2")
include("src/xenia/gpu/d3d12")
include("src/xenia/hid/winkey")
include("src/xenia/hid/xinput")
include("src/xenia/ui/d3d12")
end

49
src/xenia/CMakeLists.txt Normal file
View File

@@ -0,0 +1,49 @@
# src/xenia/CMakeLists.txt - Master file for all xenia modules.
# xenia-core (this directory's own sources)
add_library(xenia-core STATIC)
file(GLOB _core_sources "${CMAKE_CURRENT_SOURCE_DIR}/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/*.cc"
)
target_sources(xenia-core PRIVATE ${_core_sources})
target_link_libraries(xenia-core PUBLIC fmt xenia-base)
xe_target_defaults(xenia-core)
# All subdirectories
add_subdirectory(base)
add_subdirectory(cpu)
add_subdirectory(cpu/backend/x64)
add_subdirectory(apu)
add_subdirectory(apu/nop)
add_subdirectory(gpu)
add_subdirectory(gpu/null)
add_subdirectory(gpu/vulkan)
add_subdirectory(hid)
add_subdirectory(hid/nop)
add_subdirectory(hid/skylander)
add_subdirectory(kernel)
add_subdirectory(patcher)
add_subdirectory(ui)
add_subdirectory(ui/vulkan)
add_subdirectory(vfs)
add_subdirectory(debug/ui)
add_subdirectory(app/discord)
add_subdirectory(app)
# SDL-based modules (not Android)
add_subdirectory(apu/sdl)
add_subdirectory(helper/sdl)
add_subdirectory(hid/sdl)
# Platform-conditional modules
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
add_subdirectory(apu/alsa)
endif()
if(WIN32)
add_subdirectory(apu/xaudio2)
add_subdirectory(gpu/d3d12)
add_subdirectory(hid/winkey)
add_subdirectory(hid/xinput)
add_subdirectory(ui/d3d12)
endif()

View File

@@ -0,0 +1,115 @@
# src/xenia/app/CMakeLists.txt - Main xenia_canary executable.
if(WIN32)
add_executable(xenia-app WIN32)
else()
add_executable(xenia-app)
endif()
set_target_properties(xenia-app PROPERTIES OUTPUT_NAME "xenia_canary")
# Main source
target_sources(xenia-app PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/xenia_main.cc
)
# Other app sources (emulator_window, profile_dialogs, etc.)
xe_platform_sources(xenia-app ${CMAKE_CURRENT_SOURCE_DIR})
# Platform-specific entry points
if(WIN32)
target_sources(xenia-app PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/main_init_win.cc
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_win.cc
${CMAKE_CURRENT_SOURCE_DIR}/main_resources.rc
${PROJECT_SOURCE_DIR}/src/xenia/base/app_win32.manifest
)
# main_init_win.cc needs SSE2 only (not AVX)
set_source_files_properties(
${PROJECT_SOURCE_DIR}/src/xenia/base/main_init_win.cc
PROPERTIES COMPILE_OPTIONS "/arch:SSE2"
)
else()
target_sources(xenia-app PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/main_init_posix.cc
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_posix.cc
)
if(NOT MSVC)
set_source_files_properties(
${PROJECT_SOURCE_DIR}/src/xenia/base/main_init_posix.cc
PROPERTIES COMPILE_OPTIONS "-msse2;-mno-avx"
)
endif()
endif()
target_compile_definitions(xenia-app PRIVATE
XBYAK_NO_OP_NAMES
XBYAK_ENABLE_OMITTED_OPERAND
)
# Core libraries (all platforms)
target_link_libraries(xenia-app PRIVATE
xenia-apu
xenia-apu-nop
xenia-base
xenia-core
xenia-cpu
xenia-gpu
xenia-gpu-null
xenia-gpu-vulkan
xenia-hid
xenia-hid-nop
xenia-kernel
xenia-patcher
xenia-ui
xenia-ui-vulkan
xenia-vfs
# Third-party
aes_128
capstone
fmt
dxbc
discord-rpc
glslang-spirv
imgui
libavcodec
libavutil
mspack
snappy
xxhash
)
# Non-Android specific (always true for Windows/Linux)
target_link_libraries(xenia-app PRIVATE
xenia-app-discord
xenia-apu-sdl
xenia-debug-ui
xenia-helper-sdl
xenia-hid-sdl
)
# x64 backend
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-app PRIVATE xenia-cpu-backend-x64)
endif()
# Platform-specific libraries
if(WIN32)
target_link_libraries(xenia-app PRIVATE
xenia-apu-xaudio2
xenia-gpu-d3d12
xenia-hid-winkey
xenia-hid-xinput
xenia-ui-d3d12
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(xenia-app PRIVATE
xenia-apu-alsa
X11
xcb
X11-xcb
SDL2
)
endif()
xe_target_defaults(xenia-app)

View File

@@ -0,0 +1,9 @@
add_library(xenia-app-discord STATIC
${CMAKE_CURRENT_SOURCE_DIR}/discord_presence.cc
${CMAKE_CURRENT_SOURCE_DIR}/discord_presence.h
)
target_include_directories(xenia-app-discord PRIVATE
${PROJECT_SOURCE_DIR}/third_party/discord-rpc/src
)
target_link_libraries(xenia-app-discord PUBLIC discord-rpc)
xe_target_defaults(xenia-app-discord)

View File

@@ -1,18 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-app-discord")
uuid("d14c0885-22d2-40de-ab28-7b234ef2b949")
kind("StaticLib")
language("C++")
links({
"discord-rpc"
})
includedirs({
project_root.."/third_party/discord-rpc/src"
})
files({
"discord_presence.cc",
"discord_presence.h"
})

View File

@@ -1,133 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-app")
uuid("d7e98620-d007-4ad8-9dbd-b47c8853a17f")
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-null",
"xenia-gpu-vulkan",
"xenia-hid",
"xenia-hid-nop",
"xenia-kernel",
"xenia-patcher",
"xenia-ui",
"xenia-ui-vulkan",
"xenia-vfs",
})
links({
"aes_128",
"capstone",
"fmt",
"dxbc",
"discord-rpc",
"glslang-spirv",
"imgui",
"libavcodec",
"libavutil",
"mspack",
"snappy",
"xxhash",
})
defines({
"XBYAK_NO_OP_NAMES",
"XBYAK_ENABLE_OMITTED_OPERAND",
})
local_platform_files()
files({
"../base/main_init_"..platform_suffix..".cc",
"../ui/windowed_app_main_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
filter(SINGLE_LIBRARY_FILTER)
-- Unified library containing all apps as StaticLibs, not just the main
-- emulator windowed app.
kind("SharedLib")
if enableMiscSubprojects then
links({
"xenia-gpu-vulkan-trace-viewer",
"xenia-hid-demo",
"xenia-ui-window-vulkan-demo",
})
end
filter(NOT_SINGLE_LIBRARY_FILTER)
kind("WindowedApp")
-- `targetname` is broken if building from Gradle, works only for toggling the
-- `lib` prefix, as Gradle uses LOCAL_MODULE_FILENAME, not a derivative of
-- LOCAL_MODULE, to specify the targets to build when executing ndk-build.
filter("platforms:not Android-*")
targetname("xenia_canary")
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
-- TODO(Triang3l): The emulator itself on Android.
filter("platforms:not Android-*")
files({
"xenia_main.cc",
})
filter("platforms:Windows")
files({
"main_resources.rc",
})
filter({"architecture:x86_64", "files:../base/main_init_"..platform_suffix..".cc"})
vectorextensions("SSE2") -- Disable AVX for main_init_win.cc so our AVX check doesn't use AVX instructions.
filter("platforms:not Android-*")
links({
"xenia-app-discord",
"xenia-apu-sdl",
-- TODO(Triang3l): CPU debugger on Android.
"xenia-debug-ui",
"xenia-helper-sdl",
"xenia-hid-sdl",
})
filter("platforms:Linux")
links({
"xenia-apu-alsa",
"X11",
"xcb",
"X11-xcb",
"SDL2",
})
filter("platforms:Windows")
links({
"xenia-apu-xaudio2",
"xenia-gpu-d3d12",
"xenia-hid-winkey",
"xenia-hid-xinput",
"xenia-ui-d3d12",
})
if enableMiscSubprojects then
filter({"platforms:Windows", SINGLE_LIBRARY_FILTER})
links({
"xenia-gpu-d3d12-trace-viewer",
"xenia-ui-window-d3d12-demo",
})
end
filter("platforms:Windows")
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-app.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
end

View File

@@ -0,0 +1,8 @@
add_library(xenia-apu STATIC)
xe_platform_sources(xenia-apu ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(xenia-apu PRIVATE
${PROJECT_SOURCE_DIR}/third_party/FFmpeg
${PROJECT_SOURCE_DIR}/third_party/ffmpeg-xenia
)
target_link_libraries(xenia-apu PUBLIC libavcodec libavutil libavformat xenia-base)
xe_target_defaults(xenia-apu)

View File

@@ -0,0 +1,7 @@
add_library(xenia-apu-alsa STATIC)
xe_platform_sources(xenia-apu-alsa ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-apu-alsa PUBLIC xenia-apu xenia-base)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(xenia-apu-alsa PRIVATE asound pthread)
endif()
xe_target_defaults(xenia-apu-alsa)

View File

@@ -1,18 +0,0 @@
group("src")
project("xenia-apu-alsa")
uuid("8c2e1340-f847-4f9a-8b2e-5d8c1b7a8f9e")
kind("StaticLib")
language("C++")
links({
"xenia-apu",
"xenia-base",
})
defines({
})
local_platform_files()
filter("platforms:Linux")
links({
"asound",
"pthread",
})

View File

@@ -0,0 +1,4 @@
add_library(xenia-apu-nop STATIC)
xe_platform_sources(xenia-apu-nop ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-apu-nop PUBLIC xenia-base xenia-apu)
xe_target_defaults(xenia-apu-nop)

View File

@@ -1,13 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-apu-nop")
uuid("f37dbf3a-d200-4cc0-83f0-f801b1bdd862")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-apu",
})
local_platform_files()

View File

@@ -1,19 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-apu")
uuid("f4df01f0-50e4-4c67-8f54-61660696cc79")
kind("StaticLib")
language("C++")
links({
"libavcodec",
"libavutil",
"libavformat",
"xenia-base",
})
includedirs({
project_root.."/third_party/FFmpeg",
project_root.."/third_party/ffmpeg-xenia",
})
local_platform_files()

View File

@@ -0,0 +1,4 @@
add_library(xenia-apu-sdl STATIC)
xe_platform_sources(xenia-apu-sdl ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-apu-sdl PUBLIC xenia-apu xenia-base xenia-helper-sdl SDL2)
xe_target_defaults(xenia-apu-sdl)

View File

@@ -1,16 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-apu-sdl")
uuid("153b4e8b-813a-40e6-9366-4b51abc73c45")
kind("StaticLib")
language("C++")
links({
"xenia-apu",
"xenia-base",
"xenia-helper-sdl",
"SDL2",
})
local_platform_files()
sdl2_include()

View File

@@ -0,0 +1,4 @@
add_library(xenia-apu-xaudio2 STATIC)
xe_platform_sources(xenia-apu-xaudio2 ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-apu-xaudio2 PUBLIC xenia-base xenia-apu)
xe_target_defaults(xenia-apu-xaudio2)

View File

@@ -1,13 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-apu-xaudio2")
uuid("7a54a497-24d9-4c0e-a013-8507a04231f9")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-apu",
})
local_platform_files()

View File

@@ -0,0 +1,17 @@
add_library(xenia-base STATIC)
xe_platform_sources(xenia-base ${CMAKE_CURRENT_SOURCE_DIR})
# Exclude console_app_main and main_init files
file(GLOB _base_exclude "${CMAKE_CURRENT_SOURCE_DIR}/console_app_main_*.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/main_init_*.cc"
)
get_target_property(_base_srcs xenia-base SOURCES)
if(_base_exclude AND _base_srcs)
list(REMOVE_ITEM _base_srcs ${_base_exclude})
set_target_properties(xenia-base PROPERTIES SOURCES "${_base_srcs}")
endif()
target_link_libraries(xenia-base PUBLIC fmt)
xe_target_defaults(xenia-base)
if(XENIA_BUILD_TESTS)
add_subdirectory(testing)
endif()

View File

@@ -1,22 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
project("xenia-base")
uuid("aeadaf22-2b20-4941-b05f-a802d5679c11")
kind("StaticLib")
language("C++")
links({
"fmt",
})
local_platform_files()
removefiles({
"console_app_main_*.cc",
"main_init_*.cc",
})
files({
"debug_visualizers.natvis",
})
if enableTests then
include("testing")
end

View File

@@ -0,0 +1,3 @@
xe_test_suite(xenia-base-tests ${CMAKE_CURRENT_SOURCE_DIR}
LINKS fmt xenia-base
)

View File

@@ -1,9 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
test_suite("xenia-base-tests", project_root, ".", {
links = {
"fmt",
"xenia-base",
},
})

View File

@@ -0,0 +1,17 @@
add_library(xenia-cpu STATIC)
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR})
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR}/backend)
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR}/compiler)
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR}/compiler/passes)
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR}/hir)
xe_platform_sources(xenia-cpu ${CMAKE_CURRENT_SOURCE_DIR}/ppc)
target_include_directories(xenia-cpu PRIVATE
${PROJECT_SOURCE_DIR}/third_party/llvm/include
)
target_link_libraries(xenia-cpu PUBLIC xenia-base mspack)
xe_target_defaults(xenia-cpu)
if(XENIA_BUILD_TESTS)
add_subdirectory(testing)
add_subdirectory(ppc/testing)
endif()

View File

@@ -0,0 +1,18 @@
add_library(xenia-cpu-backend-x64 STATIC)
xe_platform_sources(xenia-cpu-backend-x64 ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions(xenia-cpu-backend-x64 PRIVATE
CAPSTONE_X86_ATT_DISABLE
CAPSTONE_HAS_X86
CAPSTONE_USE_SYS_DYN_MEM
XBYAK_NO_OP_NAMES
XBYAK_ENABLE_OMITTED_OPERAND
)
# Optional VTune support
if(EXISTS "${PROJECT_SOURCE_DIR}/third_party/vtune")
target_compile_definitions(xenia-cpu-backend-x64 PRIVATE ENABLE_VTUNE=1)
endif()
target_include_directories(xenia-cpu-backend-x64 PRIVATE
${PROJECT_SOURCE_DIR}/third_party/capstone/include
)
target_link_libraries(xenia-cpu-backend-x64 PUBLIC capstone fmt xenia-base xenia-cpu)
xe_target_defaults(xenia-cpu-backend-x64)

View File

@@ -1,30 +0,0 @@
project_root = "../../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-cpu-backend-x64")
uuid("7d8d5dce-4696-4197-952a-09506f725afe")
kind("StaticLib")
language("C++")
links({
"capstone",
"fmt",
"xenia-base",
"xenia-cpu",
})
defines({
"CAPSTONE_X86_ATT_DISABLE",
"CAPSTONE_HAS_X86",
"CAPSTONE_USE_SYS_DYN_MEM",
"XBYAK_NO_OP_NAMES",
"XBYAK_ENABLE_OMITTED_OPERAND",
})
-- Enable VTune, if it's installed.
if os.isdir(project_root.."/third_party/vtune") then
defines { "ENABLE_VTUNE=1" }
end
includedirs({
project_root.."/third_party/capstone/include",
})
local_platform_files()

View File

@@ -0,0 +1,37 @@
if(NOT XENIA_BUILD_TESTS)
return()
endif()
add_executable(xenia-cpu-ppc-tests
${CMAKE_CURRENT_SOURCE_DIR}/ppc_testing_main.cc
)
# Add platform-specific console app main
if(WIN32)
target_sources(xenia-cpu-ppc-tests PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc)
else()
target_sources(xenia-cpu-ppc-tests PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_posix.cc)
endif()
# Add .s files but exclude from build (they're test data)
file(GLOB _ppc_asm "${CMAKE_CURRENT_SOURCE_DIR}/*.s")
target_sources(xenia-cpu-ppc-tests PRIVATE ${_ppc_asm})
set_source_files_properties(${_ppc_asm} PROPERTIES HEADER_FILE_ONLY TRUE)
target_link_libraries(xenia-cpu-ppc-tests PRIVATE
xenia-apu xenia-apu-nop
xenia-base xenia-core xenia-cpu
xenia-gpu xenia-gpu-null
xenia-hid xenia-hid-nop
xenia-kernel xenia-patcher xenia-ui xenia-vfs
capstone fmt imgui mspack
)
# x64 backend
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-cpu-ppc-tests PRIVATE xenia-cpu-backend-x64)
endif()
xe_target_defaults(xenia-cpu-ppc-tests)

View File

@@ -1,85 +0,0 @@
project_root = "../../../../.."
include(project_root.."/tools/build")
group("tests")
project("xenia-cpu-ppc-tests")
uuid("2a57d5ac-4024-4c49-9cd3-aa3a603c2ef8")
kind("ConsoleApp")
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-null",
"xenia-hid",
"xenia-hid-nop",
"xenia-kernel",
"xenia-patcher",
"xenia-ui",
"xenia-vfs",
})
links({
"capstone",
"fmt",
"imgui",
"mspack",
})
files({
"ppc_testing_main.cc",
"../../../base/console_app_main_"..platform_suffix..".cc",
})
files({
"*.s",
})
filter("files:*.s")
flags({
"ExcludeFromBuild",
})
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
filter("platforms:Windows")
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-testing.txt",
})
filter({})
if ARCH == "ppc64" or ARCH == "powerpc64" then
project("xenia-cpu-ppc-nativetests")
uuid("E381E8EE-65CD-4D5E-9223-D9C03B2CE78C")
kind("ConsoleApp")
language("C++")
links({
"fmt",
"xenia-base",
})
files({
"ppc_testing_native_main.cc",
"../../../base/console_app_main_"..platform_suffix..".cc",
})
files({
"instr_*.s",
"seq_*.s",
})
filter("files:instr_*.s", "files:seq_*.s")
flags({
"ExcludeFromBuild",
})
filter({})
buildoptions({
"-Wa,-mregnames", -- Tell GAS to accept register names.
})
files({
"ppc_testing_native_thunks.s",
})
end

View File

@@ -1,27 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-cpu")
uuid("0109c91e-5a04-41ab-9168-0d5187d11298")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"mspack",
})
includedirs({
project_root.."/third_party/llvm/include",
})
local_platform_files()
local_platform_files("backend")
local_platform_files("compiler")
local_platform_files("compiler/passes")
local_platform_files("hir")
local_platform_files("ppc")
if enableTests then
include("testing")
include("ppc/testing")
end

View File

@@ -0,0 +1,7 @@
xe_test_suite(xenia-cpu-tests ${CMAKE_CURRENT_SOURCE_DIR}
LINKS
capstone fmt imgui
xenia-base xenia-core xenia-cpu xenia-gpu
xenia-hid-skylander xenia-kernel xenia-ui xenia-patcher
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},x86_64>:xenia-cpu-backend-x64>
)

View File

@@ -1,28 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
test_suite("xenia-cpu-tests", project_root, ".", {
links = {
"capstone",
"fmt",
"imgui",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-hid-skylander",
-- TODO(benvanik): cut these dependencies?
"xenia-kernel",
"xenia-ui", -- needed by xenia-base
"xenia-patcher",
},
filtered_links = {
{
filter = 'architecture:x86_64',
links = {
"xenia-cpu-backend-x64",
},
}
},
})

View File

@@ -0,0 +1,4 @@
add_library(xenia-debug-ui STATIC)
xe_platform_sources(xenia-debug-ui ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-debug-ui PUBLIC imgui xenia-base xenia-cpu xenia-ui)
xe_target_defaults(xenia-debug-ui)

View File

@@ -1,15 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-debug-ui")
uuid("9193a274-f4c2-4746-bd85-93fcfc5c3e38")
kind("StaticLib")
language("C++")
links({
"imgui",
"xenia-base",
"xenia-cpu",
"xenia-ui",
})
local_platform_files()

View File

@@ -0,0 +1,30 @@
add_library(xenia-gpu STATIC)
xe_platform_sources(xenia-gpu ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(xenia-gpu PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-gpu PUBLIC dxbc fmt glslang-spirv snappy xxhash xenia-base xenia-ui)
xe_target_defaults(xenia-gpu)
if(XENIA_BUILD_MISC)
# Shader compiler tool
add_executable(xenia-gpu-shader-compiler
${CMAKE_CURRENT_SOURCE_DIR}/shader_compiler_main.cc
)
if(WIN32)
target_sources(xenia-gpu-shader-compiler PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc)
else()
target_sources(xenia-gpu-shader-compiler PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_posix.cc)
endif()
target_include_directories(xenia-gpu-shader-compiler PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-gpu-shader-compiler PRIVATE
dxbc fmt glslang-spirv snappy xenia-base xenia-gpu xenia-ui xenia-ui-vulkan
)
xe_target_defaults(xenia-gpu-shader-compiler)
endif()

View File

@@ -0,0 +1,44 @@
add_library(xenia-gpu-d3d12 STATIC)
xe_platform_sources(xenia-gpu-d3d12 ${CMAKE_CURRENT_SOURCE_DIR})
# Include shader bytecode headers
file(GLOB _d3d12_shader_headers "${CMAKE_CURRENT_SOURCE_DIR}/../shaders/bytecode/d3d12_5_1/*.h"
)
target_sources(xenia-gpu-d3d12 PRIVATE ${_d3d12_shader_headers})
target_link_libraries(xenia-gpu-d3d12 PUBLIC
fmt xxhash xenia-base xenia-gpu xenia-ui xenia-ui-d3d12
)
xe_target_defaults(xenia-gpu-d3d12)
if(XENIA_BUILD_MISC)
# D3D12 trace viewer
add_executable(xenia-gpu-d3d12-trace-viewer WIN32
${CMAKE_CURRENT_SOURCE_DIR}/d3d12_trace_viewer_main.cc
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_win.cc
)
target_link_libraries(xenia-gpu-d3d12-trace-viewer PRIVATE
xenia-apu xenia-apu-nop xenia-base xenia-core xenia-cpu
xenia-gpu xenia-gpu-d3d12 xenia-hid xenia-hid-nop xenia-hid-skylander
xenia-kernel xenia-patcher xenia-ui xenia-ui-d3d12 xenia-vfs
aes_128 capstone dxbc fmt imgui libavcodec libavutil mspack snappy xxhash
)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-gpu-d3d12-trace-viewer PRIVATE xenia-cpu-backend-x64)
endif()
xe_target_defaults(xenia-gpu-d3d12-trace-viewer)
# D3D12 trace dump
add_executable(xenia-gpu-d3d12-trace-dump
${CMAKE_CURRENT_SOURCE_DIR}/d3d12_trace_dump_main.cc
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc
)
target_link_libraries(xenia-gpu-d3d12-trace-dump PRIVATE
xenia-apu xenia-apu-nop xenia-base xenia-core xenia-cpu
xenia-gpu xenia-gpu-d3d12 xenia-hid xenia-hid-nop xenia-hid-skylander
xenia-kernel xenia-patcher xenia-ui xenia-ui-d3d12 xenia-vfs
aes_128 capstone dxbc fmt imgui libavcodec libavutil mspack snappy xxhash
)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-gpu-d3d12-trace-dump PRIVATE xenia-cpu-backend-x64)
endif()
xe_target_defaults(xenia-gpu-d3d12-trace-dump)
endif()

View File

@@ -1,128 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-gpu-d3d12")
uuid("c057eae4-e7bb-4113-9a69-1fe07b735c49")
kind("StaticLib")
language("C++")
links({
"fmt",
"xenia-base",
"xenia-gpu",
"xenia-ui",
"xenia-ui-d3d12",
"xxhash",
})
local_platform_files()
files({
"../shaders/bytecode/d3d12_5_1/*.h",
})
if enableMiscSubprojects then
group("src")
project("xenia-gpu-d3d12-trace-viewer")
uuid("7b5b9fcb-7bf1-43ff-a774-d4c41c8706be")
single_library_windowed_app_kind()
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-d3d12",
"xenia-hid",
"xenia-hid-nop",
"xenia-hid-skylander",
"xenia-kernel",
"xenia-patcher",
"xenia-ui",
"xenia-ui-d3d12",
"xenia-vfs",
})
links({
"aes_128",
"capstone",
"dxbc",
"fmt",
"imgui",
"libavcodec",
"libavutil",
"mspack",
"snappy",
"xxhash",
})
files({
"d3d12_trace_viewer_main.cc",
"../../ui/windowed_app_main_"..platform_suffix..".cc",
})
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-d3d12-trace-viewer.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-trace-viewer.txt",
})
end
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
group("src")
project("xenia-gpu-d3d12-trace-dump")
uuid("686b859c-0046-44c4-a02c-41fc3fb75698")
kind("ConsoleApp")
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-d3d12",
"xenia-hid",
"xenia-hid-nop",
"xenia-hid-skylander",
"xenia-kernel",
"xenia-ui",
"xenia-ui-d3d12",
"xenia-vfs",
"xenia-patcher",
})
links({
"aes_128",
"capstone",
"dxbc",
"fmt",
"imgui",
"libavcodec",
"libavutil",
"mspack",
"snappy",
"xxhash",
})
files({
"d3d12_trace_dump_main.cc",
"../../base/console_app_main_"..platform_suffix..".cc",
})
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-d3d12-trace-dump.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-trace-dump.txt",
})
end
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
end

View File

@@ -0,0 +1,7 @@
add_library(xenia-gpu-null STATIC)
xe_platform_sources(xenia-gpu-null ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(xenia-gpu-null PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
)
target_link_libraries(xenia-gpu-null PUBLIC xenia-base xenia-gpu xenia-ui xenia-ui-vulkan xxhash)
xe_target_defaults(xenia-gpu-null)

View File

@@ -1,19 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-gpu-null")
uuid("42FCA0B3-4C20-4532-95E9-07D297013BE4")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-gpu",
"xenia-ui",
"xenia-ui-vulkan",
"xxhash",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
})
local_platform_files()

View File

@@ -1,60 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-gpu")
uuid("0e8d3370-e4b1-4b05-a2e8-39ebbcdf9b17")
kind("StaticLib")
language("C++")
links({
"dxbc",
"fmt",
"glslang-spirv",
"snappy",
"xenia-base",
"xenia-ui",
"xxhash",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
local_platform_files()
if enableMiscSubprojects then
group("src")
project("xenia-gpu-shader-compiler")
uuid("ad76d3e4-4c62-439b-a0f6-f83fcf0e83c5")
kind("ConsoleApp")
language("C++")
links({
"dxbc",
"fmt",
"glslang-spirv",
"snappy",
"xenia-base",
"xenia-gpu",
"xenia-ui",
"xenia-ui-vulkan",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
files({
"shader_compiler_main.cc",
"../base/console_app_main_"..platform_suffix..".cc",
})
filter("platforms:Windows")
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-shader-compiler.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-shader-compiler.txt",
})
end
filter({})
end

View File

@@ -0,0 +1,71 @@
add_library(xenia-gpu-vulkan STATIC)
xe_platform_sources(xenia-gpu-vulkan ${CMAKE_CURRENT_SOURCE_DIR})
# Include shader bytecode headers
file(GLOB _vk_shader_headers "${CMAKE_CURRENT_SOURCE_DIR}/../shaders/bytecode/vulkan_spirv/*.h"
)
target_sources(xenia-gpu-vulkan PRIVATE ${_vk_shader_headers})
target_include_directories(xenia-gpu-vulkan PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-gpu-vulkan PUBLIC
fmt glslang-spirv xxhash xenia-base xenia-gpu xenia-ui xenia-ui-vulkan
)
xe_target_defaults(xenia-gpu-vulkan)
if(XENIA_BUILD_MISC)
# Vulkan trace viewer
add_executable(xenia-gpu-vulkan-trace-viewer
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_trace_viewer_main.cc
)
if(WIN32)
target_sources(xenia-gpu-vulkan-trace-viewer PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_win.cc)
else()
target_sources(xenia-gpu-vulkan-trace-viewer PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_posix.cc)
endif()
target_include_directories(xenia-gpu-vulkan-trace-viewer PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-gpu-vulkan-trace-viewer PRIVATE
xenia-apu xenia-apu-nop xenia-base xenia-core xenia-cpu
xenia-gpu xenia-gpu-vulkan xenia-hid xenia-hid-nop xenia-hid-skylander
xenia-kernel xenia-patcher xenia-ui xenia-ui-vulkan xenia-vfs
aes_128 capstone fmt glslang-spirv imgui libavcodec libavutil mspack snappy xxhash
)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-gpu-vulkan-trace-viewer PRIVATE xenia-cpu-backend-x64)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(xenia-gpu-vulkan-trace-viewer PRIVATE X11 xcb X11-xcb)
endif()
xe_target_defaults(xenia-gpu-vulkan-trace-viewer)
# Vulkan trace dump
add_executable(xenia-gpu-vulkan-trace-dump
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_trace_dump_main.cc
)
if(WIN32)
target_sources(xenia-gpu-vulkan-trace-dump PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc)
else()
target_sources(xenia-gpu-vulkan-trace-dump PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_posix.cc)
endif()
target_include_directories(xenia-gpu-vulkan-trace-dump PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-gpu-vulkan-trace-dump PRIVATE
xenia-apu xenia-apu-nop xenia-base xenia-core xenia-cpu
xenia-gpu xenia-gpu-vulkan xenia-hid xenia-hid-nop xenia-hid-skylander
xenia-kernel xenia-patcher xenia-ui xenia-ui-vulkan xenia-vfs
aes_128 capstone fmt glslang-spirv imgui libavcodec libavutil mspack snappy xxhash
)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
target_link_libraries(xenia-gpu-vulkan-trace-dump PRIVATE xenia-cpu-backend-x64)
endif()
xe_target_defaults(xenia-gpu-vulkan-trace-dump)
endif()

View File

@@ -1,159 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-gpu-vulkan")
uuid("717590b4-f579-4162-8f23-0624e87d6cca")
kind("StaticLib")
language("C++")
links({
"fmt",
"glslang-spirv",
"xenia-base",
"xenia-gpu",
"xenia-ui",
"xenia-ui-vulkan",
"xxhash",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
local_platform_files()
files({
"../shaders/bytecode/vulkan_spirv/*.h",
})
if enableMiscSubprojects then
group("src")
project("xenia-gpu-vulkan-trace-viewer")
uuid("86a1dddc-a26a-4885-8c55-cf745225d93e")
single_library_windowed_app_kind()
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-vulkan",
"xenia-hid",
"xenia-hid-nop",
"xenia-hid-skylander",
"xenia-kernel",
"xenia-patcher",
"xenia-ui",
"xenia-ui-vulkan",
"xenia-vfs",
})
links({
"aes_128",
"capstone",
"fmt",
"glslang-spirv",
"imgui",
"libavcodec",
"libavutil",
"mspack",
"snappy",
"xxhash",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
files({
"vulkan_trace_viewer_main.cc",
"../../ui/windowed_app_main_"..platform_suffix..".cc",
})
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
filter("platforms:Linux")
links({
"X11",
"xcb",
"X11-xcb",
})
filter("platforms:Windows")
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-vulkan-trace-viewer.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-trace-viewer.txt",
})
end
group("src")
project("xenia-gpu-vulkan-trace-dump")
uuid("0dd0dd1c-b321-494d-ab9a-6c062f0c65cc")
kind("ConsoleApp")
language("C++")
links({
"xenia-apu",
"xenia-apu-nop",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-gpu",
"xenia-gpu-vulkan",
"xenia-hid",
"xenia-hid-nop",
"xenia-hid-skylander",
"xenia-kernel",
"xenia-ui",
"xenia-ui-vulkan",
"xenia-vfs",
"xenia-patcher",
})
links({
"aes_128",
"capstone",
"fmt",
"glslang-spirv",
"imgui",
"libavcodec",
"libavutil",
"mspack",
"snappy",
"xxhash",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
files({
"vulkan_trace_dump_main.cc",
"../../base/console_app_main_"..platform_suffix..".cc",
})
filter("architecture:x86_64")
links({
"xenia-cpu-backend-x64",
})
filter("platforms:Linux")
links({
"X11",
"xcb",
"X11-xcb",
})
filter("platforms:Windows")
-- Only create the .user file if it doesn't already exist.
local user_file = project_root.."/build/xenia-gpu-vulkan-trace-dump.vcxproj.user"
if not os.isfile(user_file) then
debugdir(project_root)
debugargs({
"2>&1",
"1>scratch/stdout-trace-dump.txt",
})
end
end

View File

@@ -0,0 +1,4 @@
add_library(xenia-helper-sdl STATIC)
xe_platform_sources(xenia-helper-sdl ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-helper-sdl PUBLIC SDL2)
xe_target_defaults(xenia-helper-sdl)

View File

@@ -1,13 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-helper-sdl")
uuid("84b00ad3-fba3-4561-96c9-1f9993b14c9c")
kind("StaticLib")
language("C++")
links({
"SDL2",
})
local_platform_files()
sdl2_include()

View File

@@ -0,0 +1,11 @@
add_library(xenia-hid STATIC)
xe_platform_sources(xenia-hid ${CMAKE_CURRENT_SOURCE_DIR})
# Exclude demo files
file(GLOB _hid_demo "${CMAKE_CURRENT_SOURCE_DIR}/*_demo.cc")
get_target_property(_hid_srcs xenia-hid SOURCES)
if(_hid_demo AND _hid_srcs)
list(REMOVE_ITEM _hid_srcs ${_hid_demo})
set_target_properties(xenia-hid PROPERTIES SOURCES "${_hid_srcs}")
endif()
target_link_libraries(xenia-hid PUBLIC xenia-base xenia-hid-skylander)
xe_target_defaults(xenia-hid)

View File

@@ -0,0 +1,4 @@
add_library(xenia-hid-nop STATIC)
xe_platform_sources(xenia-hid-nop ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-hid-nop PUBLIC xenia-base xenia-hid)
xe_target_defaults(xenia-hid-nop)

View File

@@ -1,13 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid-nop")
uuid("887b6f26-b0c1-43c1-a013-a37e7b9634fd")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-hid",
})
local_platform_files()

View File

@@ -1,16 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid")
uuid("88a4ef38-c550-430f-8c22-8ded4e4ef601")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-hid-skylander",
})
local_platform_files()
removefiles({
"*_demo.cc",
})

View File

@@ -0,0 +1,4 @@
add_library(xenia-hid-sdl STATIC)
xe_platform_sources(xenia-hid-sdl ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-hid-sdl PUBLIC xenia-base xenia-hid xenia-ui SDL2)
xe_target_defaults(xenia-hid-sdl)

View File

@@ -1,16 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid-sdl")
uuid("44f5b9a1-00f8-4825-acf1-5c93f26eba9b")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-hid",
"xenia-ui",
"SDL2",
})
local_platform_files()
sdl2_include()

View File

@@ -0,0 +1,14 @@
add_library(xenia-hid-skylander STATIC
${CMAKE_CURRENT_SOURCE_DIR}/skylander_portal.h
${CMAKE_CURRENT_SOURCE_DIR}/skylander_portal.cc
${CMAKE_CURRENT_SOURCE_DIR}/skylander_emulated.h
${CMAKE_CURRENT_SOURCE_DIR}/skylander_emulated.cc
)
if(WIN32)
target_sources(xenia-hid-skylander PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/skylander_hardware.h
${CMAKE_CURRENT_SOURCE_DIR}/skylander_hardware.cc
)
target_link_libraries(xenia-hid-skylander PUBLIC libusb)
endif()
xe_target_defaults(xenia-hid-skylander)

View File

@@ -1,23 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid-skylander")
uuid("ddc114da-a279-4868-8b20-53108599bd78")
kind("StaticLib")
language("C++")
files({
"skylander_portal.h",
"skylander_portal.cc",
"skylander_emulated.h",
"skylander_emulated.cc"
})
filter({"platforms:Windows"})
links({
"libusb",
})
files({
"skylander_hardware.h",
"skylander_hardware.cc"
})

View File

@@ -0,0 +1,4 @@
add_library(xenia-hid-winkey STATIC)
xe_platform_sources(xenia-hid-winkey ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-hid-winkey PUBLIC xenia-base xenia-hid xenia-ui)
xe_target_defaults(xenia-hid-winkey)

View File

@@ -1,14 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid-winkey")
uuid("fd16e19a-6219-4ab7-b95a-7c78523c50c3")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-hid",
"xenia-ui",
})
local_platform_files()

View File

@@ -0,0 +1,4 @@
add_library(xenia-hid-xinput STATIC)
xe_platform_sources(xenia-hid-xinput ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(xenia-hid-xinput PUBLIC xenia-base xenia-hid)
xe_target_defaults(xenia-hid-xinput)

View File

@@ -1,13 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-hid-xinput")
uuid("3d49e251-07a7-40ae-9bc6-aae984c85568")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-hid",
})
local_platform_files()

View File

@@ -0,0 +1,23 @@
add_library(xenia-kernel STATIC)
xe_platform_sources(xenia-kernel ${CMAKE_CURRENT_SOURCE_DIR} RECURSIVE)
target_compile_definitions(xenia-kernel PRIVATE
X86_FEATURES
X86_HAVE_XSAVE_INTRIN
X86_SSSE3
X86_SSE42
WITH_GZFILEOP
)
if(WIN32)
target_compile_definitions(xenia-kernel PRIVATE
X86_SSE2
X86_AVX2
X86_AVX512
X86_AVX512VNNI
X86_PCLMULQDQ_CRC
X86_VPCLMULQDQ_CRC
)
endif()
target_link_libraries(xenia-kernel PUBLIC
aes_128 fmt zlib-ng pugixml xenia-apu xenia-base xenia-cpu xenia-hid xenia-vfs
)
xe_target_defaults(xenia-kernel)

View File

@@ -1,40 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-kernel")
uuid("ae185c4a-1c4f-4503-9892-328e549e871a")
kind("StaticLib")
language("C++")
links({
"aes_128",
"fmt",
"zlib-ng",
"pugixml",
"xenia-apu",
"xenia-base",
"xenia-cpu",
"xenia-hid",
"xenia-vfs",
})
defines({
"X86_FEATURES",
"X86_HAVE_XSAVE_INTRIN",
"X86_SSSE3",
"X86_SSE42",
"WITH_GZFILEOP",
})
if os.istarget("windows") then
defines({
"X86_SSE2",
"X86_AVX2",
"X86_AVX512",
"X86_AVX512VNNI",
"X86_PCLMULQDQ_CRC",
"X86_VPCLMULQDQ_CRC",
})
end
recursive_platform_files()
files({
"debug_visualizers.natvis",
})

View File

@@ -0,0 +1,4 @@
add_library(xenia-patcher STATIC)
xe_platform_sources(xenia-patcher ${CMAKE_CURRENT_SOURCE_DIR} RECURSIVE)
target_link_libraries(xenia-patcher PUBLIC xenia-base)
xe_target_defaults(xenia-patcher)

View File

@@ -1,12 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-patcher")
uuid("e1c75f76-9e7b-48f6-b17e-dbd20f7a1592")
kind("StaticLib")
language("C++")
links({
"xenia-base"
})
recursive_platform_files()

View File

@@ -1,16 +0,0 @@
project_root = "../.."
include(project_root.."/tools/build")
group("src")
project("xenia-core")
uuid("970f7892-f19a-4bf5-8795-478c51757bec")
kind("StaticLib")
language("C++")
links({
"fmt",
"xenia-base",
})
files({
"*.h",
"*.cc",
})

View File

@@ -0,0 +1,18 @@
add_library(xenia-ui STATIC)
xe_platform_sources(xenia-ui ${CMAKE_CURRENT_SOURCE_DIR})
# Exclude demo and windowed_app_main files
file(GLOB _ui_exclude "${CMAKE_CURRENT_SOURCE_DIR}/*_demo.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/windowed_app_main_*.cc"
)
get_target_property(_ui_srcs xenia-ui SOURCES)
if(_ui_exclude AND _ui_srcs)
list(REMOVE_ITEM _ui_srcs ${_ui_exclude})
set_target_properties(xenia-ui PROPERTIES SOURCES "${_ui_srcs}")
endif()
target_link_libraries(xenia-ui PUBLIC xenia-base)
if(WIN32)
target_link_libraries(xenia-ui PRIVATE dwmapi dxgi winmm)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(xenia-ui PRIVATE xcb X11 X11-xcb fontconfig ${GTK3_LIBRARIES})
endif()
xe_target_defaults(xenia-ui)

View File

@@ -0,0 +1,21 @@
add_library(xenia-ui-d3d12 STATIC)
xe_platform_sources(xenia-ui-d3d12 ${CMAKE_CURRENT_SOURCE_DIR})
# Include shader bytecode headers
file(GLOB _d3d12_ui_shader_headers "${CMAKE_CURRENT_SOURCE_DIR}/../shaders/bytecode/d3d12_5_1/*.h"
)
target_sources(xenia-ui-d3d12 PRIVATE ${_d3d12_ui_shader_headers})
target_link_libraries(xenia-ui-d3d12 PUBLIC xenia-base xenia-ui)
xe_target_defaults(xenia-ui-d3d12)
if(XENIA_BUILD_MISC)
# D3D12 window demo
add_executable(xenia-ui-window-d3d12-demo WIN32
${CMAKE_CURRENT_SOURCE_DIR}/../window_demo.cc
${CMAKE_CURRENT_SOURCE_DIR}/d3d12_window_demo.cc
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_win.cc
)
target_link_libraries(xenia-ui-window-d3d12-demo PRIVATE
fmt imgui xenia-base xenia-ui xenia-ui-d3d12
)
xe_target_defaults(xenia-ui-window-d3d12-demo)
endif()

View File

@@ -1,39 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-ui-d3d12")
uuid("f93dc1a8-600f-43e7-b0fc-ae3eefbe836b")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-ui",
})
local_platform_files()
files({
"../shaders/bytecode/d3d12_5_1/*.h",
})
if enableMiscSubprojects then
group("demos")
project("xenia-ui-window-d3d12-demo")
uuid("3b9686a7-0f04-4e17-8b00-aeb78ae1107c")
single_library_windowed_app_kind()
language("C++")
links({
"fmt",
"imgui",
"xenia-base",
"xenia-ui",
"xenia-ui-d3d12",
})
files({
"../window_demo.cc",
"d3d12_window_demo.cc",
project_root.."/src/xenia/ui/windowed_app_main_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
end

View File

@@ -1,36 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-ui")
uuid("d0407c25-b0ea-40dc-846c-82c46fbd9fa2")
kind("StaticLib")
language("C++")
links({
"xenia-base",
})
local_platform_files()
removefiles({
"*_demo.cc",
"windowed_app_main_*.cc",
})
if os.istarget("android") then
filter("platforms:Android-*")
-- Exports JNI functions.
wholelib("On")
end
filter("platforms:Windows")
links({
"dwmapi",
"dxgi",
"winmm",
})
filter("platforms:Linux")
links({
"xcb",
"X11",
"X11-xcb",
"fontconfig"
})

View File

@@ -0,0 +1,40 @@
add_library(xenia-ui-vulkan STATIC)
xe_platform_sources(xenia-ui-vulkan ${CMAKE_CURRENT_SOURCE_DIR})
xe_platform_sources(xenia-ui-vulkan ${CMAKE_CURRENT_SOURCE_DIR}/functions)
# Include shader bytecode headers
file(GLOB _vk_ui_shader_headers "${CMAKE_CURRENT_SOURCE_DIR}/../shaders/bytecode/vulkan_spirv/*.h"
)
target_sources(xenia-ui-vulkan PRIVATE ${_vk_ui_shader_headers})
target_include_directories(xenia-ui-vulkan PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
${PROJECT_SOURCE_DIR}/third_party/glslang
)
target_link_libraries(xenia-ui-vulkan PUBLIC xenia-base xenia-ui)
xe_target_defaults(xenia-ui-vulkan)
if(XENIA_BUILD_MISC)
# Vulkan window demo
add_executable(xenia-ui-window-vulkan-demo)
if(WIN32)
set_target_properties(xenia-ui-window-vulkan-demo PROPERTIES WIN32_EXECUTABLE TRUE)
target_sources(xenia-ui-window-vulkan-demo PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_win.cc)
else()
target_sources(xenia-ui-window-vulkan-demo PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/ui/windowed_app_main_posix.cc)
endif()
target_sources(xenia-ui-window-vulkan-demo PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../window_demo.cc
${CMAKE_CURRENT_SOURCE_DIR}/vulkan_window_demo.cc
)
target_include_directories(xenia-ui-window-vulkan-demo PRIVATE
${PROJECT_SOURCE_DIR}/third_party/Vulkan-Headers/include
)
target_link_libraries(xenia-ui-window-vulkan-demo PRIVATE
fmt imgui xenia-base xenia-ui xenia-ui-vulkan
)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(xenia-ui-window-vulkan-demo PRIVATE X11 xcb X11-xcb)
endif()
xe_target_defaults(xenia-ui-window-vulkan-demo)
endif()

View File

@@ -1,54 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-ui-vulkan")
uuid("4933d81e-1c2c-4d5d-b104-3c0eb9dc2f00")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"xenia-ui",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
project_root.."/third_party/glslang", -- For glslang SPIRV headers
})
local_platform_files()
local_platform_files("functions")
files({
"../shaders/bytecode/vulkan_spirv/*.h",
})
if enableMiscSubprojects then
group("demos")
project("xenia-ui-window-vulkan-demo")
uuid("97598f13-3177-454c-8e58-c59e2b6ede27")
single_library_windowed_app_kind()
language("C++")
links({
"fmt",
"imgui",
"xenia-base",
"xenia-ui",
"xenia-ui-vulkan",
})
includedirs({
project_root.."/third_party/Vulkan-Headers/include",
})
files({
"../window_demo.cc",
"vulkan_window_demo.cc",
project_root.."/src/xenia/ui/windowed_app_main_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
filter("platforms:Linux")
links({
"X11",
"xcb",
"X11-xcb",
})
end

View File

@@ -0,0 +1,31 @@
add_library(xenia-vfs STATIC)
xe_platform_sources(xenia-vfs ${CMAKE_CURRENT_SOURCE_DIR} RECURSIVE)
# Exclude vfs_dump.cc
file(GLOB _vfs_dump "${CMAKE_CURRENT_SOURCE_DIR}/vfs_dump.cc")
get_target_property(_vfs_srcs xenia-vfs SOURCES)
if(_vfs_dump AND _vfs_srcs)
list(REMOVE_ITEM _vfs_srcs ${_vfs_dump})
set_target_properties(xenia-vfs PROPERTIES SOURCES "${_vfs_srcs}")
endif()
target_link_libraries(xenia-vfs PUBLIC xenia-base zstd zarchive)
xe_target_defaults(xenia-vfs)
if(XENIA_BUILD_MISC)
# VFS dump tool
add_executable(xenia-vfs-dump
${CMAKE_CURRENT_SOURCE_DIR}/vfs_dump.cc
)
if(WIN32)
target_sources(xenia-vfs-dump PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_win.cc)
else()
target_sources(xenia-vfs-dump PRIVATE
${PROJECT_SOURCE_DIR}/src/xenia/base/console_app_main_posix.cc)
endif()
target_link_libraries(xenia-vfs-dump PRIVATE fmt xenia-base xenia-vfs)
xe_target_defaults(xenia-vfs-dump)
endif()
if(XENIA_BUILD_TESTS)
add_subdirectory(testing)
endif()

View File

@@ -1,42 +0,0 @@
project_root = "../../.."
include(project_root.."/tools/build")
group("src")
project("xenia-vfs")
uuid("395c8abd-4dc9-46ed-af7a-c2b9b68a3a98")
kind("StaticLib")
language("C++")
links({
"xenia-base",
"zstd",
"zarchive"
})
recursive_platform_files()
removefiles({
"vfs_dump.cc",
})
if enableMiscSubprojects then
project("xenia-vfs-dump")
uuid("2EF270C7-41A8-4D0E-ACC5-59693A9CCE32")
kind("ConsoleApp")
language("C++")
links({
"fmt",
"xenia-base",
"xenia-vfs",
})
files({
"vfs_dump.cc",
project_root.."/src/xenia/base/console_app_main_"..platform_suffix..".cc",
})
resincludedirs({
project_root,
})
end
if enableTests then
include("testing")
end

View File

@@ -0,0 +1,3 @@
xe_test_suite(xenia-vfs-tests ${CMAKE_CURRENT_SOURCE_DIR}
LINKS xenia-vfs
)

View File

@@ -1,8 +0,0 @@
project_root = "../../../.."
include(project_root.."/tools/build")
test_suite("xenia-vfs-tests", project_root, ".", {
links = {
"xenia-vfs",
},
})

654
third_party/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,654 @@
# third_party/CMakeLists.txt - All third-party library targets.
# Suppress warnings for all third-party code.
if(MSVC)
add_compile_options(/W0)
else()
add_compile_options(-w)
endif()
# ==============================================================================
# aes_128
# ==============================================================================
add_library(aes_128 STATIC
aes_128/unroll/aes.c
)
target_include_directories(aes_128 PUBLIC aes_128)
# ==============================================================================
# capstone
# ==============================================================================
add_library(capstone STATIC
capstone/cs.c
capstone/MCInst.c
capstone/MCInstrDesc.c
capstone/MCRegisterInfo.c
capstone/SStream.c
capstone/utils.c
capstone/Mapping.c
)
# Glob X86 arch files
file(GLOB _capstone_x86_c "capstone/arch/X86/*.c")
file(GLOB _capstone_x86_h "capstone/arch/X86/*.h")
file(GLOB _capstone_x86_inc "capstone/arch/X86/*.inc")
# Remove excluded files
list(FILTER _capstone_x86_c EXCLUDE REGEX "X86ATTInstPrinter\\.c$")
list(FILTER _capstone_x86_inc EXCLUDE REGEX "reduce\\.inc$")
target_sources(capstone PRIVATE ${_capstone_x86_c} ${_capstone_x86_h} ${_capstone_x86_inc})
target_compile_definitions(capstone PRIVATE
CAPSTONE_X86_ATT_DISABLE
CAPSTONE_HAS_X86
CAPSTONE_USE_SYS_DYN_MEM
)
target_include_directories(capstone PUBLIC capstone/include PRIVATE capstone)
# Force all capstone sources to compile as C
file(GLOB_RECURSE _capstone_all_c "capstone/*.c")
set_source_files_properties(${_capstone_all_c} PROPERTIES LANGUAGE C)
# ==============================================================================
# cxxopts (header-only)
# ==============================================================================
add_library(cxxopts INTERFACE)
target_include_directories(cxxopts INTERFACE cxxopts/include)
# ==============================================================================
# tomlplusplus (header-only)
# ==============================================================================
add_library(tomlplusplus INTERFACE)
target_include_directories(tomlplusplus INTERFACE tomlplusplus/include)
# ==============================================================================
# dxbc
# ==============================================================================
add_library(dxbc STATIC
dxbc/DXBCChecksum.cpp
)
target_include_directories(dxbc PUBLIC dxbc)
# ==============================================================================
# discord-rpc
# ==============================================================================
add_library(discord-rpc STATIC
discord-rpc/src/connection.h
discord-rpc/src/discord_rpc.cpp
discord-rpc/src/msg_queue.h
discord-rpc/src/rpc_connection.cpp
discord-rpc/src/rpc_connection.h
discord-rpc/src/serialization.cpp
discord-rpc/src/serialization.h
)
target_compile_definitions(discord-rpc PRIVATE RAPIDJSON_SSE42)
target_include_directories(discord-rpc PUBLIC discord-rpc/include PRIVATE rapidjson/include)
if(WIN32)
target_sources(discord-rpc PRIVATE
discord-rpc/src/connection_win.cpp
discord-rpc/src/discord_register_win.cpp
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_sources(discord-rpc PRIVATE
discord-rpc/src/connection_unix.cpp
discord-rpc/src/discord_register_linux.cpp
)
endif()
# ==============================================================================
# fmt
# ==============================================================================
add_library(fmt STATIC
fmt/src/format.cc
fmt/src/os.cc
)
target_include_directories(fmt PUBLIC fmt/include)
# ==============================================================================
# glslang-spirv
# ==============================================================================
file(GLOB _glslang_spirv_cpp "glslang/SPIRV/*.cpp")
file(GLOB _glslang_spirv_h "glslang/SPIRV/*.h")
file(GLOB _glslang_spirv_hpp "glslang/SPIRV/*.hpp11")
list(FILTER _glslang_spirv_cpp EXCLUDE REGEX "GlslangToSpv\\.cpp$")
add_library(glslang-spirv STATIC
${_glslang_spirv_cpp}
${_glslang_spirv_h}
${_glslang_spirv_hpp}
glslang/glslang/Include/visibility.h
)
target_include_directories(glslang-spirv PUBLIC glslang)
# ==============================================================================
# imgui
# ==============================================================================
add_library(imgui STATIC
imgui/imgui.cpp
imgui/imgui_demo.cpp
imgui/imgui_draw.cpp
imgui/imgui_tables.cpp
imgui/imgui_widgets.cpp
)
target_include_directories(imgui PUBLIC imgui PRIVATE stb)
# ==============================================================================
# mspack
# ==============================================================================
add_library(mspack STATIC
mspack/logging.cc
mspack/lzxd.c
mspack/system.c
)
target_compile_definitions(mspack PRIVATE HAVE_CONFIG_H)
target_include_directories(mspack PUBLIC mspack)
target_link_libraries(mspack PUBLIC xenia-base)
# ==============================================================================
# pugixml
# ==============================================================================
add_library(pugixml STATIC
pugixml/src/pugixml.cpp
)
target_include_directories(pugixml PUBLIC pugixml/src)
# ==============================================================================
# snappy
# ==============================================================================
# Generate snappy-stubs-public.h if missing
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/snappy/snappy-stubs-public.h")
execute_process(
COMMAND ${CMAKE_COMMAND}
-DSNAPPY_BUILD_TESTS=OFF
-DSNAPPY_BUILD_BENCHMARKS=OFF
-DSNAPPY_REQUIRE_AVX=ON
${CMAKE_CURRENT_SOURCE_DIR}/snappy
-B${CMAKE_CURRENT_SOURCE_DIR}/snappy
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
add_library(snappy STATIC
snappy/snappy-internal.h
snappy/snappy-sinksource.cc
snappy/snappy-sinksource.h
snappy/snappy-stubs-internal.cc
snappy/snappy-stubs-internal.h
snappy/snappy-stubs-public.h
snappy/snappy.cc
snappy/snappy.h
)
target_include_directories(snappy PUBLIC snappy)
# ==============================================================================
# xxhash
# ==============================================================================
add_library(xxhash STATIC
xxhash/xxhash.c
)
target_include_directories(xxhash PUBLIC xxhash)
# ==============================================================================
# zstd
# ==============================================================================
file(GLOB_RECURSE _zstd_common "zstd/lib/common/*.c" "zstd/lib/common/*.h")
file(GLOB_RECURSE _zstd_compress "zstd/lib/compress/*.c" "zstd/lib/compress/*.h")
file(GLOB_RECURSE _zstd_decompress "zstd/lib/decompress/*.c" "zstd/lib/decompress/*.h")
add_library(zstd STATIC
zstd/lib/zstd.h
${_zstd_common}
${_zstd_compress}
${_zstd_decompress}
)
target_include_directories(zstd PUBLIC zstd/lib PRIVATE zstd/lib/common)
target_compile_definitions(zstd PRIVATE
XXH_NAMESPACE=ZSTD_
ZSTD_LEGACY_SUPPORT=0
)
if(NOT MSVC)
target_compile_definitions(zstd PRIVATE ZSTD_DISABLE_ASM)
endif()
# ==============================================================================
# zarchive
# ==============================================================================
add_library(zarchive STATIC
zarchive/include/zarchive/zarchivecommon.h
zarchive/include/zarchive/zarchivereader.h
zarchive/include/zarchive/zarchivewriter.h
zarchive/src/zarchivereader.cpp
zarchive/src/zarchivewriter.cpp
zarchive/src/sha_256.c
zarchive/src/sha_256.h
)
target_include_directories(zarchive PUBLIC zarchive/include PRIVATE zstd/lib)
target_link_libraries(zarchive PUBLIC zstd)
# ==============================================================================
# zlib-ng
# ==============================================================================
# Generate headers if missing
set(_zlibng_needs_configure FALSE)
foreach(_hdr zlib-ng.h zconf-ng.h zlib_name_mangling-ng.h gzread.c)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/zlib-ng/${_hdr}")
set(_zlibng_needs_configure TRUE)
break()
endif()
endforeach()
if(_zlibng_needs_configure)
execute_process(
COMMAND ${CMAKE_COMMAND}
-DZLIB_ENABLE_TESTS=OFF
-DWITH_GTEST=OFF
${CMAKE_CURRENT_SOURCE_DIR}/zlib-ng
-B${CMAKE_CURRENT_SOURCE_DIR}/zlib-ng
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
file(GLOB _zlibng_c "zlib-ng/*.c")
file(GLOB _zlibng_x86 "zlib-ng/arch/x86/*.c")
file(GLOB _zlibng_generic "zlib-ng/arch/generic/*.c")
add_library(zlib-ng STATIC
${_zlibng_c}
${_zlibng_x86}
${_zlibng_generic}
)
target_compile_definitions(zlib-ng PRIVATE
X86_FEATURES
X86_HAVE_XSAVE_INTRIN
X86_SSSE3
X86_SSE42
WITH_GZFILEOP
)
if(WIN32)
target_compile_definitions(zlib-ng PRIVATE
X86_SSE2
X86_AVX2
X86_AVX512
X86_AVX512VNNI
X86_PCLMULQDQ_CRC
X86_VPCLMULQDQ_CRC
)
else()
# Remove AVX2/AVX512 files on non-Windows
set(_zlibng_exclude_patterns
"adler32_avx2" "adler32_avx512" "adler32_avx512_vnni"
"chunkset_avx2" "compare256_avx2"
"crc32_pclmulqdq" "crc32_vpclmulqdq"
"slide_hash_avx2"
)
foreach(_pat ${_zlibng_exclude_patterns})
list(FILTER _zlibng_x86 EXCLUDE REGEX "${_pat}")
endforeach()
# Re-set sources without excluded files
get_target_property(_zlibng_srcs zlib-ng SOURCES)
set_target_properties(zlib-ng PROPERTIES SOURCES "")
target_sources(zlib-ng PRIVATE ${_zlibng_c} ${_zlibng_x86} ${_zlibng_generic})
endif()
target_include_directories(zlib-ng PUBLIC zlib-ng)
# ==============================================================================
# libusb (Windows only)
# ==============================================================================
if(WIN32)
add_library(libusb STATIC
libusb/libusb/core.c
libusb/libusb/descriptor.c
libusb/libusb/hotplug.c
libusb/libusb/io.c
libusb/libusb/strerror.c
libusb/libusb/sync.c
libusb/libusb/os/events_windows.c
libusb/libusb/os/events_windows.h
libusb/libusb/os/threads_windows.c
libusb/libusb/os/threads_windows.h
libusb/libusb/os/windows_common.c
libusb/libusb/os/windows_common.h
libusb/libusb/os/windows_usbdk.c
libusb/libusb/os/windows_usbdk.h
libusb/libusb/os/windows_winusb.c
libusb/libusb/os/windows_winusb.h
)
target_include_directories(libusb PUBLIC libusb/libusb PRIVATE libusb/msvc)
endif()
# ==============================================================================
# SDL2
# ==============================================================================
if(WIN32)
# Build SDL2 from source on Windows
file(GLOB _sdl2_sources
"SDL2/src/*.c"
"SDL2/src/atomic/*.c"
"SDL2/src/audio/*.c"
"SDL2/src/audio/directsound/*.c"
"SDL2/src/audio/disk/*.c"
"SDL2/src/audio/dummy/*.c"
"SDL2/src/audio/wasapi/*.c"
"SDL2/src/audio/winmm/*.c"
"SDL2/src/core/windows/*.c"
"SDL2/src/cpuinfo/*.c"
"SDL2/src/dynapi/*.c"
"SDL2/src/events/*.c"
"SDL2/src/file/*.c"
"SDL2/src/filesystem/windows/*.c"
"SDL2/src/haptic/*.c"
"SDL2/src/haptic/dummy/*.c"
"SDL2/src/haptic/windows/*.c"
"SDL2/src/hidapi/*.c"
"SDL2/src/joystick/*.c"
"SDL2/src/joystick/dummy/*.c"
"SDL2/src/joystick/hidapi/*.c"
"SDL2/src/joystick/virtual/*.c"
"SDL2/src/joystick/windows/*.c"
"SDL2/src/libm/*.c"
"SDL2/src/loadso/windows/*.c"
"SDL2/src/locale/*.c"
"SDL2/src/locale/windows/*.c"
"SDL2/src/misc/*.c"
"SDL2/src/misc/windows/*.c"
"SDL2/src/power/*.c"
"SDL2/src/power/windows/*.c"
"SDL2/src/render/*.c"
"SDL2/src/render/direct3d/*.c"
"SDL2/src/render/direct3d11/*.c"
"SDL2/src/render/direct3d12/*.c"
"SDL2/src/render/opengl/*.c"
"SDL2/src/render/opengles2/*.c"
"SDL2/src/render/software/*.c"
"SDL2/src/sensor/*.c"
"SDL2/src/sensor/dummy/*.c"
"SDL2/src/sensor/windows/*.c"
"SDL2/src/stdlib/*.c"
"SDL2/src/thread/*.c"
"SDL2/src/thread/generic/SDL_syscond.c"
"SDL2/src/thread/windows/*.c"
"SDL2/src/timer/*.c"
"SDL2/src/timer/windows/*.c"
"SDL2/src/video/*.c"
"SDL2/src/video/dummy/*.c"
"SDL2/src/video/windows/*.c"
"SDL2/src/video/yuv2rgb/*.c"
)
add_library(SDL2 STATIC ${_sdl2_sources})
target_compile_definitions(SDL2 PRIVATE
HAVE_LIBC
SDL_LEAN_AND_MEAN
SDL_RENDER_DISABLED
)
target_include_directories(SDL2 PUBLIC SDL2/include)
target_link_libraries(SDL2 PRIVATE setupapi winmm imm32 version)
else()
# Use system SDL2 on Linux
add_library(SDL2 INTERFACE)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2_PKG REQUIRED sdl2)
target_include_directories(SDL2 INTERFACE ${SDL2_PKG_INCLUDE_DIRS})
target_link_libraries(SDL2 INTERFACE ${SDL2_PKG_LDFLAGS})
target_compile_options(SDL2 INTERFACE ${SDL2_PKG_CFLAGS_OTHER})
endif()
# ==============================================================================
# FFmpeg (source in FFmpeg submodule, config overlay in ffmpeg-xenia)
# ==============================================================================
# Common function to apply shared FFmpeg settings to a target.
function(ffmpeg_common target)
target_compile_definitions(${target} PRIVATE
HAVE_AV_CONFIG_H
_USE_MATH_DEFINES
)
target_include_directories(${target} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg-xenia
${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg
)
if(WIN32)
target_include_directories(${target} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg/compat/atomics/win32
)
target_link_libraries(${target} PRIVATE bcrypt)
# Size optimization on Debug/Checked (dead code elimination is mandatory)
target_compile_options(${target} PRIVATE
$<$<CONFIG:Debug>:/Os>
$<$<CONFIG:Checked>:/Os>
)
else()
target_include_directories(${target} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg/compat/atomics/gcc
)
endif()
# Suppress all warnings for FFmpeg code
if(MSVC)
target_compile_options(${target} PRIVATE /w)
else()
target_compile_options(${target} PRIVATE -w)
endif()
# All FFmpeg source is C
set_target_properties(${target} PROPERTIES LINKER_LANGUAGE C)
endfunction()
# --- libavutil ---
add_library(libavutil STATIC
FFmpeg/libavutil/adler32.c
FFmpeg/libavutil/aes.c
FFmpeg/libavutil/aes_ctr.c
FFmpeg/libavutil/audio_fifo.c
FFmpeg/libavutil/avstring.c
FFmpeg/libavutil/avsscanf.c
FFmpeg/libavutil/base64.c
FFmpeg/libavutil/blowfish.c
FFmpeg/libavutil/bprint.c
FFmpeg/libavutil/buffer.c
FFmpeg/libavutil/cast5.c
FFmpeg/libavutil/camellia.c
FFmpeg/libavutil/channel_layout.c
FFmpeg/libavutil/csp.c
FFmpeg/libavutil/cpu.c
FFmpeg/libavutil/crc.c
FFmpeg/libavutil/des.c
FFmpeg/libavutil/dict.c
FFmpeg/libavutil/display.c
FFmpeg/libavutil/dovi_meta.c
FFmpeg/libavutil/downmix_info.c
FFmpeg/libavutil/encryption_info.c
FFmpeg/libavutil/error.c
FFmpeg/libavutil/eval.c
FFmpeg/libavutil/fifo.c
FFmpeg/libavutil/file.c
FFmpeg/libavutil/file_open.c
FFmpeg/libavutil/float_dsp.c
FFmpeg/libavutil/fixed_dsp.c
FFmpeg/libavutil/frame.c
FFmpeg/libavutil/hash.c
FFmpeg/libavutil/hdr_dynamic_metadata.c
FFmpeg/libavutil/hmac.c
FFmpeg/libavutil/hwcontext.c
FFmpeg/libavutil/imgutils.c
FFmpeg/libavutil/integer.c
FFmpeg/libavutil/intmath.c
FFmpeg/libavutil/lfg.c
FFmpeg/libavutil/lls.c
FFmpeg/libavutil/log.c
FFmpeg/libavutil/log2_tab.c
FFmpeg/libavutil/mathematics.c
FFmpeg/libavutil/mastering_display_metadata.c
FFmpeg/libavutil/md5.c
FFmpeg/libavutil/mem.c
FFmpeg/libavutil/murmur3.c
FFmpeg/libavutil/opt.c
FFmpeg/libavutil/parseutils.c
FFmpeg/libavutil/pixdesc.c
FFmpeg/libavutil/pixelutils.c
FFmpeg/libavutil/random_seed.c
FFmpeg/libavutil/rational.c
FFmpeg/libavutil/reverse.c
FFmpeg/libavutil/rc4.c
FFmpeg/libavutil/ripemd.c
FFmpeg/libavutil/samplefmt.c
FFmpeg/libavutil/sha.c
FFmpeg/libavutil/sha512.c
FFmpeg/libavutil/slicethread.c
FFmpeg/libavutil/spherical.c
FFmpeg/libavutil/stereo3d.c
FFmpeg/libavutil/threadmessage.c
FFmpeg/libavutil/time.c
FFmpeg/libavutil/timecode.c
FFmpeg/libavutil/tree.c
FFmpeg/libavutil/twofish.c
FFmpeg/libavutil/utils.c
FFmpeg/libavutil/xga_font_data.c
FFmpeg/libavutil/xtea.c
FFmpeg/libavutil/tea.c
FFmpeg/libavutil/tx.c
FFmpeg/libavutil/tx_float.c
FFmpeg/libavutil/tx_double.c
FFmpeg/libavutil/tx_int32.c
FFmpeg/libavutil/video_enc_params.c
FFmpeg/libavutil/film_grain_params.c
FFmpeg/libavutil/side_data.c
FFmpeg/libavutil/refstruct.c
FFmpeg/libavutil/container_fifo.c
FFmpeg/libavutil/float_scalarproduct.c
FFmpeg/libavutil/timecode_internal.c
FFmpeg/libavutil/iamf.c
FFmpeg/libavutil/timestamp.c
)
# x86 platform files
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
target_sources(libavutil PRIVATE
FFmpeg/libavutil/x86/cpu.c
FFmpeg/libavutil/x86/fixed_dsp_init.c
FFmpeg/libavutil/x86/float_dsp_init.c
FFmpeg/libavutil/x86/imgutils_init.c
FFmpeg/libavutil/x86/lls_init.c
FFmpeg/libavutil/x86/tx_float_init.c
)
endif()
ffmpeg_common(libavutil)
# --- libavcodec ---
add_library(libavcodec STATIC
FFmpeg/libavcodec/ac3_parser.c
FFmpeg/libavcodec/adts_parser.c
FFmpeg/libavcodec/allcodecs.c
FFmpeg/libavcodec/avcodec.c
FFmpeg/libavcodec/avdct.c
FFmpeg/libavcodec/packet.c
FFmpeg/libavcodec/bitstream.c
FFmpeg/libavcodec/bitstream_filters.c
FFmpeg/libavcodec/bsf.c
FFmpeg/libavcodec/codec_desc.c
FFmpeg/libavcodec/codec_par.c
FFmpeg/libavcodec/d3d11va.c
FFmpeg/libavcodec/decode.c
FFmpeg/libavcodec/dirac.c
FFmpeg/libavcodec/dv_profile.c
FFmpeg/libavcodec/encode.c
FFmpeg/libavcodec/imgconvert.c
FFmpeg/libavcodec/jni.c
FFmpeg/libavcodec/mathtables.c
FFmpeg/libavcodec/mediacodec.c
FFmpeg/libavcodec/mpeg12framerate.c
FFmpeg/libavcodec/options.c
FFmpeg/libavcodec/parser.c
FFmpeg/libavcodec/parsers.c
FFmpeg/libavcodec/profiles.c
FFmpeg/libavcodec/qsv_api.c
FFmpeg/libavcodec/raw.c
FFmpeg/libavcodec/utils.c
FFmpeg/libavcodec/vorbis_parser.c
FFmpeg/libavcodec/xiph.c
FFmpeg/libavcodec/dct32_fixed.c
FFmpeg/libavcodec/dct32_float.c
FFmpeg/libavcodec/faandct.c
FFmpeg/libavcodec/faanidct.c
FFmpeg/libavcodec/fdctdsp.c
FFmpeg/libavcodec/jfdctfst.c
FFmpeg/libavcodec/jfdctint.c
FFmpeg/libavcodec/idctdsp.c
FFmpeg/libavcodec/simple_idct.c
FFmpeg/libavcodec/jrevdct.c
FFmpeg/libavcodec/mpegaudio.c
FFmpeg/libavcodec/mpegaudiodec_common.c
FFmpeg/libavcodec/mpegaudiodsp.c
FFmpeg/libavcodec/mpegaudiodsp_data.c
FFmpeg/libavcodec/mpegaudiodsp_fixed.c
FFmpeg/libavcodec/mpegaudiodsp_float.c
FFmpeg/libavcodec/mpegaudiodecheader.c
FFmpeg/libavcodec/mpegaudiodata.c
FFmpeg/libavcodec/sinewin.c
FFmpeg/libavcodec/wma_freqs.c
FFmpeg/libavcodec/mpegaudiodec_fixed.c
FFmpeg/libavcodec/mpegaudiodec_float.c
FFmpeg/libavcodec/wmaprodec.c
FFmpeg/libavcodec/wma.c
FFmpeg/libavcodec/wma_common.c
FFmpeg/libavcodec/wmadec.c
FFmpeg/libavcodec/aactab.c
FFmpeg/libavcodec/mpegaudio_parser.c
FFmpeg/libavcodec/pthread.c
FFmpeg/libavcodec/pthread_slice.c
FFmpeg/libavcodec/pthread_frame.c
FFmpeg/libavcodec/get_buffer.c
FFmpeg/libavcodec/vlc.c
FFmpeg/libavcodec/threadprogress.c
FFmpeg/libavcodec/bsf/null.c
FFmpeg/libavcodec/exif.c
FFmpeg/libavcodec/mpegaudiotabs.c
FFmpeg/libavcodec/tiff_common.c
)
if(WIN32)
target_sources(libavcodec PRIVATE FFmpeg/libavcodec/file_open.c)
endif()
# x86 platform files
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
target_sources(libavcodec PRIVATE
FFmpeg/libavcodec/x86/constants.c
FFmpeg/libavcodec/x86/fdctdsp_init.c
FFmpeg/libavcodec/x86/idctdsp_init.c
FFmpeg/libavcodec/x86/mpegaudiodsp.c
FFmpeg/libavcodec/x86/fdct.c
)
endif()
target_include_directories(libavcodec PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg/libavcodec
)
target_link_libraries(libavcodec PRIVATE libavutil)
ffmpeg_common(libavcodec)
# --- libavformat ---
add_library(libavformat STATIC
FFmpeg/libavformat/allformats.c
FFmpeg/libavformat/avio.c
FFmpeg/libavformat/aviobuf.c
FFmpeg/libavformat/dump.c
FFmpeg/libavformat/format.c
FFmpeg/libavformat/id3v1.c
FFmpeg/libavformat/id3v2.c
FFmpeg/libavformat/metadata.c
FFmpeg/libavformat/mux.c
FFmpeg/libavformat/options.c
FFmpeg/libavformat/os_support.c
FFmpeg/libavformat/protocols.c
FFmpeg/libavformat/riff.c
FFmpeg/libavformat/sdp.c
FFmpeg/libavformat/url.c
FFmpeg/libavformat/utils.c
FFmpeg/libavformat/riffdec.c
FFmpeg/libavformat/asfdec_f.c
FFmpeg/libavformat/asf.c
FFmpeg/libavformat/asfcrypt.c
FFmpeg/libavformat/avlanguage.c
FFmpeg/libavformat/mp3dec.c
FFmpeg/libavformat/replaygain.c
FFmpeg/libavformat/file.c
FFmpeg/libavformat/demux.c
FFmpeg/libavformat/avformat.c
FFmpeg/libavformat/seek.c
FFmpeg/libavformat/demux_utils.c
FFmpeg/libavformat/urldecode.c
FFmpeg/libavformat/asf_tags.c
FFmpeg/libavformat/to_upper4.c
)
if(WIN32)
target_sources(libavformat PRIVATE FFmpeg/libavformat/file_open.c)
endif()
target_link_libraries(libavformat PRIVATE libavutil libavcodec)
ffmpeg_common(libavformat)

View File

@@ -1,360 +0,0 @@
-- This project resembles the build configuration on Windows only.
group("third_party")
project("SDL2")
uuid("65878768-95A1-4E7B-8DFB-B23A09E0DE7C")
kind("StaticLib")
language("C")
defines({
"HAVE_LIBC",
"SDL_LEAN_AND_MEAN",
"SDL_RENDER_DISABLED",
})
links({
"setupapi.lib",
"winmm.lib",
"imm32.lib",
"version.lib",
})
includedirs({
"SDL2/include",
})
files({
-- 1:1 from SDL2/VisualC/SDL/SDL.vcxproj file
"SDL2/src/audio/directsound/SDL_directsound.h",
"SDL2/src/audio/disk/SDL_diskaudio.h",
"SDL2/src/audio/dummy/SDL_dummyaudio.h",
"SDL2/src/audio/SDL_audio_c.h",
"SDL2/src/audio/SDL_audiodev_c.h",
"SDL2/src/audio/SDL_sysaudio.h",
"SDL2/src/audio/SDL_wave.h",
"SDL2/src/audio/wasapi/SDL_wasapi.h",
"SDL2/src/audio/winmm/SDL_winmm.h",
"SDL2/src/core/windows/SDL_directx.h",
"SDL2/src/core/windows/SDL_hid.h",
"SDL2/src/core/windows/SDL_immdevice.h",
"SDL2/src/core/windows/SDL_windows.h",
"SDL2/src/core/windows/SDL_xinput.h",
"SDL2/src/dynapi/SDL_dynapi.h",
"SDL2/src/dynapi/SDL_dynapi_overrides.h",
"SDL2/src/dynapi/SDL_dynapi_procs.h",
"SDL2/src/events/blank_cursor.h",
"SDL2/src/events/default_cursor.h",
"SDL2/src/events/scancodes_windows.h",
"SDL2/src/events/SDL_clipboardevents_c.h",
"SDL2/src/events/SDL_displayevents_c.h",
"SDL2/src/events/SDL_dropevents_c.h",
"SDL2/src/events/SDL_events_c.h",
"SDL2/src/events/SDL_gesture_c.h",
"SDL2/src/events/SDL_keyboard_c.h",
"SDL2/src/events/SDL_mouse_c.h",
"SDL2/src/events/SDL_touch_c.h",
"SDL2/src/events/SDL_windowevents_c.h",
"SDL2/src/haptic/SDL_haptic_c.h",
"SDL2/src/haptic/SDL_syshaptic.h",
"SDL2/src/haptic/windows/SDL_dinputhaptic_c.h",
"SDL2/src/haptic/windows/SDL_windowshaptic_c.h",
"SDL2/src/haptic/windows/SDL_xinputhaptic_c.h",
"SDL2/src/hidapi/hidapi/hidapi.h",
"SDL2/src/hidapi/SDL_hidapi_c.h",
"SDL2/src/joystick/controller_type.h",
"SDL2/src/joystick/hidapi/SDL_hidapijoystick_c.h",
"SDL2/src/joystick/hidapi/SDL_hidapi_rumble.h",
"SDL2/src/joystick/SDL_gamecontrollerdb.h",
"SDL2/src/joystick/SDL_joystick_c.h",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.h",
"SDL2/src/joystick/SDL_sysjoystick.h",
"SDL2/src/joystick/usb_ids.h",
"SDL2/src/joystick/virtual/SDL_virtualjoystick_c.h",
"SDL2/src/joystick/windows/SDL_dinputjoystick_c.h",
"SDL2/src/joystick/windows/SDL_rawinputjoystick_c.h",
"SDL2/src/joystick/windows/SDL_windowsjoystick_c.h",
"SDL2/src/joystick/windows/SDL_xinputjoystick_c.h",
"SDL2/src/libm/math_libm.h",
"SDL2/src/libm/math_private.h",
"SDL2/src/locale/SDL_syslocale.h",
"SDL2/src/misc/SDL_sysurl.h",
"SDL2/src/power/SDL_syspower.h",
"SDL2/src/render/direct3d11/SDL_shaders_d3d11.h",
"SDL2/src/render/direct3d12/SDL_shaders_d3d12.h",
"SDL2/src/render/direct3d/SDL_shaders_d3d.h",
"SDL2/src/render/opengles2/SDL_gles2funcs.h",
"SDL2/src/render/opengles2/SDL_shaders_gles2.h",
"SDL2/src/render/opengl/SDL_glfuncs.h",
"SDL2/src/render/opengl/SDL_shaders_gl.h",
"SDL2/src/render/SDL_d3dmath.h",
"SDL2/src/render/SDL_sysrender.h",
"SDL2/src/render/SDL_yuv_sw_c.h",
"SDL2/src/render/software/SDL_blendfillrect.h",
"SDL2/src/render/software/SDL_blendline.h",
"SDL2/src/render/software/SDL_blendpoint.h",
"SDL2/src/render/software/SDL_draw.h",
"SDL2/src/render/software/SDL_drawline.h",
"SDL2/src/render/software/SDL_drawpoint.h",
"SDL2/src/render/software/SDL_render_sw_c.h",
"SDL2/src/render/software/SDL_rotate.h",
"SDL2/src/render/software/SDL_triangle.h",
"SDL2/src/SDL_assert_c.h",
"SDL2/src/SDL_dataqueue.h",
"SDL2/src/SDL_error_c.h",
"SDL2/src/SDL_guid.c",
"SDL2/src/SDL_hints_c.h",
"SDL2/src/SDL_internal.h",
"SDL2/src/SDL_list.h",
"SDL2/src/SDL_log_c.h",
"SDL2/src/sensor/dummy/SDL_dummysensor.h",
"SDL2/src/sensor/SDL_sensor_c.h",
"SDL2/src/sensor/SDL_syssensor.h",
"SDL2/src/sensor/windows/SDL_windowssensor.h",
"SDL2/src/thread/SDL_systhread.h",
"SDL2/src/thread/SDL_thread_c.h",
"SDL2/src/thread/generic/SDL_syscond_c.h",
"SDL2/src/thread/windows/SDL_sysmutex_c.h",
"SDL2/src/thread/windows/SDL_systhread_c.h",
"SDL2/src/timer/SDL_timer_c.h",
"SDL2/src/video/dummy/SDL_nullevents_c.h",
"SDL2/src/video/dummy/SDL_nullframebuffer_c.h",
"SDL2/src/video/dummy/SDL_nullvideo.h",
"SDL2/src/video/khronos/vulkan/vk_icd.h",
"SDL2/src/video/khronos/vulkan/vk_layer.h",
"SDL2/src/video/khronos/vulkan/vk_platform.h",
"SDL2/src/video/khronos/vulkan/vk_sdk_platform.h",
"SDL2/src/video/khronos/vulkan/vulkan.h",
"SDL2/src/video/khronos/vulkan/vulkan_android.h",
"SDL2/src/video/khronos/vulkan/vulkan_beta.h",
"SDL2/src/video/khronos/vulkan/vulkan_core.h",
"SDL2/src/video/khronos/vulkan/vulkan_directfb.h",
"SDL2/src/video/khronos/vulkan/vulkan_fuchsia.h",
"SDL2/src/video/khronos/vulkan/vulkan_ggp.h",
"SDL2/src/video/khronos/vulkan/vulkan_ios.h",
"SDL2/src/video/khronos/vulkan/vulkan_macos.h",
"SDL2/src/video/khronos/vulkan/vulkan_metal.h",
"SDL2/src/video/khronos/vulkan/vulkan_vi.h",
"SDL2/src/video/khronos/vulkan/vulkan_wayland.h",
"SDL2/src/video/khronos/vulkan/vulkan_win32.h",
"SDL2/src/video/khronos/vulkan/vulkan_xcb.h",
"SDL2/src/video/khronos/vulkan/vulkan_xlib.h",
"SDL2/src/video/khronos/vulkan/vulkan_xlib_xrandr.h",
"SDL2/src/video/SDL_blit.h",
"SDL2/src/video/SDL_blit_auto.h",
"SDL2/src/video/SDL_blit_copy.h",
"SDL2/src/video/SDL_blit_slow.h",
"SDL2/src/video/SDL_egl_c.h",
"SDL2/src/video/SDL_pixels_c.h",
"SDL2/src/video/SDL_rect_c.h",
"SDL2/src/video/SDL_RLEaccel_c.h",
"SDL2/src/video/SDL_shape_internals.h",
"SDL2/src/video/SDL_sysvideo.h",
"SDL2/src/video/SDL_vulkan_internal.h",
"SDL2/src/video/SDL_yuv_c.h",
"SDL2/src/video/windows/SDL_msctf.h",
"SDL2/src/video/windows/SDL_vkeys.h",
"SDL2/src/video/windows/SDL_windowsclipboard.h",
"SDL2/src/video/windows/SDL_windowsevents.h",
"SDL2/src/video/windows/SDL_windowsframebuffer.h",
"SDL2/src/video/windows/SDL_windowskeyboard.h",
"SDL2/src/video/windows/SDL_windowsmessagebox.h",
"SDL2/src/video/windows/SDL_windowsmodes.h",
"SDL2/src/video/windows/SDL_windowsmouse.h",
"SDL2/src/video/windows/SDL_windowsopengl.h",
"SDL2/src/video/windows/SDL_windowsopengles.h",
"SDL2/src/video/windows/SDL_windowsshape.h",
"SDL2/src/video/windows/SDL_windowsvideo.h",
"SDL2/src/video/windows/SDL_windowsvulkan.h",
"SDL2/src/video/windows/SDL_windowswindow.h",
"SDL2/src/video/windows/wmmsg.h",
"SDL2/src/video/yuv2rgb/yuv_rgb.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_common.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_internal.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx_func.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse_func.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_std.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_std_func.h",
"SDL2/src/atomic/SDL_atomic.c",
"SDL2/src/atomic/SDL_spinlock.c",
"SDL2/src/audio/directsound/SDL_directsound.c",
"SDL2/src/audio/disk/SDL_diskaudio.c",
"SDL2/src/audio/dummy/SDL_dummyaudio.c",
"SDL2/src/audio/SDL_audio.c",
"SDL2/src/audio/SDL_audiocvt.c",
"SDL2/src/audio/SDL_audiodev.c",
"SDL2/src/audio/SDL_audiotypecvt.c",
"SDL2/src/audio/SDL_mixer.c",
"SDL2/src/audio/SDL_wave.c",
"SDL2/src/audio/winmm/SDL_winmm.c",
"SDL2/src/audio/wasapi/SDL_wasapi.c",
"SDL2/src/audio/wasapi/SDL_wasapi_win32.c",
"SDL2/src/core/windows/SDL_hid.c",
"SDL2/src/core/windows/SDL_immdevice.c",
"SDL2/src/core/windows/SDL_windows.c",
"SDL2/src/core/windows/SDL_xinput.c",
"SDL2/src/cpuinfo/SDL_cpuinfo.c",
"SDL2/src/dynapi/SDL_dynapi.c",
"SDL2/src/events/SDL_clipboardevents.c",
"SDL2/src/events/SDL_displayevents.c",
"SDL2/src/events/SDL_dropevents.c",
"SDL2/src/events/SDL_events.c",
"SDL2/src/events/SDL_gesture.c",
"SDL2/src/events/SDL_keyboard.c",
"SDL2/src/events/SDL_mouse.c",
"SDL2/src/events/SDL_quit.c",
"SDL2/src/events/SDL_touch.c",
"SDL2/src/events/SDL_windowevents.c",
"SDL2/src/file/SDL_rwops.c",
"SDL2/src/filesystem/windows/SDL_sysfilesystem.c",
"SDL2/src/haptic/dummy/SDL_syshaptic.c",
"SDL2/src/haptic/SDL_haptic.c",
"SDL2/src/haptic/windows/SDL_dinputhaptic.c",
"SDL2/src/haptic/windows/SDL_windowshaptic.c",
"SDL2/src/haptic/windows/SDL_xinputhaptic.c",
"SDL2/src/hidapi/SDL_hidapi.c",
"SDL2/src/joystick/controller_type.c",
"SDL2/src/joystick/dummy/SDL_sysjoystick.c",
"SDL2/src/joystick/hidapi/SDL_hidapijoystick.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_combined.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_gamecube.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_luna.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_ps3.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_ps4.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_ps5.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_rumble.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_shield.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_stadia.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_steam.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_steamdeck.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_switch.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_wii.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_xbox360.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_xbox360w.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_xboxone.c",
"SDL2/src/joystick/SDL_gamecontroller.c",
"SDL2/src/joystick/SDL_joystick.c",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.c",
"SDL2/src/joystick/virtual/SDL_virtualjoystick.c",
"SDL2/src/joystick/windows/SDL_dinputjoystick.c",
"SDL2/src/joystick/windows/SDL_rawinputjoystick.c",
"SDL2/src/joystick/windows/SDL_windowsjoystick.c",
"SDL2/src/joystick/windows/SDL_windows_gaming_input.c",
"SDL2/src/joystick/windows/SDL_xinputjoystick.c",
"SDL2/src/libm/e_atan2.c",
"SDL2/src/libm/e_exp.c",
"SDL2/src/libm/e_fmod.c",
"SDL2/src/libm/e_log.c",
"SDL2/src/libm/e_log10.c",
"SDL2/src/libm/e_pow.c",
"SDL2/src/libm/e_rem_pio2.c",
"SDL2/src/libm/e_sqrt.c",
"SDL2/src/libm/k_cos.c",
"SDL2/src/libm/k_rem_pio2.c",
"SDL2/src/libm/k_sin.c",
"SDL2/src/libm/k_tan.c",
"SDL2/src/libm/s_atan.c",
"SDL2/src/libm/s_copysign.c",
"SDL2/src/libm/s_cos.c",
"SDL2/src/libm/s_fabs.c",
"SDL2/src/libm/s_floor.c",
"SDL2/src/libm/s_scalbn.c",
"SDL2/src/libm/s_sin.c",
"SDL2/src/libm/s_tan.c",
"SDL2/src/loadso/windows/SDL_sysloadso.c",
"SDL2/src/locale/SDL_locale.c",
"SDL2/src/locale/windows/SDL_syslocale.c",
"SDL2/src/misc/SDL_url.c",
"SDL2/src/misc/windows/SDL_sysurl.c",
"SDL2/src/power/SDL_power.c",
"SDL2/src/power/windows/SDL_syspower.c",
"SDL2/src/render/direct3d11/SDL_shaders_d3d11.c",
"SDL2/src/render/direct3d12/SDL_render_d3d12.c",
"SDL2/src/render/direct3d12/SDL_shaders_d3d12.c",
"SDL2/src/render/direct3d/SDL_render_d3d.c",
"SDL2/src/render/direct3d11/SDL_render_d3d11.c",
"SDL2/src/render/direct3d/SDL_shaders_d3d.c",
"SDL2/src/render/opengl/SDL_render_gl.c",
"SDL2/src/render/opengl/SDL_shaders_gl.c",
"SDL2/src/render/opengles2/SDL_render_gles2.c",
"SDL2/src/render/opengles2/SDL_shaders_gles2.c",
"SDL2/src/render/SDL_d3dmath.c",
"SDL2/src/render/SDL_render.c",
"SDL2/src/render/SDL_yuv_sw.c",
"SDL2/src/render/software/SDL_blendfillrect.c",
"SDL2/src/render/software/SDL_blendline.c",
"SDL2/src/render/software/SDL_blendpoint.c",
"SDL2/src/render/software/SDL_drawline.c",
"SDL2/src/render/software/SDL_drawpoint.c",
"SDL2/src/render/software/SDL_render_sw.c",
"SDL2/src/render/software/SDL_rotate.c",
"SDL2/src/render/software/SDL_triangle.c",
"SDL2/src/SDL.c",
"SDL2/src/SDL_assert.c",
"SDL2/src/SDL_dataqueue.c",
"SDL2/src/SDL_list.c",
"SDL2/src/SDL_error.c",
"SDL2/src/SDL_hints.c",
"SDL2/src/SDL_log.c",
"SDL2/src/SDL_utils.c",
"SDL2/src/sensor/dummy/SDL_dummysensor.c",
"SDL2/src/sensor/SDL_sensor.c",
"SDL2/src/sensor/windows/SDL_windowssensor.c",
"SDL2/src/stdlib/SDL_crc16.c",
"SDL2/src/stdlib/SDL_crc32.c",
"SDL2/src/stdlib/SDL_getenv.c",
"SDL2/src/stdlib/SDL_iconv.c",
"SDL2/src/stdlib/SDL_malloc.c",
"SDL2/src/stdlib/SDL_mslibc.c",
"SDL2/src/stdlib/SDL_qsort.c",
"SDL2/src/stdlib/SDL_stdlib.c",
"SDL2/src/stdlib/SDL_string.c",
"SDL2/src/stdlib/SDL_strtokr.c",
"SDL2/src/thread/generic/SDL_syscond.c",
"SDL2/src/thread/SDL_thread.c",
"SDL2/src/thread/windows/SDL_syscond_cv.c",
"SDL2/src/thread/windows/SDL_sysmutex.c",
"SDL2/src/thread/windows/SDL_syssem.c",
"SDL2/src/thread/windows/SDL_systhread.c",
"SDL2/src/thread/windows/SDL_systls.c",
"SDL2/src/timer/SDL_timer.c",
"SDL2/src/timer/windows/SDL_systimer.c",
"SDL2/src/video/dummy/SDL_nullevents.c",
"SDL2/src/video/dummy/SDL_nullframebuffer.c",
"SDL2/src/video/dummy/SDL_nullvideo.c",
"SDL2/src/video/SDL_blit.c",
"SDL2/src/video/SDL_blit_0.c",
"SDL2/src/video/SDL_blit_1.c",
"SDL2/src/video/SDL_blit_A.c",
"SDL2/src/video/SDL_blit_auto.c",
"SDL2/src/video/SDL_blit_copy.c",
"SDL2/src/video/SDL_blit_N.c",
"SDL2/src/video/SDL_blit_slow.c",
"SDL2/src/video/SDL_bmp.c",
"SDL2/src/video/SDL_clipboard.c",
"SDL2/src/video/SDL_egl.c",
"SDL2/src/video/SDL_fillrect.c",
"SDL2/src/video/SDL_pixels.c",
"SDL2/src/video/SDL_rect.c",
"SDL2/src/video/SDL_RLEaccel.c",
"SDL2/src/video/SDL_shape.c",
"SDL2/src/video/SDL_stretch.c",
"SDL2/src/video/SDL_surface.c",
"SDL2/src/video/SDL_video.c",
"SDL2/src/video/SDL_vulkan_utils.c",
"SDL2/src/video/SDL_yuv.c",
"SDL2/src/video/windows/SDL_windowsclipboard.c",
"SDL2/src/video/windows/SDL_windowsevents.c",
"SDL2/src/video/windows/SDL_windowsframebuffer.c",
"SDL2/src/video/windows/SDL_windowskeyboard.c",
"SDL2/src/video/windows/SDL_windowsmessagebox.c",
"SDL2/src/video/windows/SDL_windowsmodes.c",
"SDL2/src/video/windows/SDL_windowsmouse.c",
"SDL2/src/video/windows/SDL_windowsopengl.c",
"SDL2/src/video/windows/SDL_windowsopengles.c",
"SDL2/src/video/windows/SDL_windowsshape.c",
"SDL2/src/video/windows/SDL_windowsvideo.c",
"SDL2/src/video/windows/SDL_windowsvulkan.c",
"SDL2/src/video/windows/SDL_windowswindow.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_std.c",
})

36
third_party/SDL2.lua vendored
View File

@@ -1,36 +0,0 @@
--
-- On Linux we build against the system version (libsdl2-dev for building),
-- since SDL2 is our robust API there like DirectX is on Windows.
--
local sdl2_sys_includedirs = {}
local third_party_path = os.getcwd()
if os.istarget("windows") then
-- build ourselves
include("SDL2-static.lua")
else
-- use system libraries
local result, code, what = os.outputof("sdl2-config --cflags")
if result then
for inc in string.gmatch(result, "-I([%S]+)") do
table.insert(sdl2_sys_includedirs, inc)
end
else
error("Failed to run 'sdl2-config'. Are libsdl2 development files installed?")
end
end
--
-- Call this function in project scope to include the SDL2 headers.
--
function sdl2_include()
filter("platforms:Windows")
includedirs({
path.getrelative(".", third_party_path) .. "/SDL2/include",
})
filter("platforms:Linux or platforms:Mac")
includedirs(sdl2_sys_includedirs)
filter({})
end

View File

@@ -1,11 +0,0 @@
group("third_party")
project("aes_128")
uuid("b50458bf-dd83-4c1a-8cad-61f5fbbfd720")
kind("StaticLib")
language("C")
includedirs({
"aes_128",
})
files({
"aes_128/unroll/aes.c",
})

View File

@@ -1,36 +0,0 @@
group("third_party")
project("capstone")
uuid("b3a89f7e-bb02-4945-ae75-219caed6afa2")
kind("StaticLib")
language("C")
defines({
"CAPSTONE_X86_ATT_DISABLE",
"CAPSTONE_HAS_X86",
"CAPSTONE_USE_SYS_DYN_MEM",
})
includedirs({
"capstone",
"capstone/include",
})
files({
"capstone/cs.c",
"capstone/MCInst.c",
"capstone/MCInstrDesc.c",
"capstone/MCRegisterInfo.c",
"capstone/SStream.c",
"capstone/utils.c",
"capstone/Mapping.c",
"capstone/arch/X86/*.c",
"capstone/arch/X86/*.h",
"capstone/arch/X86/*.inc",
})
force_compile_as_c({
"capstone/**.c",
"capstone/arch/X86/**.c",
})
removefiles({
"capstone/arch/X86/X86ATTInstPrinter.c",
"capstone/arch/X86/*reduce.inc",
})

View File

@@ -1,14 +0,0 @@
group("third_party")
project("cxxopts")
uuid("8b68cbe8-2da4-4f28-be14-9352eafa3168")
if os.istarget("android") then
-- ndk-build only supports StaticLib and SharedLib.
kind("StaticLib")
else
kind("Utility")
end
language("C++")
files({
"cxxopts/include/cxxopts.hpp",
})
warnings("Off")

View File

@@ -1,36 +0,0 @@
group("third_party")
project("discord-rpc")
uuid("012f6131-efc0-4abd-852d-a33640732d4c")
kind("StaticLib")
language("C++")
defines({
"RAPIDJSON_SSE42",
-- "RAPIDJSON_NEON",
})
includedirs({
"discord-rpc/include",
"rapidjson/include"
})
files({
"discord-rpc/src/connection.h",
"discord-rpc/src/discord_rpc.cpp",
"discord-rpc/src/msg_queue.h",
"discord-rpc/src/rpc_connection.cpp",
"discord-rpc/src/rpc_connection.h",
"discord-rpc/src/serialization.cpp",
"discord-rpc/src/serialization.h"
})
filter("platforms:Linux")
files({
"discord-rpc/src/connection_unix.cpp",
"discord-rpc/src/discord_register_linux.cpp"
})
filter("platforms:Mac")
files({
"discord-rpc/src/discord_register_osx.m"
})
filter("platforms:Windows")
files({
"discord-rpc/src/connection_win.cpp",
"discord-rpc/src/discord_register_win.cpp"
})

11
third_party/dxbc.lua vendored
View File

@@ -1,11 +0,0 @@
group("third_party")
project("dxbc")
uuid("c96688ca-51ca-406e-aeef-068734a67abe")
kind("StaticLib")
language("C++")
includedirs({
"dxbc",
})
files({
"dxbc/DXBCChecksum.cpp",
})

View File

@@ -1,42 +0,0 @@
group("third_party")
--
-- Call this function in subproject scope to set the needed include
-- dirs and defines.
--
function ffmpeg_common()
defines({
"HAVE_AV_CONFIG_H",
"_USE_MATH_DEFINES", -- For M_PI/etc
})
-- Paths are relative to the calling script (sub-library premake files),
-- which are one level deeper (e.g. libavcodec/premake5.lua).
includedirs({
"..", -- ffmpeg-xenia/ (config.h, avconfig.h, ffversion.h)
"../../FFmpeg", -- FFmpeg source headers
})
filter({"platforms:Windows", "configurations:Debug or configurations:Checked"})
optimize("Size") -- dead code elimination is mandatory
removebuildoptions({
"/RTCsu", -- '/O1' and '/RTCs' command-line options are incompatible
})
filter({"platforms:Windows", "configurations:Release"})
linktimeoptimization("Off")
filter("platforms:Windows")
includedirs({
"../../FFmpeg/compat/atomics/win32",
})
links({
"bcrypt",
})
filter("platforms:Linux")
includedirs({
"../../FFmpeg/compat/atomics/gcc",
})
filter({})
end
include("libavcodec/premake5.lua")
include("libavformat/premake5.lua")
include("libavutil/premake5.lua")

13
third_party/fmt.lua vendored
View File

@@ -1,13 +0,0 @@
group("third_party")
project("fmt")
uuid("b9ff4b2c-b438-42a9-971e-e0c19a711a13")
kind("StaticLib")
language("C++")
includedirs({
"fmt/include",
})
files({
"fmt/src/format.cc",
"fmt/src/os.cc"
})

View File

@@ -1,20 +0,0 @@
group("third_party")
project("glslang-spirv")
uuid("1cc8f45e-91e2-4daf-a55e-666bf8b5e6b2")
kind("StaticLib")
language("C++")
includedirs({
"glslang",
})
files({
"glslang/SPIRV/*.cpp",
"glslang/SPIRV/*.h",
"glslang/SPIRV/*.hpp11",
"glslang/glslang/Include/visibility.h",
})
removefiles({
"glslang/SPIRV/GlslangToSpv.cpp",
})

19
third_party/imgui.lua vendored
View File

@@ -1,19 +0,0 @@
group("third_party")
project("imgui")
uuid("ed9271c4-b0a1-42ef-8403-067b11bf49d0")
kind("StaticLib")
language("C++")
includedirs({
"imgui",
--"imgui/misc/freetype",
--"freetype/include",
"stb",
})
files({
"imgui/imgui.cpp",
"imgui/imgui_demo.cpp",
"imgui/imgui_draw.cpp",
"imgui/imgui_tables.cpp",
"imgui/imgui_widgets.cpp",
--"imgui/misc/freetype/imgui_freetype.cpp",
})

View File

@@ -1,47 +0,0 @@
group("third_party")
project("libusb")
uuid("5f8b5485-fde5-4a42-8a13-8545fcf6d25b")
kind("StaticLib")
language("C")
includedirs({
"libusb/libusb",
})
files({
"libusb/libusb/core.c",
"libusb/libusb/descriptor.c",
"libusb/libusb/hotplug.c",
"libusb/libusb/io.c",
"libusb/libusb/strerror.c",
"libusb/libusb/sync.c",
})
filter({"platforms:Windows"})
includedirs({
"libusb/msvc",
})
files({
"libusb/libusb/os/events_windows.c",
"libusb/libusb/os/events_windows.h",
"libusb/libusb/os/threads_windows.c",
"libusb/libusb/os/threads_windows.h",
"libusb/libusb/os/windows_common.c",
"libusb/libusb/os/windows_common.h",
"libusb/libusb/os/windows_usbdk.c",
"libusb/libusb/os/windows_usbdk.h",
"libusb/libusb/os/windows_winusb.c",
"libusb/libusb/os/windows_winusb.h"
})
filter({"platforms:Linux"})
files({
"libusb/libusb/config.h",
"libusb/libusb/os/events_posix.c",
"libusb/libusb/os/events_posix.h",
"libusb/libusb/os/threads_posix.c",
"libusb/libusb/os/threads_posix.h",
"libusb/libusb/os/linux_netlink.c",
"libusb/libusb/os/linux_udev.c",
"libusb/libusb/os/linux_usbfs.c",
"libusb/libusb/os/linux_usbfs.h"
})

View File

@@ -1,19 +0,0 @@
group("third_party")
project("mspack")
uuid("0881692A-75A1-4E7B-87D8-BB9108CEDEA4")
kind("StaticLib")
language("C++")
links({
"xenia-base",
})
defines({
"HAVE_CONFIG_H",
})
includedirs({
"mspack",
})
files({
"mspack/logging.cc",
"mspack/lzxd.c",
"mspack/system.c",
})

View File

@@ -1,8 +0,0 @@
group("third_party")
project("pugixml")
uuid("d1089e5e-46ae-48c9-bee6-d38c674c8f61")
kind("StaticLib")
language("C++")
files({
"pugixml/src/pugixml.cpp",
})

View File

@@ -1,23 +0,0 @@
group("third_party")
project("snappy")
uuid("bb143d61-3fd4-44c2-8b7e-04cc538ba2c7")
kind("StaticLib")
language("C++")
files({
"snappy/snappy-internal.h",
"snappy/snappy-sinksource.cc",
"snappy/snappy-sinksource.h",
"snappy/snappy-stubs-internal.cc",
"snappy/snappy-stubs-internal.h",
"snappy/snappy-stubs-public.h",
"snappy/snappy.cc",
"snappy/snappy.h",
})
local snappy_dir = path.getabsolute("snappy")
if not os.isfile(path.join(snappy_dir, "snappy-stubs-public.h")) then
prebuildcommands({
"cmake -DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF -DSNAPPY_REQUIRE_AVX=ON "..snappy_dir.." -B"..snappy_dir
})
end

View File

@@ -1,13 +0,0 @@
group("third_party")
project("tomlplusplus")
uuid("1e86cc51-3f8b-476d-9249-3b200424846b")
if os.istarget("android") then
-- ndk-build only supports StaticLib and SharedLib.
kind("StaticLib")
else
kind("Utility")
end
language("C++")
files({
"tomlplusplus/include/toml++/toml.hpp"
})

View File

@@ -1,11 +0,0 @@
group("third_party")
project("xxhash")
uuid("40d4ce21-5448-4399-9f98-589b7e1c23b1")
kind("StaticLib")
language("C")
includedirs({
"xxhash",
})
files({
"xxhash/xxhash.c",
})

View File

@@ -1,21 +0,0 @@
group("third_party")
project("zarchive")
uuid("d32f03aa-f0c9-11ed-a05b-0242ac120003")
kind("StaticLib")
language("C++")
links({
"zstd",
})
includedirs({
"zarchive/include",
"zstd/lib",
})
files({
"zarchive/include/zarchive/zarchivecommon.h",
"zarchive/include/zarchive/zarchivereader.h",
"zarchive/include/zarchive/zarchivewriter.h",
"zarchive/src/zarchivereader.cpp",
"zarchive/src/zarchivewriter.cpp",
"zarchive/src/sha_256.c",
"zarchive/src/sha_256.h",
})

View File

@@ -1,63 +0,0 @@
group("third_party")
project("zlib-ng")
uuid("13d4073d-f1c9-47e3-a057-79b133596fc2")
kind("StaticLib")
language("C")
defines({
"X86_FEATURES",
"X86_HAVE_XSAVE_INTRIN",
"X86_SSSE3",
"X86_SSE42",
"WITH_GZFILEOP",
})
if os.istarget("windows") then
defines({
"X86_SSE2",
"X86_AVX2",
"X86_AVX512",
"X86_AVX512VNNI",
"X86_PCLMULQDQ_CRC",
"X86_VPCLMULQDQ_CRC",
})
end
files({
"zlib-ng/*.c",
"zlib-ng/arch/x86/*.c",
"zlib-ng/arch/generic/*.c",
})
if not os.istarget("windows") then
removefiles({
"zlib-ng/arch/x86/adler32_avx2.c",
"zlib-ng/arch/x86/adler32_avx512.c",
"zlib-ng/arch/x86/adler32_avx512_vnni.c",
"zlib-ng/arch/x86/chunkset_avx2.c",
"zlib-ng/arch/x86/compare256_avx2.c",
"zlib-ng/arch/x86/crc32_pclmulqdq.c",
"zlib-ng/arch/x86/crc32_vpclmulqdq.c",
"zlib-ng/arch/x86/slide_hash_avx2.c",
})
end
includedirs({
"zlib-ng",
})
local zlibng_dir = path.getabsolute("zlib-ng")
local zlibng_h_src_files = {
path.join(zlibng_build_dir, "zlib-ng.h"),
path.join(zlibng_build_dir, "zconf-ng.h"),
path.join(zlibng_build_dir, "zlib_name_mangling-ng.h"),
path.join(zlibng_build_dir, "gzread.c"),
}
for i = 1,#zlibng_h_src_files,1
do
if not os.isfile(path.join(zlibng_dir, zlibng_h_src_files[i])) then
zlibng_build = true
break
end
end
if zlibng_build then
os.execute("cmake -DZLIB_ENABLE_TESTS=OFF -DWITH_GTEST=OFF "..zlibng_dir.." -B"..zlibng_dir)
end

11
third_party/zstd.lua vendored
View File

@@ -1,11 +0,0 @@
include("third_party/zstd/contrib/premake/zstd.lua")
group("third_party")
project("zstd")
uuid("df336aac-f0c8-11ed-a05b-0242ac120003")
-- https://gitlab.kitware.com/cmake/cmake/-/issues/25744
filter({"toolset:not msc"})
defines({
"ZSTD_DISABLE_ASM",
})
project_zstd("zstd/lib/")

Binary file not shown.

View File

@@ -1,272 +0,0 @@
#!/usr/bin/env python3
# Copyright 2015 Ben Vanik. All Rights Reserved.
"""Premake trampoline script.
"""
__author__ = "ben.vanik@gmail.com (Ben Vanik)"
from json import loads as jsonloads
import os
from shutil import rmtree
import subprocess
import sys
self_path = os.path.dirname(os.path.abspath(__file__))
root_path = os.path.join(self_path, "..", "..")
premake_submodule_path = os.path.join(root_path, "third_party", "premake-core")
premake_path = premake_submodule_path
def setup_premake_path_override():
global premake_path
premake_path = premake_submodule_path
if sys.platform == "linux":
# On Android, the repository may be cloned to the external storage, which
# doesn't support executables in it.
# In this case, premake-core needs to be checked out in the internal
# storage, which supports executables, with all the permissions as set in
# its repository.
# On Termux, the home directory is in the internal storage - use it for
# executing.
# If xenia-build.py doesn't have execute permissions, Xenia is in the external
# storage now.
try:
popen = subprocess.Popen(
["uname", "-o"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
text=True)
if popen.communicate()[0] == "Android\n":
xb_file = os.path.join(root_path, "xenia-build.py")
if (os.path.isfile(xb_file) and not os.access(xb_file, os.X_OK) and
"HOME" in os.environ):
premake_path = os.path.join(os.environ["HOME"], ".xenia-build", "premake-core")
except Exception:
pass
setup_premake_path_override()
def main():
# First try the freshly-built premake.
premake5_bin = os.path.join(premake_path, "bin", "release", "premake5")
if not has_bin(premake5_bin):
# No fresh build, so fallback to checked in copy (which we may not have).
premake5_bin = os.path.join(self_path, "bin", "premake5")
if not has_bin(premake5_bin):
# Still no valid binary, so build it.
print("premake5 executable not found, attempting build...")
build_premake()
premake5_bin = os.path.join(premake_path, "bin", "release", "premake5")
if not has_bin(premake5_bin):
# Nope, boned.
print("ERROR: cannot build premake5 executable.")
sys.exit(1)
# Ensure the submodule has been checked out.
if not os.path.exists(os.path.join(premake_path, "scripts", "package.lua")):
print("third_party/premake-core was not present; run xb setup...")
sys.exit(1)
if sys.platform == "win32":
# Append the executable extension on windows.
premake5_bin += ".exe"
return_code = shell_call([
premake5_bin,
f"--scripts={premake_path}",
] + sys.argv[1:],
throw_on_error=False)
sys.exit(return_code)
def build_premake():
"""Builds premake from source.
"""
# Ensure that on Android, premake-core is in the internal storage.
clone_premake_to_internal_storage()
cwd = os.getcwd()
try:
os.chdir(premake_path)
if sys.platform == "darwin":
subprocess.call([
"make",
"-f", "Bootstrap.mak",
"osx",
])
elif sys.platform == "win32":
# Grab Visual Studio version and execute shell to set up environment.
vs_version = import_vs_environment()
if not vs_version:
print("ERROR: Visual Studio not found!")
sys.exit(1)
return
subprocess.call([
"nmake",
"-f", "Bootstrap.mak",
"windows",
])
else:
subprocess.call([
"make",
"-f", "Bootstrap.mak",
"linux",
])
finally:
os.chdir(cwd)
pass
def clone_premake_to_internal_storage():
"""Clones premake to the Android internal storage so it can be executed.
"""
# premake_path is initialized to a value different than premake_submodule_path
# if running from the Android external storage, and may not exist yet.
if premake_path == premake_submodule_path:
return
# Ensure the submodule has been checked out.
if not os.path.exists(
os.path.join(premake_submodule_path, "scripts", "package.lua")):
print("third_party/premake-core was not present; run xb setup...")
sys.exit(1)
# Create or refresh premake-core in the internal storage.
print("Cloning premake5 to the internal storage...")
rmtree(premake_path, ignore_errors=True)
os.makedirs(premake_path)
shell_call([
"git",
"clone",
"--depth=1",
premake_submodule_path,
premake_path,
])
def has_bin(bin):
"""Checks whether the given binary is present.
"""
for path in os.environ["PATH"].split(os.pathsep):
if sys.platform == "win32":
exe_file = os.path.join(path, f"{bin}.exe")
if os.path.isfile(exe_file) and os.access(exe_file, os.X_OK):
return True
else:
path = path.strip("\"")
exe_file = os.path.join(path, bin)
if os.path.isfile(exe_file) and os.access(exe_file, os.X_OK):
return True
return None
def shell_call(command, throw_on_error=True, stdout_path=None, stderr_path=None, shell=False):
"""Executes a shell command.
Args:
command: Command to execute, as a list of parameters.
throw_on_error: Whether to throw an error or return the status code.
stdout_path: File path to write stdout output to.
stderr_path: File path to write stderr output to.
Returns:
If throw_on_error is False the status code of the call will be returned.
"""
stdout_file = None
if stdout_path:
stdout_file = open(stdout_path, "w")
stderr_file = None
if stderr_path:
stderr_file = open(stderr_path, "w")
result = 0
try:
if throw_on_error:
result = 1
subprocess.check_call(command, shell=shell, stdout=stdout_file, stderr=stderr_file)
result = 0
else:
result = subprocess.call(command, shell=shell, stdout=stdout_file, stderr=stderr_file)
finally:
if stdout_file:
stdout_file.close()
if stderr_file:
stderr_file.close()
return result
def import_vs_environment():
"""Finds the installed Visual Studio version and imports
interesting environment variables into os.environ.
Returns:
A version such as 2022 or None if no installation is found.
"""
if sys.platform != "win32":
return None
version = None
install_path = None
env_tool_args = None
vswhere = subprocess.check_output(
"tools/vswhere/vswhere.exe -version \"[17,)\" -latest -prerelease -format json -utf8 -products"
" Microsoft.VisualStudio.Product.Enterprise"
" Microsoft.VisualStudio.Product.Professional"
" Microsoft.VisualStudio.Product.Community"
" Microsoft.VisualStudio.Product.BuildTools",
encoding="utf-8",
)
if vswhere:
vswhere = jsonloads(vswhere)
if vswhere and len(vswhere) > 0:
version = int(vswhere[0].get("catalog", {}).get("productLineVersion", 2022))
install_path = vswhere[0].get("installationPath", None)
vsdevcmd_path = os.path.join(install_path, "Common7", "Tools", "VsDevCmd.bat")
if os.access(vsdevcmd_path, os.X_OK):
env_tool_args = [vsdevcmd_path, "-arch=amd64", "-host_arch=amd64", "&&", "set"]
else:
vcvars_path = os.path.join(install_path, "VC", "Auxiliary", "Build", "vcvarsall.bat")
env_tool_args = [vcvars_path, "x64", "&&", "set"]
if not version:
return None
import_subprocess_environment(env_tool_args)
os.environ["VSVERSION"] = f"{version}"
return version
def import_subprocess_environment(args):
popen = subprocess.Popen(
args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
variables, _ = popen.communicate()
envvars_to_save = (
"devenvdir",
"include",
"lib",
"libpath",
"path",
"pathext",
"systemroot",
"temp",
"tmp",
"vcinstalldir",
"windowssdkdir",
)
for line in variables.splitlines():
for envvar in envvars_to_save:
if f"{envvar}=" in line.lower():
var, setting = line.split("=", 1)
if envvar == "path":
setting = f"{os.path.dirname(sys.executable)}{os.pathsep}{setting}"
os.environ[var.upper()] = setting
break
if __name__ == "__main__":
main()

View File

@@ -1,9 +0,0 @@
require("vstudio")
include("scripts/build_paths.lua")
include("scripts/force_compile_as_c.lua")
include("scripts/force_compile_as_cc.lua")
include("scripts/pkg_config.lua")
include("scripts/platform_files.lua")
include("scripts/single_library.lua")
include("scripts/test_suite.lua")

View File

@@ -1,16 +0,0 @@
build_root = "build"
build_bin = build_root .. "/bin/%{cfg.platform}/%{cfg.buildcfg}"
build_gen = build_root .. "/gen/%{cfg.platform}/%{cfg.buildcfg}"
build_obj = build_root .. "/obj/%{cfg.platform}/%{cfg.buildcfg}"
build_tools = "tools/build"
build_scripts = build_tools .. "/scripts"
build_tools_src = build_tools .. "/src"
if os.istarget("android") then
platform_suffix = "android"
elseif os.istarget("windows") then
platform_suffix = "win"
else
platform_suffix = "posix"
end

View File

@@ -1,32 +0,0 @@
if premake.override then
local forced_c_files = {}
-- Forces all of the given .c and .cc files to be compiled as if they were C.
function force_compile_as_c(files)
for _, val in ipairs(files) do
for _, fname in ipairs(os.matchfiles(val)) do
table.insert(forced_c_files, path.getabsolute(fname))
end
end
end
-- for gmake
premake.override(path, "iscfile", function(base, fname)
if table.contains(forced_c_files, fname) then
return true
else
return base(fname)
end
end)
-- for msvc
premake.override(premake.vstudio.vc2010, "additionalCompileOptions", function(base, cfg, condition)
if cfg.abspath and table.contains(forced_c_files, cfg.abspath) then
if condition == nil or condition == '' then
_p(3,'<CompileAs>CompileAsC</CompileAs>')
else
_p(3,'<CompileAs Condition="\'$(Configuration)|$(Platform)\'==\'%s\'">CompileAsC</CompileAs>', condition)
end
end
return base(cfg, condition)
end)
end

View File

@@ -1,32 +0,0 @@
if premake.override then
local forced_cc_files = {}
-- Forces all of the given .c files to be compiled as if they were C++.
function force_compile_as_cc(files)
for _, val in ipairs(files) do
for _, fname in ipairs(os.matchfiles(val)) do
table.insert(forced_cc_files, path.getabsolute(fname))
end
end
end
-- for gmake
premake.override(path, "iscfile", function(base, fname)
if table.contains(forced_cc_files, fname) then
return false
else
return base(fname)
end
end)
-- for msvc
premake.override(premake.vstudio.vc2010, "additionalCompileOptions", function(base, cfg, condition)
if cfg.abspath and table.contains(forced_cc_files, cfg.abspath) then
if condition == nil or condition == '' then
_p(3,'<CompileAs>CompileAsCpp</CompileAs>')
else
_p(3,'<CompileAs Condition="\'$(Configuration)|$(Platform)\'==\'%s\'">CompileAsCpp</CompileAs>', condition)
end
end
return base(cfg, condition)
end)
end

Some files were not shown because too many files have changed in this diff Show More