mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-11-13 15:27:21 +00:00
[build] msquic: fix MinGW static OpenSSL linking
Build MsQuic's component archives instead of flattening Windows import libraries into the monolithic archive. Use the static OpenSSL archives supplied by the active MinGW toolchain while retaining Schannel for MSVC and QuicTLS for Linux. Let the active compiler locate its target root and use the restricted ntdll import library. Provide GCC-compatible byte interlocked operations, expose native XDP calls, and suppress expected compatibility warnings.
This commit is contained in:
@@ -1,140 +0,0 @@
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(CMAKE_SYSTEM_PROCESSOR AMD64)
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
set(MSQUIC_MINGW_TRIPLE x86_64-w64-mingw32 CACHE STRING
|
||||
"MinGW-w64 target triple")
|
||||
set(MSQUIC_MINGW_ROOT "/usr/${MSQUIC_MINGW_TRIPLE}" CACHE PATH
|
||||
"MinGW-w64 target root")
|
||||
set(MSQUIC_CLANG_CL clang-cl CACHE FILEPATH
|
||||
"clang-cl used to build the static MsQuic archive")
|
||||
set(MSQUIC_LLVM_LIB llvm-lib CACHE FILEPATH
|
||||
"llvm-lib used to create the static MsQuic archive")
|
||||
set(MSQUIC_WINDRES "${MSQUIC_MINGW_TRIPLE}-windres" CACHE FILEPATH
|
||||
"MinGW-w64 resource compiler")
|
||||
set(MSQUIC_MINGW_GCC "${MSQUIC_MINGW_TRIPLE}-gcc" CACHE FILEPATH
|
||||
"MinGW-w64 compiler used to locate compatibility headers")
|
||||
|
||||
if(NOT MSQUIC_CLANG_RESOURCE_DIR)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_CLANG_CL}" /clang:-print-resource-dir
|
||||
RESULT_VARIABLE MSQUIC_CLANG_RESOURCE_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_CLANG_RESOURCE_ROOT
|
||||
ERROR_VARIABLE MSQUIC_CLANG_RESOURCE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_CLANG_RESOURCE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the clang resource headers: "
|
||||
"${MSQUIC_CLANG_RESOURCE_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_CLANG_RESOURCE_DIR
|
||||
"${MSQUIC_CLANG_RESOURCE_ROOT}/include" CACHE PATH
|
||||
"clang resource headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_MINGW_GCC}" -print-file-name=include
|
||||
RESULT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE
|
||||
ERROR_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the MinGW-w64 compiler headers: "
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_MINGW_GCC_INCLUDE "${MSQUIC_MINGW_GCC_INCLUDE}" CACHE PATH
|
||||
"MinGW-w64 compiler headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE_FIXED)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_MINGW_GCC}" -print-file-name=include-fixed
|
||||
RESULT_VARIABLE MSQUIC_MINGW_GCC_FIXED_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_FIXED
|
||||
ERROR_VARIABLE MSQUIC_MINGW_GCC_FIXED_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_MINGW_GCC_FIXED_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the fixed MinGW-w64 compiler headers: "
|
||||
"${MSQUIC_MINGW_GCC_FIXED_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_MINGW_GCC_INCLUDE_FIXED
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE_FIXED}" CACHE PATH
|
||||
"Fixed MinGW-w64 compiler headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
foreach(MSQUIC_REQUIRED_INCLUDE
|
||||
"${MSQUIC_MINGW_ROOT}/include"
|
||||
"${MSQUIC_CLANG_RESOURCE_DIR}"
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE}")
|
||||
if(NOT IS_DIRECTORY "${MSQUIC_REQUIRED_INCLUDE}")
|
||||
message(FATAL_ERROR
|
||||
"Required MsQuic cross-build headers are missing: "
|
||||
"${MSQUIC_REQUIRED_INCLUDE}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(CMAKE_C_COMPILER "${MSQUIC_CLANG_CL}")
|
||||
set(CMAKE_CXX_COMPILER "${MSQUIC_CLANG_CL}")
|
||||
set(CMAKE_C_COMPILER_TARGET "${MSQUIC_MINGW_TRIPLE}")
|
||||
set(CMAKE_CXX_COMPILER_TARGET "${MSQUIC_MINGW_TRIPLE}")
|
||||
set(CMAKE_AR "${MSQUIC_LLVM_LIB}")
|
||||
set(CMAKE_RC_COMPILER "${MSQUIC_WINDRES}")
|
||||
|
||||
set(MSQUIC_COMPAT_HEADER
|
||||
"${CMAKE_CURRENT_LIST_DIR}/msquic-mingw-compat.h")
|
||||
set(MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-nostdinc"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_ROOT}/include"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_CLANG_RESOURCE_DIR}"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_GCC_INCLUDE}")
|
||||
|
||||
if(IS_DIRECTORY "${MSQUIC_MINGW_GCC_INCLUDE_FIXED}")
|
||||
list(APPEND MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_GCC_INCLUDE_FIXED}")
|
||||
endif()
|
||||
|
||||
list(APPEND MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-fms-extensions"
|
||||
"/clang:-Wno-unknown-pragmas"
|
||||
"/clang:-Wno-microsoft-anon-tag"
|
||||
"/clang:-Wno-missing-field-initializers"
|
||||
"/clang:-Wno-sign-compare"
|
||||
"/clang:-Wno-int-conversion"
|
||||
"/clang:-Wno-unused-function"
|
||||
"/clang:-Wno-incompatible-pointer-types"
|
||||
"/clang:-Wno-duplicate-decl-specifier"
|
||||
"/FI${MSQUIC_COMPAT_HEADER}")
|
||||
list(JOIN MSQUIC_CLANG_CL_OPTIONS " " MSQUIC_CLANG_CL_FLAGS)
|
||||
|
||||
set(CMAKE_C_FLAGS "${MSQUIC_CLANG_CL_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS "${MSQUIC_CLANG_CL_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG "/clang:-O0 /Zi" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "/clang:-O0 /Zi" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "/clang:-O3 /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "/clang:-O3 /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
"/clang:-O2 /Zi /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"/clang:-O2 /Zi /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_MINSIZEREL "/clang:-Os /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
"/clang:-Os /DNDEBUG" CACHE STRING "" FORCE)
|
||||
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE
|
||||
"${CMAKE_CURRENT_LIST_DIR}/msquic-clangcl-rules.cmake")
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH "${MSQUIC_MINGW_ROOT}")
|
||||
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)
|
||||
@@ -1,21 +0,0 @@
|
||||
set(CMAKE_DEPFILE_FLAGS_C
|
||||
"-clang:-MD -clang:-MT<DEP_TARGET> -clang:-MF<DEP_FILE>")
|
||||
set(CMAKE_DEPFILE_FLAGS_CXX
|
||||
"-clang:-MD -clang:-MT<DEP_TARGET> -clang:-MF<DEP_FILE>")
|
||||
|
||||
set(CMAKE_C_COMPILE_OBJECT
|
||||
"<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB> /c -- <SOURCE>")
|
||||
set(CMAKE_CXX_COMPILE_OBJECT
|
||||
"<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB> /c -- <SOURCE>")
|
||||
set(CMAKE_C_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_AR> /nologo <LINK_FLAGS> /out:<TARGET> <OBJECTS>")
|
||||
set(CMAKE_CXX_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_AR> /nologo <LINK_FLAGS> /out:<TARGET> <OBJECTS>")
|
||||
|
||||
set(CMAKE_STATIC_LIBRARY_PREFIX "")
|
||||
set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
|
||||
set(CMAKE_IMPORT_LIBRARY_PREFIX "")
|
||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
|
||||
|
||||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
@@ -44,9 +44,22 @@
|
||||
#include <string.h>
|
||||
|
||||
#ifndef __cplusplus
|
||||
#define inline static __inline__
|
||||
#ifndef static_assert
|
||||
#define static_assert _Static_assert
|
||||
#endif
|
||||
|
||||
#define inline static __inline__
|
||||
#endif
|
||||
|
||||
#include <msquic_winuser.h>
|
||||
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
#undef QUIC_INLINE
|
||||
#define QUIC_INLINE static inline
|
||||
|
||||
#undef UNREFERENCED_PARAMETER
|
||||
#define UNREFERENCED_PARAMETER(parameter) ((void)(parameter))
|
||||
|
||||
@@ -89,13 +102,13 @@
|
||||
#define __analysis_assert(expression) ((void)(0 && (expression)))
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedAnd8
|
||||
#define InterlockedAnd8 _InterlockedAnd8
|
||||
#endif
|
||||
#undef InterlockedAnd8
|
||||
#define InterlockedAnd8(destination, value) \
|
||||
__atomic_fetch_and((destination), (value), __ATOMIC_SEQ_CST)
|
||||
|
||||
#ifndef InterlockedOr8
|
||||
#define InterlockedOr8 _InterlockedOr8
|
||||
#endif
|
||||
#undef InterlockedOr8
|
||||
#define InterlockedOr8(destination, value) \
|
||||
__atomic_fetch_or((destination), (value), __ATOMIC_SEQ_CST)
|
||||
|
||||
#ifndef InterlockedIncrementNoFence64
|
||||
#define InterlockedIncrementNoFence64 _InterlockedIncrement64
|
||||
|
||||
Reference in New Issue
Block a user