mirror of
https://github.com/reactos/reactos.git
synced 2024-11-24 12:03:31 +08:00
[CMAKE] Use an INTERFACE library to perform the msvcrt <-> msvcrtex binding
This commit is contained in:
parent
bada20a361
commit
23e04ae1ee
@ -1,6 +1,14 @@
|
||||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/crt/include)
|
||||
spec2def(msvcrt.dll msvcrt.spec ADD_IMPORTLIB)
|
||||
spec2def(msvcrt.dll msvcrt.spec)
|
||||
|
||||
# The msvcrt <-> msvcrtex trick
|
||||
generate_import_lib(libmsvcrt_real msvcrt.dll msvcrt.spec)
|
||||
add_library(libmsvcrt INTERFACE)
|
||||
target_compile_definitions(libmsvcrt INTERFACE _DLL __USE_CRTIMP)
|
||||
# if the linked module is one of win32gui;win32cui;win32dll;win32ocx;cpl link it with msvcrtex, which itself is linked to libmsvcrt_real
|
||||
# Otherwise, just link to libmsvcrt_real
|
||||
target_link_libraries(libmsvcrt INTERFACE "$<IF:$<IN_LIST:$<TARGET_PROPERTY:REACTOS_MODULE_TYPE>,win32gui;win32cui;win32dll;win32ocx;cpl>,msvcrtex,libmsvcrt_real>")
|
||||
|
||||
add_definitions(
|
||||
-DUSE_MSVCRT_PREFIX
|
||||
@ -26,8 +34,8 @@ target_link_libraries(msvcrt crt wine ${PSEH_LIB})
|
||||
|
||||
if(MSVC)
|
||||
# export of deleting destructor "name"
|
||||
add_target_link_flags(msvcrt "/ignore:4102")
|
||||
add_target_property(libmsvcrt STATIC_LIBRARY_FLAGS "/ignore:4102")
|
||||
target_link_options(msvcrt PRIVATE "/ignore:4102")
|
||||
set_property(TARGET libmsvcrt_real APPEND PROPERTY STATIC_LIBRARY_OPTIONS "/ignore:4102")
|
||||
endif()
|
||||
|
||||
add_importlibs(msvcrt kernel32 ntdll)
|
||||
|
@ -531,13 +531,7 @@ endif()
|
||||
function(add_importlibs _module)
|
||||
add_dependency_node(${_module})
|
||||
foreach(LIB ${ARGN})
|
||||
if("${LIB}" MATCHES "msvcrt")
|
||||
target_compile_definitions(${_module} PRIVATE _DLL __USE_CRTIMP)
|
||||
# set_module_type might not have been called at this point, so use a generator expression
|
||||
target_link_libraries(${_module} "$<$<IN_LIST:$<TARGET_PROPERTY:${_module},REACTOS_MODULE_TYPE>,win32gui;win32cui;win32dll;win32ocx;cpl>:msvcrtex>")
|
||||
endif()
|
||||
target_link_libraries(${_module} lib${LIB})
|
||||
add_dependencies(${_module} lib${LIB})
|
||||
add_dependency_edge(${_module} ${LIB})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
@ -96,6 +96,9 @@ add_asm_files(msvcrtex_asm ${MSVCRTEX_ASM_SOURCE})
|
||||
add_library(msvcrtex ${MSVCRTEX_SOURCE} ${msvcrtex_asm})
|
||||
target_compile_definitions(msvcrtex PRIVATE _DLL _MSVCRTEX_)
|
||||
|
||||
# Link msvcrtex to the "real" msvcrt.dll library. See msvcrt.dll CMakeLists.txt to see what really happens here
|
||||
target_link_libraries(msvcrtex libmsvcrt_real libkernel32)
|
||||
|
||||
if(GCC OR CLANG)
|
||||
target_compile_options(msvcrtex PRIVATE $<$<COMPILE_LANGUAGE:C>:-Wno-main>)
|
||||
if(LTCG)
|
||||
|
Loading…
Reference in New Issue
Block a user