port 2A step 4: platform skeleton + rest of the 2V3 header closure

- Mirror the remaining non-Python 2V3 closure headers (98 more, 173 total): EffectLib,
  EterGrnLib, SpeedTreeLib, SphereLib, PRTerrainLib, EterImageLib, EterBase/Poly, cipher/tea,
  EterLib Grp*/IME/Input/MSWindow/StateManager, GameLib actor/map/race headers, EterPack.
- SDK shims: granny.h, SpeedTreeRT.h, imm.h, Dimm.h (the SDK MIDL header, not mirrored),
  dinput/d3dx8 additions; D3D8 render-state enums, FVF macros and the COM resource hierarchy;
  more Win32 GDI/handle types with layout static_asserts.
- PORT edits for MSVC-permissive code (typename, friend visibility, <algorithm>, pointer→uintptr_t)
  and PRTerrainLib/StdAfx.h dropping the ScriptLib/Python include.
- port_logic links the vendored cryptopp/minilzo.
- extension/src/platform: port_platform target with 103 generated stub files (1917 function
  stubs, 146 static members) from the new platform_stub.py (clang -ast-dump-filter);
  MT_PLATFORM_STUB() marks every unimplemented body. libmtgodot links port_platform and
  port_gate.sh builds it.

Gate: macOS, Android, iOS, Windows (mingw) PASS; Linux BLOCKED (no toolchain).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-22 21:46:24 +09:00
co-authored by Claude Opus 5
parent fc47582017
commit 9a8e11f3dd
220 changed files with 24287 additions and 25 deletions
+46
View File
@@ -0,0 +1,46 @@
#pragma once
// Support for the generated platform skeleton (platform_stub.py, docs/PORT-PLAN.md 2A). A function whose
// body still starts with MT_PLATFORM_STUB() has no platform implementation yet; it does nothing and
// returns a default value. With MT_PLATFORM_STUB_TRACE set in the environment, the first call of each
// one is reported on stderr.
#include <cstdlib>
#include <type_traits>
void mt_platform_stub_called(const char* function, bool* reported);
#define MT_PLATFORM_STUB() \
do \
{ \
static bool mt_platform_stub_reported = false; \
mt_platform_stub_called(__func__, &mt_platform_stub_reported); \
} while (0)
template <class T>
T mt_platform_stub_return()
{
if constexpr (std::is_reference_v<T>)
{
using U = std::remove_cv_t<std::remove_reference_t<T>>;
if constexpr (std::is_default_constructible_v<U> && !std::is_abstract_v<U>)
{
static U value{};
return static_cast<T>(value);
}
else
{
// Never constructed: a caller that uses the referent of an unimplemented platform function
// is a bug the stub cannot hide.
alignas(U) static unsigned char storage[sizeof(U)];
return static_cast<T>(*reinterpret_cast<U*>(storage));
}
}
else if constexpr (std::is_default_constructible_v<T>)
{
return T{};
}
else
{
std::abort();
}
}