Included initial OrbisOS / R10XX headers

This commit is contained in:
Alexandro Sánchez Bach 2016-04-10 22:48:18 +02:00
parent 4d0457002b
commit 1495301d3f
29 changed files with 250 additions and 78 deletions

7
bin/.gitignore vendored
View file

@ -10,3 +10,10 @@ keys.xml
# Logs
*.log
# IDA Pro
*.id0
*.id1
*.id2
*.nam
*.til

View file

@ -18,10 +18,6 @@
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\externals\sha1.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\emulator.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\fmt.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\keys.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\loader.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\psf.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\self.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\nucleus.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)config.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)resource.cpp" />
@ -37,10 +33,6 @@
<ClInclude Include="$(MSBuildThisFileDirectory)..\endianness.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\feature.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\format.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\keys.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\loader.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\psf.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\self.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\macro.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\nucleus.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\platform.h" />

View file

@ -8,18 +8,6 @@
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\externals\sha1.cpp">
<Filter>externals</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\keys.cpp">
<Filter>loader</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\loader.cpp">
<Filter>loader</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\psf.cpp">
<Filter>loader</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)..\loader\self.cpp">
<Filter>loader</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)..\emulator.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)..\nucleus.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)resource.cpp" />
@ -33,18 +21,6 @@
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\externals\sha1.h">
<Filter>externals</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\keys.h">
<Filter>loader</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\loader.h">
<Filter>loader</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\psf.h">
<Filter>loader</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)..\loader\self.h">
<Filter>loader</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)..\assert.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\common.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\emulator.h" />
@ -55,18 +31,15 @@
<ClInclude Include="$(MSBuildThisFileDirectory)..\types.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\architecture.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\compiler.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\platform.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)resource.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\target.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\feature.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\platform.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)..\target.h" />
</ItemGroup>
<ItemGroup>
<Filter Include="externals">
<UniqueIdentifier>{e809ab99-fe03-4cdd-bb7b-b5f8c53f32a4}</UniqueIdentifier>
</Filter>
<Filter Include="loader">
<UniqueIdentifier>{2babb73a-fe6f-43bb-acfc-ef94369243b5}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)resource.inl" />

View file

@ -13,14 +13,76 @@
#include "nucleus/cpu/cell.h"
#include "nucleus/gpu/list.h"
#include "nucleus/filesystem/utils.h"
#include "nucleus/loader/self.h"
#include "nucleus/logger/logger.h"
#include "nucleus/memory/memory.h"
#include "nucleus/system/scei/cellos/lv2.h"
#include "nucleus/system/loader.h"
#include "nucleus/system/scei/self.h"
#include "nucleus/system/list.h"
// Global emulator object
Emulator nucleus;
/**
* Load specific platform
*/
bool Emulator::load_ps3(const std::string& path) {
// Initialize hardware
memory = std::make_shared<mem::Memory>();
cpu = std::make_shared<cpu::Cell>(memory);
gpu = std::make_shared<gpu::RSX>(memory, graphics);
sys = std::make_shared<sys::LV2>(memory, sys::LV2_DEX);
// Initialize application filesystem devices
const fs::Path& processPath = fs::getProcessPath(path);
sys->vfs.registerDevice(new fs::HostPathDevice("/app_home/", processPath));
// Load ELF/SELF file
SELFLoader self;
auto file = fs::HostFileSystem::openFile(path, fs::Read);
if (!self.open(file.get())) {
logger.error(LOG_COMMON, "Invalid file given.");
return false;
}
self.load_elf(static_cast<sys::LV2*>(sys.get())->proc);
if (self.getMachine() != EM_PPC64) {
logger.error(LOG_COMMON, "Only PPC64 executables are allowed");
return false;
}
auto entry = self.getEntry();
static_cast<sys::LV2*>(sys.get())->init(entry);
return true;
}
bool Emulator::load_ps4(const std::string& path) {
// Initialize hardware
gpu = std::make_shared<gpu::R10XX>(graphics);
sys = std::make_shared<sys::OrbisOS>();
// Initialize application filesystem devices
const fs::Path& processPath = fs::getProcessPath(path);
sys->vfs.registerDevice(new fs::HostPathDevice("/app0/", processPath));
// Load ELF/SELF file
SELFLoader self;
auto file = fs::HostFileSystem::openFile(path, fs::Read);
if (!self.open(file.get())) {
logger.error(LOG_COMMON, "Invalid file given.");
return false;
}
self.load_elf(static_cast<sys::OrbisOS*>(sys.get())->proc);
if (self.getMachine() != EM_X86_64) {
logger.error(LOG_COMMON, "Only PPC64 executables are allowed");
return false;
}
auto entry = self.getEntry();
static_cast<sys::OrbisOS*>(sys.get())->init(entry);
return true;
}
bool Emulator::initialize(const gfx::BackendParameters& params) {
// Select graphics backend
switch (config.graphicsBackend) {
@ -93,33 +155,29 @@ bool Emulator::initialize(const gfx::BackendParameters& params) {
}
bool Emulator::load(const std::string& filepath) {
// Initialize hardware
memory = std::make_shared<mem::Memory>();
cpu = std::make_shared<cpu::Cell>(memory);
gpu = std::make_shared<gpu::RSX>(memory, graphics);
sys = std::make_shared<sys::LV2>(memory, sys::LV2_DEX);
// Initialize application filesystem devices
const fs::Path& processPath = fs::getProcessPath(filepath);
sys->vfs.registerDevice(new fs::HostPathDevice("/app_home/", processPath));
// Load ELF/SELF file
SELFLoader self;
auto file = fs::HostFileSystem::openFile(filepath, fs::Read);
if (!self.open(file.get())) {
logger.error(LOG_COMMON, "Invalid file given.");
// TODO: This is not a good way of detecting a platform
core::Platform platform;
switch (detectFiletype(filepath)) {
case FILETYPE_SELF:
platform = core::PLATFORM_PS3;
break;
case FILETYPE_ELF:
platform = core::PLATFORM_PS4;
break;
default:
logger.error(LOG_COMMON, "Unsupported file");
return false;
}
self.load_elf(static_cast<sys::LV2*>(sys.get())->proc);
if (self.getMachine() != EM_PPC64) {
logger.error(LOG_COMMON, "Only PPC64 executables are allowed");
switch (platform) {
case core::PLATFORM_PS3:
return load_ps3(filepath);
case core::PLATFORM_PS4:
return load_ps4(filepath);
default:
logger.error(LOG_COMMON, "Unsupported platform");
return false;
}
auto entry = self.getEntry();
static_cast<sys::LV2*>(sys.get())->init(entry);
return true;
}
void Emulator::run() {

View file

@ -27,6 +27,10 @@ class Emulator {
EmulatorEvent m_event;
EmulatorStatus m_status;
// Load specific platform
bool load_ps3(const std::string& path);
bool load_ps4(const std::string& path);
public:
std::shared_ptr<audio::Backend> audio;
std::shared_ptr<gfx::IBackend> graphics;

View file

@ -7,6 +7,7 @@
// Forward declarations
namespace gfx { class Texture; }
namespace gfx { class IBackend; }
namespace gpu {

View file

@ -15,6 +15,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)gpu.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)r10xx\r10xx.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)rsx\rsx.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)rsx\rsx_convert.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)rsx\rsx_dma.cpp" />
@ -26,6 +27,7 @@
<ClInclude Include="$(MSBuildThisFileDirectory)gpu.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)gpu_hash.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)list.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)r10xx\r10xx.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)rsx\rsx.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)rsx\rsx_convert.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)rsx\rsx_dma.h" />

View file

@ -42,6 +42,9 @@
<ClInclude Include="$(MSBuildThisFileDirectory)rsx\rsx_mmio.h">
<Filter>rsx</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)r10xx\r10xx.h">
<Filter>r10xx</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)rsx\rsx_pgraph.cpp">
@ -63,6 +66,9 @@
<ClCompile Include="$(MSBuildThisFileDirectory)rsx\rsx_convert.cpp">
<Filter>rsx</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)r10xx\r10xx.cpp">
<Filter>r10xx</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)rsx\rsx_methods.inl">

View file

@ -11,7 +11,7 @@
#include "nucleus/gpu/rsx/rsx.h"
#endif
#ifdef NUCLEUS_PLATFORM_PS4
//#include "nucleus/gpu/r10xx/r10xx.h"
#include "nucleus/gpu/r10xx/r10xx.h"
#endif
namespace gpu {
@ -21,7 +21,7 @@ namespace gpu {
using RSX = rsx::RSX;
#endif
#ifdef NUCLEUS_PLATFORM_PS4
//using R10XX = r10xx::R10XX;
using R10XX = r10xx::R10XX;
#endif
} // namespace gpu

View file

@ -0,0 +1,19 @@
/**
* (c) 2014-2016 Alexandro Sanchez Bach. All rights reserved.
* Released under GPL v2 license. Read LICENSE for more details.
*/
#include "r10xx.h"
namespace gpu {
namespace r10xx {
R10XX::R10XX(std::shared_ptr<gfx::IBackend> graphics) {
}
gfx::Texture* R10XX::getFrontBuffer() {
return nullptr;
}
} // namespace r10xx
} // namespace gpu

23
nucleus/gpu/r10xx/r10xx.h Normal file
View file

@ -0,0 +1,23 @@
/**
* (c) 2014-2016 Alexandro Sanchez Bach. All rights reserved.
* Released under GPL v2 license. Read LICENSE for more details.
*/
#pragma once
#include "nucleus/gpu/gpu.h"
#include <memory>
namespace gpu {
namespace r10xx {
class R10XX : public GPU {
public:
R10XX(std::shared_ptr<gfx::IBackend> graphics);
virtual gfx::Texture* getFrontBuffer() override;
};
} // namespace r10xx
} // namespace gpu

View file

@ -58,7 +58,6 @@ int nucleusInitialize(int argc, char **argv) {
// Start emulator
if (!config.boot.empty()) {
nucleus.load(config.boot);
nucleus.run();
nucleus.idle();

View file

@ -24,6 +24,8 @@
namespace core {
enum Platform {
PLATFORM_UNKNOWN = 0,
PLATFORM_PS3,
PLATFORM_PS4,
PLATFORM_PSP,

28
nucleus/system/list.h Normal file
View file

@ -0,0 +1,28 @@
/**
* (c) 2014-2016 Alexandro Sanchez Bach. All rights reserved.
* Released under GPL v2 license. Read LICENSE for more details.
*/
#pragma once
#include "nucleus/common.h"
#ifdef NUCLEUS_PLATFORM_PS3
#include "nucleus/system/scei/cellos/lv1.h"
#include "nucleus/system/scei/cellos/lv2.h"
#endif
#ifdef NUCLEUS_PLATFORM_PS4
#include "nucleus/system/scei/orbisos/orbisos.h"
#endif
namespace sys {
// Shorthands
#ifdef NUCLEUS_PLATFORM_PS3
using LV2 = sys::LV2;
#endif
#ifdef NUCLEUS_PLATFORM_PS4
using OrbisOS = sys::scei::orbis::OrbisOS;
#endif
} // namespace sys

View file

@ -10,7 +10,7 @@
#include "nucleus/system/scei/cellos/callback.h"
#include "nucleus/system/scei/cellos/lv2.h"
#include "nucleus/system/scei/cellos/lv2/sys_process.h"
#include "nucleus/loader/self.h"
#include "nucleus/system/scei/self.h"
namespace sys {

View file

@ -4,19 +4,26 @@
*/
#include "orbisos.h"
#include "nucleus/system/system.h"
namespace sys {
namespace scei {
namespace orbis {
struct OrbisSyscall {
const char* name;
};
OrbisOS::OrbisOS() {
// Initialize sandbox directories
vfs.registerDevice(new fs::HostPathDevice("/host/", ""));
}
bool OrbisOS::init(U64 entry) {
// TODO: Load /system/common/lib/libkernel.sprx
// TODO: Run libkernel.sprx start function
// TODO: Jump to executable entry point
return true;
}
class OrbisOS : public System {
};
} // namespace orbis
} // namespace scei
} // namespace sys

View file

@ -5,10 +5,32 @@
#pragma once
#include "nucleus/common.h"
#include "nucleus/system/system.h"
#include "nucleus/system/scei/cellos/lv2/sys_process.h" // TODO: Just for sys_process_t
namespace sys {
namespace scei {
namespace orbis {
struct OrbisSyscall {
const char* name;
};
class OrbisOS : public System {
public:
// Kernel information
sys_process_t proc; // TODO: Is this really necessary
OrbisOS();
/**
* Start the process at the given entry point
* @param[in] entry Module entry point
*/
bool init(U64 entry);
};
} // namespace orbis
} // namespace scei
} // namespace sys

View file

@ -8,7 +8,7 @@
#include "nucleus/system/system.h"
#include "nucleus/format.h"
#include "nucleus/filesystem/filesystem_virtual.h"
#include "nucleus/loader/loader.h"
#include "nucleus/system/loader.h"
#include "nucleus/logger/logger.h"
bool PSFLoader::open(const std::string& path)

View file

@ -10,8 +10,8 @@
#include "nucleus/cpu/cell.h"
#include "nucleus/system/scei/cellos/lv2.h"
#include "nucleus/cpu/frontend/ppu/ppu_decoder.h"
#include "nucleus/loader/keys.h"
#include "nucleus/loader/loader.h"
#include "nucleus/system/keys.h"
#include "nucleus/system/loader.h"
#include "nucleus/logger/logger.h"
#include "externals/aes.h"

View file

@ -30,6 +30,7 @@ enum ELFMachine {
EM_PPC64 = 0x15,
EM_SPU = 0x17,
EM_ARM = 0x28,
EM_X86_64 = 0x3E,
};
// Segment types

View file

@ -14,6 +14,9 @@
<ProjectCapability Include="SourceItemsFromImports" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(MSBuildThisFileDirectory)keys.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)list.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)loader.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)object.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\cellos\callback.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\cellos\lv1.h" />
@ -46,9 +49,13 @@
<ClInclude Include="$(MSBuildThisFileDirectory)scei\cellos\syscall.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\orbisos\orbisos.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\pkg.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\psf.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\self.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)system.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)keys.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)loader.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\cellos\hle_module.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\cellos\lv1\lv1_gpu.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\cellos\lv2.cpp" />
@ -76,5 +83,7 @@
<ClCompile Include="$(MSBuildThisFileDirectory)scei\cellos\modules\libsysutil_avconf_ext.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\orbisos\orbisos.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\pkg.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\psf.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\self.cpp" />
</ItemGroup>
</Project>

View file

@ -116,6 +116,15 @@
<ClInclude Include="$(MSBuildThisFileDirectory)scei\orbisos\orbisos.h">
<Filter>scei\orbisos</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)keys.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)loader.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)scei\psf.h">
<Filter>scei</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)scei\self.h">
<Filter>scei</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)list.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)scei\cellos\modules\libsysutil.cpp">
@ -199,5 +208,13 @@
<ClCompile Include="$(MSBuildThisFileDirectory)scei\orbisos\orbisos.cpp">
<Filter>scei\orbisos</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)keys.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)loader.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)scei\psf.cpp">
<Filter>scei</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)scei\self.cpp">
<Filter>scei</Filter>
</ClCompile>
</ItemGroup>
</Project>

View file

@ -204,6 +204,7 @@
<ExceptionHandling>Enabled</ExceptionHandling>
<AdditionalIncludeDirectories>$(SolutionDir);$(Sysroot)\usr\include;$(StlIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CppLanguageStandard>c++1y</CppLanguageStandard>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;</PreprocessorDefinitions>
</ClCompile>
<Link>
<LibraryDependencies>%(LibraryDependencies);GLESv2;EGL;m</LibraryDependencies>
@ -215,6 +216,7 @@
<ExceptionHandling>Enabled</ExceptionHandling>
<AdditionalIncludeDirectories>$(SolutionDir);$(Sysroot)\usr\include;$(StlIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CppLanguageStandard>c++1y</CppLanguageStandard>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<LibraryDependencies>%(LibraryDependencies);GLESv2;EGL;m</LibraryDependencies>

View file

@ -71,7 +71,7 @@
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir);</AdditionalIncludeDirectories>
<ObjectFileName>$(IntDir)\%(Directory)\</ObjectFileName>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_GFXBACKEND_DIRECT3D12;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_GFXBACKEND_DIRECT3D12;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -88,7 +88,7 @@
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir);</AdditionalIncludeDirectories>
<ObjectFileName>$(IntDir)\%(Directory)\</ObjectFileName>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_GFXBACKEND_DIRECT3D12;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_AUDIOBACKEND_XAUDIO2;_NUCLEUS_FEATURE_GFXBACKEND_DIRECT3D12;_NUCLEUS_FEATURE_GFXBACKEND_VULKAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>