mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-08-20 09:57:09 +00:00
Merge pull request #1 from DwifteJB/msvc-winsysroot-fix
fix: auto-detect winsysroot from msbuild location & replace /winsysro…
This commit is contained in:
commit
da6c15e6a9
|
|
@ -1,5 +1,7 @@
|
||||||
// Original file is iob_shim.asm
|
// Original file is iob_shim.asm
|
||||||
// Rewritten in C because the build system breaks on linux-windows crosscomp with this
|
// Rewritten in C because the build system breaks on linux-windows crosscomp with this
|
||||||
|
// rm: __declspec(naked) is seemingly(?) not working on x86_64 (atleast via wine); use __attribute__((naked)) instead.
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
.code
|
.code
|
||||||
EXTRN __acrt_iob_func:PROC
|
EXTRN __acrt_iob_func:PROC
|
||||||
|
|
@ -14,7 +16,13 @@ END
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
extern "C" FILE* __cdecl __iob_func ( void ) {
|
extern "C" FILE* __cdecl __acrt_iob_func(unsigned index);
|
||||||
static FILE iob [ ] = { *stdin, *stdout, *stderr };
|
|
||||||
return iob;
|
extern "C" __attribute__((naked)) FILE* __cdecl __iob_func(void) {
|
||||||
|
__asm__(
|
||||||
|
".intel_syntax noprefix\n\t"
|
||||||
|
"mov ecx, 0\n\t"
|
||||||
|
"jmp __acrt_iob_func\n\t"
|
||||||
|
".att_syntax prefix"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,44 @@ set(CMAKE_LINKER lld-link)
|
||||||
set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC)
|
set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC)
|
||||||
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC)
|
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC)
|
||||||
|
|
||||||
add_compile_options(/winsysroot /opt/msvc --target=x86_64-pc-windows-msvc -fms-compatibility -fms-extensions -fdelayed-template-parsing)
|
# rm: locate winsysroot via the msbuild.exe path
|
||||||
add_link_options(/winsysroot:/opt/msvc)
|
find_program(_msbuild_exe msbuild)
|
||||||
|
if(_msbuild_exe)
|
||||||
|
get_filename_component(_msbuild_bin ${_msbuild_exe} DIRECTORY) # .../bin/x64
|
||||||
|
get_filename_component(_candidate "${_msbuild_bin}/.." ABSOLUTE) # .../bin
|
||||||
|
if(NOT IS_DIRECTORY "${_candidate}/vc")
|
||||||
|
get_filename_component(_candidate "${_candidate}/.." ABSOLUTE) # .../<root>
|
||||||
|
endif()
|
||||||
|
set(MSVC_WINSYSROOT ${_candidate})
|
||||||
|
else()
|
||||||
|
# rm: assume /opt/msvc as a fallback (which is usually the default path)
|
||||||
|
set(MSVC_WINSYSROOT /opt/msvc)
|
||||||
|
endif()
|
||||||
|
|
||||||
#set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /I /opt/msvc/kits/10/include/10.0.26100.0/shared <DEFINES> /fo<OBJECT> <SOURCE>")
|
# rm: detect msvc version
|
||||||
|
file(GLOB _msvc_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/VC/Tools/MSVC/*)
|
||||||
|
list(GET _msvc_versions 0 _msvc_dir)
|
||||||
|
|
||||||
|
# rm: detect window sdk version
|
||||||
|
file(GLOB _winsdk_versions LIST_DIRECTORIES true ${MSVC_WINSYSROOT}/kits/10/Include/*)
|
||||||
|
list(GET _winsdk_versions 0 _winsdk_dir)
|
||||||
|
get_filename_component(_winsdk_ver ${_winsdk_dir} NAME)
|
||||||
|
|
||||||
|
add_compile_options(
|
||||||
|
--target=x86_64-pc-windows-msvc
|
||||||
|
-fms-compatibility
|
||||||
|
-fms-extensions
|
||||||
|
-fdelayed-template-parsing
|
||||||
|
# rm: paths to msvc and windows sdk headers
|
||||||
|
"-imsvc${_msvc_dir}/include"
|
||||||
|
"-imsvc${_msvc_dir}/atlmfc/include"
|
||||||
|
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/ucrt"
|
||||||
|
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/um"
|
||||||
|
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/shared"
|
||||||
|
"-imsvc${MSVC_WINSYSROOT}/kits/10/Include/${_winsdk_ver}/winrt"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_link_options(/winsysroot:${MSVC_WINSYSROOT})
|
||||||
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue