Workaround nuke not autoaddling dep lib (#859)

* #pragma comment(lib, <minhook lib>)

* Fix logging path, and make common files not use pch

* Move lib import to vcproj from pragma

* a

* Make copy of vcxproj for minhook from submodule to lib dir

* nuke it

* .
This commit is contained in:
kizer 2022-05-30 02:18:00 +09:00 committed by GitHub
parent dbb0cb3d56
commit b6237267ce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 134 additions and 46 deletions

View file

@ -32,8 +32,12 @@
<IntDir>obj\$(Configuration)\</IntDir>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LibraryPath>$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LibraryPath>$(SolutionDir)bin\lib\$(Configuration)\libMinHook\;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@ -95,8 +99,36 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="logging.cpp" />
<ClCompile Include="unicode.cpp" />
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\buffer.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\HDE\hde32.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\HDE\hde64.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\hook.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\trampoline.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="logging.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="unicode.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="xivfixes.cpp" />
<ClCompile Include="utils.cpp" />
<ClCompile Include="pch_nmd_assembly_impl.cpp">
@ -120,6 +152,14 @@
<ClInclude Include="..\lib\CoreCLR\core\coreclr_delegates.h" />
<ClInclude Include="..\lib\CoreCLR\core\hostfxr.h" />
<ClInclude Include="..\lib\CoreCLR\nethost\nethost.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\include\MinHook.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\buffer.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\hde32.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\hde64.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\pstdint.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\table32.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\table64.h" />
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\trampoline.h" />
<ClInclude Include="bootconfig.h" />
<ClInclude Include="hooks.h" />
<ClInclude Include="logging.h" />
@ -129,11 +169,6 @@
<ClInclude Include="veh.h" />
<ClInclude Include="xivfixes.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\TsudaKageyu-minhook\build\VC16\libMinHook.vcxproj">
<Project>{f142a341-5ee0-442d-a15f-98ae9b48dbae}</Project>
</ProjectReference>
</ItemGroup>
<Target Name="RemoveExtraFiles" AfterTargets="PostBuildEvent">
<Delete Files="$(OutDir)$(TargetName).lib" />
<Delete Files="$(OutDir)$(TargetName).exp" />

View file

@ -11,6 +11,12 @@
<Filter Include="Project Files">
<UniqueIdentifier>{0c915688-91ea-431f-8b68-845cad422a50}</UniqueIdentifier>
</Filter>
<Filter Include="Common Boot">
<UniqueIdentifier>{e31f7ca0-db29-4198-8b91-bb11b339705f}</UniqueIdentifier>
</Filter>
<Filter Include="MinHook">
<UniqueIdentifier>{6ec5597d-e293-4d2a-a307-7444c8fac04b}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
@ -41,10 +47,25 @@
<Filter>Dalamud.Boot DLL</Filter>
</ClCompile>
<ClCompile Include="logging.cpp">
<Filter>Dalamud.Boot DLL</Filter>
<Filter>Common Boot</Filter>
</ClCompile>
<ClCompile Include="unicode.cpp">
<Filter>Dalamud.Boot DLL</Filter>
<Filter>Common Boot</Filter>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\buffer.c">
<Filter>MinHook</Filter>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\HDE\hde32.c">
<Filter>MinHook</Filter>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\HDE\hde64.c">
<Filter>MinHook</Filter>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\hook.c">
<Filter>MinHook</Filter>
</ClCompile>
<ClCompile Include="..\lib\TsudaKageyu-minhook\src\trampoline.c">
<Filter>MinHook</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@ -82,10 +103,34 @@
<Filter>Dalamud.Boot DLL</Filter>
</ClInclude>
<ClInclude Include="logging.h">
<Filter>Dalamud.Boot DLL</Filter>
<Filter>Common Boot</Filter>
</ClInclude>
<ClInclude Include="unicode.h">
<Filter>Dalamud.Boot DLL</Filter>
<Filter>Common Boot</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\trampoline.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\buffer.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\hde32.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\hde64.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\include\MinHook.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\pstdint.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\table32.h">
<Filter>MinHook</Filter>
</ClInclude>
<ClInclude Include="..\lib\TsudaKageyu-minhook\src\HDE\table64.h">
<Filter>MinHook</Filter>
</ClInclude>
</ItemGroup>
</Project>

View file

@ -9,13 +9,19 @@ HMODULE g_hModule;
HINSTANCE g_hGameInstance = GetModuleHandleW(nullptr);
DllExport DWORD WINAPI Initialize(LPVOID lpParam, HANDLE hMainThreadContinue) {
logging::log_file.open(utils::get_env<std::wstring>("DALAMUD_BOOT_LOGFILE"), std::ios_base::out | std::ios_base::app);
if (bootconfig::is_show_console())
ConsoleSetup(L"Dalamud Boot");
if (!logging::log_file) {
logging::print<logging::E>("Couldn't open log file!");
if (const auto logFilePath = utils::get_env<std::wstring>("DALAMUD_BOOT_LOGFILE"); logFilePath.empty())
logging::print<logging::I>("No log file path given; not logging to file.");
else {
try {
logging::start_file_logging(logFilePath);
logging::print<logging::I>(L"Logging to file: {}", logFilePath);
} catch (const std::exception& e) {
logging::print<logging::E>(L"Couldn't open log file: {}", logFilePath);
logging::print<logging::E>("Error: {} / {}", errno, e.what());
}
}
logging::print<logging::I>("Dalamud.Boot Injectable, (c) 2021 XIVLauncher Contributors");

View file

@ -1,7 +1,13 @@
#include "pch.h"
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <fstream>
#include <memory>
#include "logging.h"
static bool s_bLoaded = false;
static std::shared_ptr<void> s_hLogFile;
void logging::print(Level level, const char* s) {
SYSTEMTIME st;
@ -39,14 +45,27 @@ void logging::print(Level level, const char* s) {
DWORD wr{};
WriteFile(GetStdHandle(STD_ERROR_HANDLE), &estr[0], static_cast<DWORD>(estr.size()), &wr, nullptr);
if (log_file.is_open())
{
log_file << estr;
log_file.flush();
if (s_hLogFile) {
WriteFile(s_hLogFile.get(), &estr[0], static_cast<DWORD>(estr.size()), &wr, nullptr);
}
}
}
void logging::start_file_logging(const std::filesystem::path& path) {
if (s_hLogFile)
return;
const auto h = CreateFile(path.wstring().c_str(),
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr, OPEN_ALWAYS, 0, nullptr);
if (h == INVALID_HANDLE_VALUE)
throw std::runtime_error(std::format("Win32 error {}(0x{:x})", GetLastError(), GetLastError()));
SetFilePointer(h, 0, 0, FILE_END);
s_hLogFile = { h, &CloseHandle };
}
void logging::update_dll_load_status(bool loaded) {
s_bLoaded = loaded;
}

View file

@ -1,15 +1,13 @@
#pragma once
#include <filesystem>
#include <format>
#include <numeric>
#include <string>
#include <fstream>
#include "unicode.h"
namespace logging {
inline std::ofstream log_file;
enum Level : int {
Verbose = 0,
V = 0,
@ -65,5 +63,7 @@ namespace logging {
print(level, std::format(pcszFormat, std::forward<Arg>(arg1), std::forward<Args>(args)...));
}
void start_file_logging(const std::filesystem::path& path);
void update_dll_load_status(bool loaded);
};

View file

@ -1,5 +1,3 @@
#include "pch.h"
#include "unicode.h"
size_t unicode::decode(EncodingTag<char8_t>, char32_t& out, const char8_t* in, size_t nRemainingBytes, bool strict) {

View file

@ -108,7 +108,7 @@ namespace Dalamud.Injector
#if DEBUG
var logPath = Path.Combine(baseDirectory, $"{filename}.log");
#else
var logPath = Path.Combine(baseDirectory, "..", "..", "..", "dalamud.injector.log");
var logPath = Path.Combine(baseDirectory, "..", "..", "..", $"{filename}.log");
#endif
return logPath;

View file

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31424.327
# Visual Studio Version 17
VisualStudioVersion = 17.1.32319.34
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CEF7D22B-CB85-400E-BD64-349A30E3C097}"
ProjectSection(SolutionItems) = preProject
@ -34,8 +34,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFXIVClientStructs", "lib\F
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFXIVClientStructs.Generators", "lib\FFXIVClientStructs\FFXIVClientStructs.Generators\FFXIVClientStructs.Generators.csproj", "{05AB2F46-268B-4915-806F-DDF813E2D59D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "lib\TsudaKageyu-minhook\build\VC16\libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -188,18 +186,6 @@ Global
{05AB2F46-268B-4915-806F-DDF813E2D59D}.Release|x64.Build.0 = Release|Any CPU
{05AB2F46-268B-4915-806F-DDF813E2D59D}.Release|x86.ActiveCfg = Release|Any CPU
{05AB2F46-268B-4915-806F-DDF813E2D59D}.Release|x86.Build.0 = Release|Any CPU
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Any CPU.ActiveCfg = Debug|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Any CPU.Build.0 = Debug|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x86.ActiveCfg = Debug|Win32
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x86.Build.0 = Debug|Win32
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Any CPU.ActiveCfg = Release|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Any CPU.Build.0 = Release|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x86.ActiveCfg = Release|Win32
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -210,7 +196,6 @@ Global
{2F7FF0A8-B619-4572-86C7-71E46FE22FB8} = {E15BDA6D-E881-4482-94BA-BE5527E917FF}
{C9B87BD7-AF49-41C3-91F1-D550ADEB7833} = {E15BDA6D-E881-4482-94BA-BE5527E917FF}
{05AB2F46-268B-4915-806F-DDF813E2D59D} = {E15BDA6D-E881-4482-94BA-BE5527E917FF}
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {E15BDA6D-E881-4482-94BA-BE5527E917FF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {79B65AC9-C940-410E-AB61-7EA7E12C7599}