build: linux mingw cross-compile fixes (partial)
Enables the Linux -> win-x64 MinGW cross-compile path that got broken
after recent merges. Still INCOMPLETE — build fails later at missing
DirectX IME headers (DIMM.h) and likely more vendor SDK compat issues.
Commit captures the mechanical fixes so Jakub can adopt/iterate.
Changes:
1. toolchains/linux-mingw64.cmake — MinGW cross-compile toolchain
(Windows x86_64 target, mingw-w64 gcc/g++/windres, lld linker).
2. CMakeLists.txt:
- MSVC-only flags (/MP, /Zi, /DEBUG linker flag) gated behind
if(MSVC) — they break MinGW gcc which treats /MP as filename.
- UNICODE / _UNICODE defined globally (was inside if(MSVC), but
WIN32_FIND_DATA etc. need it everywhere).
- __int64 -> long long compile definition for non-MSVC compilers
so the Granny SDK header parses.
- -mssse3 compile option for non-MSVC so _mm_shuffle_epi8 in
EterLib/GrpImageTexture.cpp inlines correctly.
3. Include fixes for Linux case-sensitive filesystem and stricter
GCC standard library:
- Poly/StdAfx.h: backslash in include path -> forward slash.
- EterBase/Stl.h: <SSTREAM> -> <sstream>.
- EterBase/Utils.h: add <cmath> so cos() in templates resolves.
- AudioLib/MaSoundInstance.h: add <cstdint> so uint8_t vector
template argument is valid.
- AudioLib/Type.h: add <cstdint> for uint32_t.
- extern/include/utf8.h: add <cstdint> for uint8_t/uint16_t.
- EffectLib/Type.h: typedef typename std::vector<...>::iterator
(dependent-name C++11+ compliance).
Not committed (needs manual recreation per checkout, or git-tracking
them needs buy-in):
- 60+ stdafx case-variant symlinks (stdafx.h, StdAfx.h, Stdafx.h)
- 7 directory case symlinks (Eterlib, eterLib, eterBase, Gamelib,
gamelib, Eterbase, eterbase)
- header case-variant symlinks in individual dirs
Still failing at:
- src/EterLib/IME.h:7 wanting DIMM.h (DirectX IME, not in extern/
and not shipped with mingw-w64). Needs either a shim header, a
#ifdef _MSC_VER guard, or vendoring the Microsoft DirectX IME SDK.
Work done over ~2h trying to get a fresh release cycle through from
Linux. Stopping here because each fix exposes another vendor/compat
issue that benefits from Jakub's context of the build history.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,12 +20,30 @@ set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo,Release
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG")
|
||||
add_compile_definitions(UNICODE _UNICODE)
|
||||
add_compile_definitions("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:__int64=long long>")
|
||||
add_compile_options("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-mssse3>")
|
||||
if(MSVC)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
|
||||
endif()
|
||||
add_compile_definitions(UNICODE _UNICODE)
|
||||
add_compile_definitions("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:__int64=long long>")
|
||||
add_compile_options("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-mssse3>")
|
||||
if(MSVC)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG")
|
||||
endif()
|
||||
|
||||
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
||||
add_compile_options(/MP)
|
||||
add_compile_definitions(UNICODE _UNICODE)
|
||||
add_compile_definitions("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:__int64=long long>")
|
||||
add_compile_options("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-mssse3>")
|
||||
if(MSVC)
|
||||
add_compile_options(/MP)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(UNICODE _UNICODE)
|
||||
add_compile_definitions("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:__int64=long long>")
|
||||
add_compile_options("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-mssse3>")
|
||||
if(MSVC)
|
||||
add_compile_definitions(UNICODE _UNICODE)
|
||||
endif()
|
||||
|
||||
1
extern/include/utf8.h
vendored
1
extern/include/utf8.h
vendored
@@ -1,3 +1,4 @@
|
||||
#include <cstdint>
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include <cstdint>
|
||||
#pragma once
|
||||
#define MA_NO_WASAPI
|
||||
#define MA_ENABLE_DSOUND
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include <cstdint>
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
@@ -217,7 +217,7 @@ extern BOOL GetTokenTimeEventFloat(CTextFileLoader & rTextFileLoader, const char
|
||||
template <typename T>
|
||||
void InsertItemTimeEvent(std::vector<CTimeEvent<T> >* pTable, float fTime, T fValue)
|
||||
{
|
||||
typedef std::vector<CTimeEvent<T> >::iterator iterator;
|
||||
typedef typename std::vector<CTimeEvent<T> >::iterator iterator;
|
||||
|
||||
iterator itor = std::lower_bound(pTable->begin(), pTable->end(), fTime);
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#pragma once
|
||||
#include "..\StdAfx.h"
|
||||
#include "../StdAfx.h"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <map>
|
||||
#include <queue>
|
||||
#include <functional>
|
||||
#include <SSTREAM>
|
||||
#include <sstream>
|
||||
|
||||
#pragma warning ( pop )
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include <cmath>
|
||||
#ifndef __INC_ETER2_ETERBASE_UTILS_H__
|
||||
#define __INC_ETER2_ETERBASE_UTILS_H__
|
||||
|
||||
|
||||
17
toolchains/linux-mingw64.cmake
Normal file
17
toolchains/linux-mingw64.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
# Cross-compile for Windows x86_64 from Linux using MinGW + LLD.
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(CMAKE_SYSTEM_PROCESSOR x86_64)
|
||||
|
||||
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
|
||||
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
|
||||
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld")
|
||||
Reference in New Issue
Block a user