From d0b292cda6d83c57ec7d4faef2fbc54ed1dc15f7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 2 Feb 2026 21:46:20 +0200 Subject: [PATCH] [VCSTARTUP] Separate the library from vcruntime Previously this was mixed with vcruntime, with some objects being shared. But this is messy. Instead use a separate library and link ucrtbase to this as well. This also matches more closely how native libraries are organized, where vcstartup is merged into the CRT import libraries, while vcruntime is merged into the static CRT libraries. --- dll/win32/ucrtbase/CMakeLists.txt | 1 + sdk/lib/CMakeLists.txt | 1 + sdk/lib/vcruntime/CMakeLists.txt | 71 +++++-------------- sdk/lib/vcstartup/CMakeLists.txt | 61 ++++++++++++++++ .../__acrt_initialize_stub.cpp | 0 .../__report_gsfailure.c | 0 .../__report_rangecheckfailure.c | 0 .../__scrt_uninitialize_crt.cpp | 0 .../__security_init_cookie.c | 0 .../__vcrt_init_stubs.c | 0 sdk/lib/{vcruntime => vcstartup}/_fltused.c | 0 sdk/lib/{vcruntime => vcstartup}/_onexit.c | 0 .../amd64/__security_check_cookie.s | 0 sdk/lib/{vcruntime => vcstartup}/atexit.c | 0 .../commonCRTStartup.hpp | 0 .../i386/__security_check_cookie.s | 0 .../{vcruntime => vcstartup}/initializers.cpp | 0 .../isa_available.cpp | 0 .../mainCRTStartup.cpp | 0 sdk/lib/{vcruntime => vcstartup}/tlssup.c | 0 .../wmainCRTStartup.cpp | 0 21 files changed, 79 insertions(+), 55 deletions(-) create mode 100644 sdk/lib/vcstartup/CMakeLists.txt rename sdk/lib/{vcruntime => vcstartup}/__acrt_initialize_stub.cpp (100%) rename sdk/lib/{vcruntime => vcstartup}/__report_gsfailure.c (100%) rename sdk/lib/{vcruntime => vcstartup}/__report_rangecheckfailure.c (100%) rename sdk/lib/{vcruntime => vcstartup}/__scrt_uninitialize_crt.cpp (100%) rename sdk/lib/{vcruntime => vcstartup}/__security_init_cookie.c (100%) rename sdk/lib/{vcruntime => vcstartup}/__vcrt_init_stubs.c (100%) rename sdk/lib/{vcruntime => vcstartup}/_fltused.c (100%) rename sdk/lib/{vcruntime => vcstartup}/_onexit.c (100%) rename sdk/lib/{vcruntime => vcstartup}/amd64/__security_check_cookie.s (100%) rename sdk/lib/{vcruntime => vcstartup}/atexit.c (100%) rename sdk/lib/{vcruntime => vcstartup}/commonCRTStartup.hpp (100%) rename sdk/lib/{vcruntime => vcstartup}/i386/__security_check_cookie.s (100%) rename sdk/lib/{vcruntime => vcstartup}/initializers.cpp (100%) rename sdk/lib/{vcruntime => vcstartup}/isa_available.cpp (100%) rename sdk/lib/{vcruntime => vcstartup}/mainCRTStartup.cpp (100%) rename sdk/lib/{vcruntime => vcstartup}/tlssup.c (100%) rename sdk/lib/{vcruntime => vcstartup}/wmainCRTStartup.cpp (100%) diff --git a/dll/win32/ucrtbase/CMakeLists.txt b/dll/win32/ucrtbase/CMakeLists.txt index c5ea55f2601..3953389c7e2 100644 --- a/dll/win32/ucrtbase/CMakeLists.txt +++ b/dll/win32/ucrtbase/CMakeLists.txt @@ -36,6 +36,7 @@ target_link_libraries(ucrtbase msvcrt_shared crtmath vcruntime + vcstartup chkstk wine ) diff --git a/sdk/lib/CMakeLists.txt b/sdk/lib/CMakeLists.txt index 0b465243be7..fbd79de8686 100644 --- a/sdk/lib/CMakeLists.txt +++ b/sdk/lib/CMakeLists.txt @@ -58,6 +58,7 @@ add_subdirectory(ucrt) add_subdirectory(udmihelp) add_subdirectory(uuid) add_subdirectory(vcruntime) +add_subdirectory(vcstartup) add_subdirectory(wine2ros) add_subdirectory(wdmguid) diff --git a/sdk/lib/vcruntime/CMakeLists.txt b/sdk/lib/vcruntime/CMakeLists.txt index 2829dd9d30a..c790b54daf9 100644 --- a/sdk/lib/vcruntime/CMakeLists.txt +++ b/sdk/lib/vcruntime/CMakeLists.txt @@ -11,49 +11,12 @@ if(DBG) add_compile_definitions(_DEBUG) # TODO: define this globally endif() -# 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() - add_compile_definitions( _CORECRT_BUILD _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY _NTSYSTEM_ ) -if(${ARCH} STREQUAL "i386") - list(APPEND VCRT_COMMON_ASM_SOURCES - i386/__security_check_cookie.s - i386/_chkesp.s - ) -elseif(${ARCH} STREQUAL "amd64") - list(APPEND VCRT_COMMON_ASM_SOURCES - amd64/__security_check_cookie.s - ) -endif() -add_asm_files(vcrt_common_asm ${VCRT_COMMON_ASM_SOURCES}) - -list(APPEND VCRT_COMMON_SOURCES - ${vcrt_common_asm} - __report_gsfailure.c - __report_rangecheckfailure.c - __security_init_cookie.c - _fltused.c - initializers.cpp - isa_available.cpp - tlssup.c -) - -# Common between vcstartup and vcruntime -add_library(vcrt_common ${VCRT_COMMON_SOURCES}) -target_link_libraries(vcrt_common ${PSEH_LIB}) -add_dependencies(vcrt_common psdk) - if(${ARCH} STREQUAL "i386") list(APPEND VCRT_SETJMP_SOURCES i386/longjmp.c @@ -94,34 +57,32 @@ add_asm_files(vcrt_setjmp_asm ${VCRT_SETJMP_ASM_SOURCES}) add_library(setjmp ${VCRT_SETJMP_SOURCES} ${vcrt_setjmp_asm}) add_dependencies(setjmp psdk asm) -list(APPEND VCRT_RUNTIME_SOURCES - ${vcrt_runtime_asm} + +if(${ARCH} STREQUAL "i386") + list(APPEND VCRUNTIME_ASM_SOURCES + i386/_chkesp.s + ) +elseif(${ARCH} STREQUAL "amd64") + list(APPEND VCRUNTIME_ASM_SOURCES + + ) +endif() +add_asm_files(vcruntime_asm ${VCRUNTIME_ASM_SOURCES}) + +list(APPEND VCRUNTIME_SOURCES + ${vcruntime_asm} __std_terminate.c __vcrt_init.c purecall.cpp ) if(${ARCH} STREQUAL "i386") - list(APPEND VCRT_RUNTIME_SOURCES + list(APPEND VCRUNTIME_SOURCES i386/_chkesp_failed.c ) endif() # Runtime library (linked into ucrtbase) -add_library(vcruntime ${VCRT_RUNTIME_SOURCES} $ $) +add_library(vcruntime ${VCRUNTIME_SOURCES} $) target_link_libraries(vcruntime ${PSEH_LIB}) target_include_directories(vcruntime INTERFACE inc) - -list(APPEND VCRT_STARTUP_SOURCES - __acrt_initialize_stub.cpp - __scrt_uninitialize_crt.cpp - __vcrt_init_stubs.c - _onexit.c - atexit.c - mainCRTStartup.cpp - wmainCRTStartup.cpp -) - -# Startup library (linked into executables, linking to ucrtbase) -add_library(vcstartup ${VCRT_STARTUP_SOURCES} $) -target_link_libraries(vcstartup ${PSEH_LIB} libucrtbase libkernel32) diff --git a/sdk/lib/vcstartup/CMakeLists.txt b/sdk/lib/vcstartup/CMakeLists.txt new file mode 100644 index 00000000000..5aaee70cb1b --- /dev/null +++ b/sdk/lib/vcstartup/CMakeLists.txt @@ -0,0 +1,61 @@ + +# 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) + +if(DBG) + add_compile_definitions(_DEBUG) # TODO: define this globally +endif() + +# 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() + +add_compile_definitions( + _CORECRT_BUILD + _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + _NTSYSTEM_ +) + +if(${ARCH} STREQUAL "i386") + list(APPEND VCSTARTUP_ASM_SOURCES + i386/__security_check_cookie.s + ) +elseif(${ARCH} STREQUAL "amd64") + list(APPEND VCSTARTUP_ASM_SOURCES + amd64/__security_check_cookie.s + ) +endif() +add_asm_files(vcstartup_asm ${VCSTARTUP_ASM_SOURCES}) + +list(APPEND VCSTARTUP_SOURCES + ${vcstartup_asm} + __acrt_initialize_stub.cpp + __report_gsfailure.c + __report_rangecheckfailure.c + __scrt_uninitialize_crt.cpp + __security_init_cookie.c + __vcrt_init_stubs.c + _fltused.c + _onexit.c + atexit.c + initializers.cpp + isa_available.cpp + mainCRTStartup.cpp + tlssup.c + wmainCRTStartup.cpp +) + +# Startup library (linked into executables, linking to ucrtbase) +add_library(vcstartup ${VCSTARTUP_SOURCES}) +target_link_libraries(vcstartup ${PSEH_LIB} libkernel32) +target_include_directories(vcstartup PRIVATE $) diff --git a/sdk/lib/vcruntime/__acrt_initialize_stub.cpp b/sdk/lib/vcstartup/__acrt_initialize_stub.cpp similarity index 100% rename from sdk/lib/vcruntime/__acrt_initialize_stub.cpp rename to sdk/lib/vcstartup/__acrt_initialize_stub.cpp diff --git a/sdk/lib/vcruntime/__report_gsfailure.c b/sdk/lib/vcstartup/__report_gsfailure.c similarity index 100% rename from sdk/lib/vcruntime/__report_gsfailure.c rename to sdk/lib/vcstartup/__report_gsfailure.c diff --git a/sdk/lib/vcruntime/__report_rangecheckfailure.c b/sdk/lib/vcstartup/__report_rangecheckfailure.c similarity index 100% rename from sdk/lib/vcruntime/__report_rangecheckfailure.c rename to sdk/lib/vcstartup/__report_rangecheckfailure.c diff --git a/sdk/lib/vcruntime/__scrt_uninitialize_crt.cpp b/sdk/lib/vcstartup/__scrt_uninitialize_crt.cpp similarity index 100% rename from sdk/lib/vcruntime/__scrt_uninitialize_crt.cpp rename to sdk/lib/vcstartup/__scrt_uninitialize_crt.cpp diff --git a/sdk/lib/vcruntime/__security_init_cookie.c b/sdk/lib/vcstartup/__security_init_cookie.c similarity index 100% rename from sdk/lib/vcruntime/__security_init_cookie.c rename to sdk/lib/vcstartup/__security_init_cookie.c diff --git a/sdk/lib/vcruntime/__vcrt_init_stubs.c b/sdk/lib/vcstartup/__vcrt_init_stubs.c similarity index 100% rename from sdk/lib/vcruntime/__vcrt_init_stubs.c rename to sdk/lib/vcstartup/__vcrt_init_stubs.c diff --git a/sdk/lib/vcruntime/_fltused.c b/sdk/lib/vcstartup/_fltused.c similarity index 100% rename from sdk/lib/vcruntime/_fltused.c rename to sdk/lib/vcstartup/_fltused.c diff --git a/sdk/lib/vcruntime/_onexit.c b/sdk/lib/vcstartup/_onexit.c similarity index 100% rename from sdk/lib/vcruntime/_onexit.c rename to sdk/lib/vcstartup/_onexit.c diff --git a/sdk/lib/vcruntime/amd64/__security_check_cookie.s b/sdk/lib/vcstartup/amd64/__security_check_cookie.s similarity index 100% rename from sdk/lib/vcruntime/amd64/__security_check_cookie.s rename to sdk/lib/vcstartup/amd64/__security_check_cookie.s diff --git a/sdk/lib/vcruntime/atexit.c b/sdk/lib/vcstartup/atexit.c similarity index 100% rename from sdk/lib/vcruntime/atexit.c rename to sdk/lib/vcstartup/atexit.c diff --git a/sdk/lib/vcruntime/commonCRTStartup.hpp b/sdk/lib/vcstartup/commonCRTStartup.hpp similarity index 100% rename from sdk/lib/vcruntime/commonCRTStartup.hpp rename to sdk/lib/vcstartup/commonCRTStartup.hpp diff --git a/sdk/lib/vcruntime/i386/__security_check_cookie.s b/sdk/lib/vcstartup/i386/__security_check_cookie.s similarity index 100% rename from sdk/lib/vcruntime/i386/__security_check_cookie.s rename to sdk/lib/vcstartup/i386/__security_check_cookie.s diff --git a/sdk/lib/vcruntime/initializers.cpp b/sdk/lib/vcstartup/initializers.cpp similarity index 100% rename from sdk/lib/vcruntime/initializers.cpp rename to sdk/lib/vcstartup/initializers.cpp diff --git a/sdk/lib/vcruntime/isa_available.cpp b/sdk/lib/vcstartup/isa_available.cpp similarity index 100% rename from sdk/lib/vcruntime/isa_available.cpp rename to sdk/lib/vcstartup/isa_available.cpp diff --git a/sdk/lib/vcruntime/mainCRTStartup.cpp b/sdk/lib/vcstartup/mainCRTStartup.cpp similarity index 100% rename from sdk/lib/vcruntime/mainCRTStartup.cpp rename to sdk/lib/vcstartup/mainCRTStartup.cpp diff --git a/sdk/lib/vcruntime/tlssup.c b/sdk/lib/vcstartup/tlssup.c similarity index 100% rename from sdk/lib/vcruntime/tlssup.c rename to sdk/lib/vcstartup/tlssup.c diff --git a/sdk/lib/vcruntime/wmainCRTStartup.cpp b/sdk/lib/vcstartup/wmainCRTStartup.cpp similarity index 100% rename from sdk/lib/vcruntime/wmainCRTStartup.cpp rename to sdk/lib/vcstartup/wmainCRTStartup.cpp