https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9186b861a6d94023d2d5f…
commit 9186b861a6d94023d2d5f74f574ea2fa82d0a04c
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Fri Jan 17 11:45:05 2025 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Thu Feb 6 09:17:37 2025 +0200
[VCRUNTIME][VCSTARTUP] Add separate vcruntime and vcstartup lib
vcruntime contains the code that is linked into ucrtbase (in VS it is also provided as
vcruntime140.dll)
vcstartup contains the code that is statically linked into executables that link to
ucrtbase.dll. In Visual Studio this is part of msvcrt.lib (the import library for msvcrt),
similar to our current msvcrtex, and it gets linked when you link to ucrtbase as well. The
name is based on the folder name in the library.
Both libraries share some code, but each file is only compiled once.
---
dll/win32/ucrtbase/CMakeLists.txt | 4 ++
sdk/lib/CMakeLists.txt | 1 +
sdk/lib/ucrt/CMakeLists.txt | 3 +-
sdk/lib/ucrt/float/float.cmake | 2 +-
sdk/lib/ucrt/startup/startup.cmake | 1 -
sdk/lib/ucrt/vcruntime/vcruntime.cmake | 19 ------
sdk/lib/vcruntime/CMakeLists.txt | 71 ++++++++++++++++++++++
sdk/lib/{ucrt => }/vcruntime/__report_gsfailure.c | 0
.../vcruntime/__report_rangecheckfailure.c | 0
.../__scrt_uninitialize_crt.cpp | 0
.../{ucrt => }/vcruntime/__security_init_cookie.c | 4 +-
sdk/lib/{ucrt => }/vcruntime/__vcrt_init.c | 0
sdk/lib/{ucrt/float => vcruntime}/_fltused.c | 0
.../vcruntime/amd64/__security_check_cookie.s | 0
.../vcruntime/i386/__security_check_cookie.s | 0
sdk/lib/{ucrt => vcruntime}/inc/internal_shared.h | 0
sdk/lib/{ucrt => vcruntime}/inc/nt.h | 0
sdk/lib/{ucrt => vcruntime}/inc/ntrtl.h | 0
sdk/lib/{ucrt => vcruntime}/inc/nturtl.h | 0
sdk/lib/{ucrt => }/vcruntime/initializers.cpp | 0
sdk/lib/{ucrt => }/vcruntime/isa_available.cpp | 0
21 files changed, 79 insertions(+), 26 deletions(-)
diff --git a/dll/win32/ucrtbase/CMakeLists.txt b/dll/win32/ucrtbase/CMakeLists.txt
index 7001c9e0e25..e22d60db0aa 100644
--- a/dll/win32/ucrtbase/CMakeLists.txt
+++ b/dll/win32/ucrtbase/CMakeLists.txt
@@ -21,9 +21,13 @@ set_entrypoint(ucrtbase __acrt_DllMain 12)
target_link_libraries(ucrtbase
ucrt
ucrtsupport
+ vcruntime
wine
)
+# Implicitly link to vcstartup
+target_link_libraries(libucrtbase vcstartup)
+
if(MSVC)
target_link_libraries(ucrtbase runtmchk)
else()
diff --git a/sdk/lib/CMakeLists.txt b/sdk/lib/CMakeLists.txt
index e50c21cad8c..e3344d8c621 100644
--- a/sdk/lib/CMakeLists.txt
+++ b/sdk/lib/CMakeLists.txt
@@ -55,6 +55,7 @@ add_subdirectory(tzlib)
add_subdirectory(ucrt)
add_subdirectory(udmihelp)
add_subdirectory(uuid)
+add_subdirectory(vcruntime)
add_subdirectory(wdmguid)
else()
diff --git a/sdk/lib/ucrt/CMakeLists.txt b/sdk/lib/ucrt/CMakeLists.txt
index a10b7b60029..f6fdd2b5e2a 100644
--- a/sdk/lib/ucrt/CMakeLists.txt
+++ b/sdk/lib/ucrt/CMakeLists.txt
@@ -102,7 +102,6 @@ include(stdio/stdio.cmake)
include(stdlib/stdlib.cmake)
include(string/string.cmake)
include(time/time.cmake)
-include(vcruntime/vcruntime.cmake)
add_library(ucrt OBJECT
${UCRT_CONIO_SOURCES}
@@ -128,5 +127,5 @@ add_library(ucrt OBJECT
${UCRT_VCRUNTIME_SOURCES}
)
-#target_link_libraries(ucrt pseh)
+target_link_libraries(ucrt vcruntime)
add_dependencies(ucrt psdk asm)
diff --git a/sdk/lib/ucrt/float/float.cmake b/sdk/lib/ucrt/float/float.cmake
index a0306235771..a1b5174d50a 100644
--- a/sdk/lib/ucrt/float/float.cmake
+++ b/sdk/lib/ucrt/float/float.cmake
@@ -1,4 +1,4 @@
list(APPEND UCRT_FLOAT_SOURCES
- float/_fltused.c
+ # TBD
)
diff --git a/sdk/lib/ucrt/startup/startup.cmake b/sdk/lib/ucrt/startup/startup.cmake
index 4bf94341ace..9bc9b454df7 100644
--- a/sdk/lib/ucrt/startup/startup.cmake
+++ b/sdk/lib/ucrt/startup/startup.cmake
@@ -1,6 +1,5 @@
list(APPEND UCRT_STARTUP_SOURCES
- startup/__scrt_uninitialize_crt.cpp
startup/abort.cpp
startup/argv_data.cpp
startup/argv_parsing.cpp
diff --git a/sdk/lib/ucrt/vcruntime/vcruntime.cmake
b/sdk/lib/ucrt/vcruntime/vcruntime.cmake
deleted file mode 100644
index dc610565944..00000000000
--- a/sdk/lib/ucrt/vcruntime/vcruntime.cmake
+++ /dev/null
@@ -1,19 +0,0 @@
-
-list(APPEND UCRT_VCRUNTIME_SOURCES
- vcruntime/__report_gsfailure.c
- vcruntime/__report_rangecheckfailure.c
- vcruntime/__security_init_cookie.c
- vcruntime/__vcrt_init.c
- vcruntime/initializers.cpp
- vcruntime/isa_available.cpp
-)
-
-if(${ARCH} STREQUAL "i386")
- list(APPEND UCRT_VCRUNTIME_SOURCES
- vcruntime/i386/__security_check_cookie.s
- )
-elseif(${ARCH} STREQUAL "amd64")
- list(APPEND UCRT_VCRUNTIME_SOURCES
- vcruntime/amd64/__security_check_cookie.s
- )
-endif()
diff --git a/sdk/lib/vcruntime/CMakeLists.txt b/sdk/lib/vcruntime/CMakeLists.txt
new file mode 100644
index 00000000000..3c7076acafd
--- /dev/null
+++ b/sdk/lib/vcruntime/CMakeLists.txt
@@ -0,0 +1,71 @@
+
+# Replace the old CRT include directory with the UCRT include directory
+get_property(INCLUDE_DIRS DIRECTORY . PROPERTY INCLUDE_DIRECTORIES)
+list(REMOVE_ITEM INCLUDE_DIRS "${REACTOS_SOURCE_DIR}/sdk/include/crt")
+set_property(DIRECTORY . PROPERTY INCLUDE_DIRECTORIES ${INCLUDE_DIRS})
+include_directories(${REACTOS_SOURCE_DIR}/sdk/include/ucrt)
+
+include_directories(inc)
+
+# Silence GCC/Clang warnings
+if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR
+ CMAKE_C_COMPILER_ID STREQUAL "Clang")
+ add_compile_options(
+ -Wno-builtin-declaration-mismatch
+ -Wno-unused-function
+ )
+endif()
+
+list(APPEND VCRT_COMMON_SOURCES
+ __report_gsfailure.c
+ __report_rangecheckfailure.c
+ __security_init_cookie.c
+ __vcrt_init.c
+ _fltused.c
+ initializers.cpp
+ isa_available.cpp
+)
+
+list(APPEND VCRT_RUNTIME_SOURCES
+ # TBD
+)
+
+list(APPEND VCRT_STARTUP_SOURCES
+ __scrt_uninitialize_crt.cpp
+)
+
+if(${ARCH} STREQUAL "i386")
+ list(APPEND VCRT_COMMON_SOURCES
+ i386/__security_check_cookie.s
+ )
+elseif(${ARCH} STREQUAL "amd64")
+ list(APPEND VCRT_COMMON_SOURCES
+ amd64/__security_check_cookie.s
+ )
+endif()
+
+# Common between vcstartup and vcruntime
+add_library(vcrt_common ${VCRT_COMMON_SOURCES})
+target_compile_definitions(vcrt_common PRIVATE
+ _CORECRT_BUILD
+ _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
+)
+target_link_libraries(vcrt_common ${PSEH_LIB})
+add_dependencies(vcrt_common psdk)
+
+# Runtime library (linked into ucrtbase)
+add_library(vcruntime ${VCRT_RUNTIME_SOURCES} $<TARGET_OBJECTS:vcrt_common>)
+target_compile_definitions(vcruntime PRIVATE
+ _CORECRT_BUILD
+ _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
+)
+target_link_libraries(vcruntime ${PSEH_LIB})
+target_include_directories(vcruntime INTERFACE inc)
+
+# Startup library (inked into executables, linking to ucrtbase)
+add_library(vcstartup ${VCRT_STARTUP_SOURCES} $<TARGET_OBJECTS:vcrt_common>)
+target_compile_definitions(vcstartup PRIVATE
+ _CORECRT_BUILD
+ _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
+)
+target_link_libraries(vcstartup ${PSEH_LIB} libucrtbase libkernel32)
diff --git a/sdk/lib/ucrt/vcruntime/__report_gsfailure.c
b/sdk/lib/vcruntime/__report_gsfailure.c
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/__report_gsfailure.c
rename to sdk/lib/vcruntime/__report_gsfailure.c
diff --git a/sdk/lib/ucrt/vcruntime/__report_rangecheckfailure.c
b/sdk/lib/vcruntime/__report_rangecheckfailure.c
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/__report_rangecheckfailure.c
rename to sdk/lib/vcruntime/__report_rangecheckfailure.c
diff --git a/sdk/lib/ucrt/startup/__scrt_uninitialize_crt.cpp
b/sdk/lib/vcruntime/__scrt_uninitialize_crt.cpp
similarity index 100%
rename from sdk/lib/ucrt/startup/__scrt_uninitialize_crt.cpp
rename to sdk/lib/vcruntime/__scrt_uninitialize_crt.cpp
diff --git a/sdk/lib/ucrt/vcruntime/__security_init_cookie.c
b/sdk/lib/vcruntime/__security_init_cookie.c
similarity index 96%
rename from sdk/lib/ucrt/vcruntime/__security_init_cookie.c
rename to sdk/lib/vcruntime/__security_init_cookie.c
index 7488aec954d..54edfa745cb 100644
--- a/sdk/lib/ucrt/vcruntime/__security_init_cookie.c
+++ b/sdk/lib/vcruntime/__security_init_cookie.c
@@ -8,9 +8,7 @@
// SPDX-License-Identifier: MIT
//
-#include <stdlib.h>
-#include <intrin.h>
-#include <corecrt_internal.h>
+#include <internal_shared.h>
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE 0x00002B992DDFA232ull
diff --git a/sdk/lib/ucrt/vcruntime/__vcrt_init.c b/sdk/lib/vcruntime/__vcrt_init.c
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/__vcrt_init.c
rename to sdk/lib/vcruntime/__vcrt_init.c
diff --git a/sdk/lib/ucrt/float/_fltused.c b/sdk/lib/vcruntime/_fltused.c
similarity index 100%
rename from sdk/lib/ucrt/float/_fltused.c
rename to sdk/lib/vcruntime/_fltused.c
diff --git a/sdk/lib/ucrt/vcruntime/amd64/__security_check_cookie.s
b/sdk/lib/vcruntime/amd64/__security_check_cookie.s
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/amd64/__security_check_cookie.s
rename to sdk/lib/vcruntime/amd64/__security_check_cookie.s
diff --git a/sdk/lib/ucrt/vcruntime/i386/__security_check_cookie.s
b/sdk/lib/vcruntime/i386/__security_check_cookie.s
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/i386/__security_check_cookie.s
rename to sdk/lib/vcruntime/i386/__security_check_cookie.s
diff --git a/sdk/lib/ucrt/inc/internal_shared.h b/sdk/lib/vcruntime/inc/internal_shared.h
similarity index 100%
rename from sdk/lib/ucrt/inc/internal_shared.h
rename to sdk/lib/vcruntime/inc/internal_shared.h
diff --git a/sdk/lib/ucrt/inc/nt.h b/sdk/lib/vcruntime/inc/nt.h
similarity index 100%
rename from sdk/lib/ucrt/inc/nt.h
rename to sdk/lib/vcruntime/inc/nt.h
diff --git a/sdk/lib/ucrt/inc/ntrtl.h b/sdk/lib/vcruntime/inc/ntrtl.h
similarity index 100%
rename from sdk/lib/ucrt/inc/ntrtl.h
rename to sdk/lib/vcruntime/inc/ntrtl.h
diff --git a/sdk/lib/ucrt/inc/nturtl.h b/sdk/lib/vcruntime/inc/nturtl.h
similarity index 100%
rename from sdk/lib/ucrt/inc/nturtl.h
rename to sdk/lib/vcruntime/inc/nturtl.h
diff --git a/sdk/lib/ucrt/vcruntime/initializers.cpp b/sdk/lib/vcruntime/initializers.cpp
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/initializers.cpp
rename to sdk/lib/vcruntime/initializers.cpp
diff --git a/sdk/lib/ucrt/vcruntime/isa_available.cpp
b/sdk/lib/vcruntime/isa_available.cpp
similarity index 100%
rename from sdk/lib/ucrt/vcruntime/isa_available.cpp
rename to sdk/lib/vcruntime/isa_available.cpp