mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-12 04:20:01 -05:00
Windows: Add experimental WindowsKernelModeDriver platform
This commit is contained in:
@@ -28,6 +28,8 @@ endif()
|
|||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
|
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
|
||||||
set(_PLATFORM_LINK_FLAGS " /subsystem:windowsce")
|
set(_PLATFORM_LINK_FLAGS " /subsystem:windowsce")
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||||
|
set(_PLATFORM_LINK_FLAGS " -subsystem:native -kernel -MANIFEST:NO")
|
||||||
else()
|
else()
|
||||||
set(_PLATFORM_LINK_FLAGS "")
|
set(_PLATFORM_LINK_FLAGS "")
|
||||||
endif()
|
endif()
|
||||||
@@ -223,6 +225,18 @@ elseif(WINDOWS_PHONE OR WINDOWS_STORE)
|
|||||||
else()
|
else()
|
||||||
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
|
||||||
endif()
|
endif()
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||||
|
set(CMAKE_C_STANDARD_LIBRARIES_INIT "")
|
||||||
|
set(_FLAGS_C " -kernel")
|
||||||
|
set(_FLAGS_CXX " -kernel")
|
||||||
|
foreach(t EXE SHARED MODULE)
|
||||||
|
string(APPEND CMAKE_${t}_LINKER_FLAGS_INIT " -NODEFAULTLIB")
|
||||||
|
endforeach()
|
||||||
|
if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "x64") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "x64"))
|
||||||
|
set(_PLATFORM_DEFINES "${_PLATFORM_DEFINES} -D_AMD64_ -DAMD64")
|
||||||
|
elseif((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64"))
|
||||||
|
set(_PLATFORM_DEFINES "${_PLATFORM_DEFINES} -D_ARM64_ -DARM64")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(_PLATFORM_DEFINES "/DWIN32")
|
set(_PLATFORM_DEFINES "/DWIN32")
|
||||||
if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
|
if((_MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64EC") OR (_MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64EC"))
|
||||||
@@ -294,7 +308,7 @@ endif()
|
|||||||
# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype
|
# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype
|
||||||
# on versions that support it
|
# on versions that support it
|
||||||
set( MSVC_INCREMENTAL_YES_FLAG "")
|
set( MSVC_INCREMENTAL_YES_FLAG "")
|
||||||
if(NOT WINDOWS_PHONE AND NOT WINDOWS_STORE)
|
if(NOT WINDOWS_PHONE AND NOT WINDOWS_STORE AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||||
if(NOT MSVC_INCREMENTAL_DEFAULT)
|
if(NOT MSVC_INCREMENTAL_DEFAULT)
|
||||||
set( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:YES")
|
set( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:YES")
|
||||||
else()
|
else()
|
||||||
@@ -353,8 +367,14 @@ macro(__windows_compiler_msvc lang)
|
|||||||
set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
||||||
set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||||
|
set(_DLL_DRIVER "-driver")
|
||||||
|
else()
|
||||||
|
set(_DLL_DRIVER "/dll")
|
||||||
|
endif()
|
||||||
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
||||||
"${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /dll /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
"${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> ${_DLL_DRIVER} /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||||
|
unset(_DLL_DRIVER)
|
||||||
|
|
||||||
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
|
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
|
||||||
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
|
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> ${CMAKE_CL_NOLOGO} <LINK_FLAGS> /out:<TARGET> <OBJECTS> ")
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
set(CMAKE_STATIC_LIBRARY_PREFIX "")
|
set(CMAKE_STATIC_LIBRARY_PREFIX "")
|
||||||
set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
|
set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
|
||||||
set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib
|
set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib
|
||||||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so
|
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||||
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".sys") # .so
|
||||||
|
else()
|
||||||
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so
|
||||||
|
endif()
|
||||||
set(CMAKE_IMPORT_LIBRARY_PREFIX "")
|
set(CMAKE_IMPORT_LIBRARY_PREFIX "")
|
||||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
|
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
|
||||||
set(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe
|
set(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe
|
||||||
|
|||||||
11
Modules/Platform/WindowsKernelModeDriver-Initialize.cmake
Normal file
11
Modules/Platform/WindowsKernelModeDriver-Initialize.cmake
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# undocumented, do not use outside of CMake
|
||||||
|
cmake_language(GET_EXPERIMENTAL_FEATURE_ENABLED "WindowsKernelModeDriver" _cmake_windows_kernel_mode_driver_enabled)
|
||||||
|
if(NOT _cmake_windows_kernel_mode_driver_enabled)
|
||||||
|
message(FATAL_ERROR "Windows kernel-mode driver experimental support is not enabled.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
message(FATAL_ERROR "Visual Studio generators do not yet support CMAKE_SYSTEM_NAME=WindowsKernelModeDriver.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(_CMAKE_FEATURE_DETECTION_TARGET_TYPE STATIC_LIBRARY)
|
||||||
1
Modules/Platform/WindowsKernelModeDriver-MSVC-C.cmake
Normal file
1
Modules/Platform/WindowsKernelModeDriver-MSVC-C.cmake
Normal file
@@ -0,0 +1 @@
|
|||||||
|
include(Platform/Windows-MSVC-C)
|
||||||
1
Modules/Platform/WindowsKernelModeDriver-MSVC-CXX.cmake
Normal file
1
Modules/Platform/WindowsKernelModeDriver-MSVC-CXX.cmake
Normal file
@@ -0,0 +1 @@
|
|||||||
|
include(Platform/Windows-MSVC-CXX)
|
||||||
1
Modules/Platform/WindowsKernelModeDriver.cmake
Normal file
1
Modules/Platform/WindowsKernelModeDriver.cmake
Normal file
@@ -0,0 +1 @@
|
|||||||
|
include(Platform/Windows)
|
||||||
@@ -26,6 +26,12 @@ cmExperimental::FeatureData LookupTable[] = {
|
|||||||
"experimentation and feedback to CMake developers.",
|
"experimentation and feedback to CMake developers.",
|
||||||
false, // https://gitlab.kitware.com/cmake/cmake/-/issues/25097
|
false, // https://gitlab.kitware.com/cmake/cmake/-/issues/25097
|
||||||
false },
|
false },
|
||||||
|
// WindowsKernelModeDriver
|
||||||
|
{ "WindowsKernelModeDriver", "5c2d848d-4efa-4529-a768-efd57171bf68",
|
||||||
|
"CMAKE_EXPERIMENTAL_WINDOWS_KERNEL_MODE_DRIVER",
|
||||||
|
"CMake's Windows kernel-mode driver support is experimental. It is meant "
|
||||||
|
"only for experimentation and feedback to CMake developers.",
|
||||||
|
true, false },
|
||||||
};
|
};
|
||||||
static_assert(sizeof(LookupTable) / sizeof(LookupTable[0]) ==
|
static_assert(sizeof(LookupTable) / sizeof(LookupTable[0]) ==
|
||||||
static_cast<size_t>(cmExperimental::Feature::Sentinel),
|
static_cast<size_t>(cmExperimental::Feature::Sentinel),
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ public:
|
|||||||
enum class Feature
|
enum class Feature
|
||||||
{
|
{
|
||||||
CxxModuleCMakeApi,
|
CxxModuleCMakeApi,
|
||||||
|
WindowsKernelModeDriver,
|
||||||
|
|
||||||
Sentinel,
|
Sentinel,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user