https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9186b861a6d94023d2d5f74f574ea2fa82d0a04c
commit 9186b861a6d94023d2d5f74f574ea2fa82d0a04c Author: Timo Kreuzer <timo.kreu...@reactos.org> AuthorDate: Fri Jan 17 11:45:05 2025 +0200 Commit: Timo Kreuzer <timo.kreu...@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