From 597107fc28907dafb78ec009638575c9b5c2dfa2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 23 May 2011 18:27:16 +0000 Subject: [PATCH] [CMAKE] - Remove last traces of mingw_common - adopt msvcrtex on msvc builds - Fix MSVC warnings in crtexe.c, already pushed upstream svn path=/trunk/; revision=51868 --- .../kbswitch/kbsdll/CMakeLists.txt | 2 +- reactos/base/shell/explorer/CMakeLists.txt | 2 - reactos/base/system/autochk/CMakeLists.txt | 4 +- reactos/base/system/smss/CMakeLists.txt | 2 +- reactos/dll/3rdparty/libjpeg/CMakeLists.txt | 5 - reactos/dll/3rdparty/libpng/CMakeLists.txt | 2 +- reactos/dll/3rdparty/libtiff/CMakeLists.txt | 2 +- reactos/dll/win32/dnsapi/CMakeLists.txt | 4 - reactos/dll/win32/olesvr32/CMakeLists.txt | 4 +- reactos/dll/win32/winemp3.acm/CMakeLists.txt | 1 - reactos/lib/sdk/crt/CMakeLists.txt | 12 - reactos/lib/sdk/crt/misc/ofmt_stub.c | 6 + reactos/lib/sdk/crt/msvcrtex.cmake | 15 +- reactos/lib/sdk/crt/startup/crtdll.c | 215 ++++++++++++++++++ reactos/lib/sdk/crt/startup/crtexe.c | 6 +- reactos/lib/sdk/crt/startup/dllentry.c | 18 ++ .../lib/sdk/crt/startup/pseudo-reloc-list.c | 8 + reactos/msc.cmake | 44 ++-- reactos/subsystems/ntvdm/CMakeLists.txt | 8 +- 19 files changed, 290 insertions(+), 70 deletions(-) create mode 100644 reactos/lib/sdk/crt/misc/ofmt_stub.c create mode 100644 reactos/lib/sdk/crt/startup/crtdll.c create mode 100644 reactos/lib/sdk/crt/startup/dllentry.c create mode 100644 reactos/lib/sdk/crt/startup/pseudo-reloc-list.c diff --git a/reactos/base/applications/kbswitch/kbsdll/CMakeLists.txt b/reactos/base/applications/kbswitch/kbsdll/CMakeLists.txt index 1f51b602899..45046aac777 100644 --- a/reactos/base/applications/kbswitch/kbsdll/CMakeLists.txt +++ b/reactos/base/applications/kbswitch/kbsdll/CMakeLists.txt @@ -11,5 +11,5 @@ list(APPEND SOURCE add_library(kbsdll SHARED ${SOURCE}) set_module_type(kbsdll win32dll) -add_importlibs(kbsdll user32 comctl32 kernel32 msvcrt) +add_importlibs(kbsdll user32 comctl32 msvcrt kernel32) add_cd_file(TARGET kbsdll DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/shell/explorer/CMakeLists.txt b/reactos/base/shell/explorer/CMakeLists.txt index 6f01f7ee00f..3cf6006f382 100644 --- a/reactos/base/shell/explorer/CMakeLists.txt +++ b/reactos/base/shell/explorer/CMakeLists.txt @@ -64,8 +64,6 @@ target_link_libraries(explorer -lgcc -lmingwex wine - mingw_wmain - mingw_common uuid) add_importlibs(explorer advapi32 gdi32 user32 ws2_32 msimg32 comctl32 ole32 oleaut32 shell32 notifyhook msvcrt kernel32 ntdll) diff --git a/reactos/base/system/autochk/CMakeLists.txt b/reactos/base/system/autochk/CMakeLists.txt index fe3a4cdc718..b132b6c3935 100644 --- a/reactos/base/system/autochk/CMakeLists.txt +++ b/reactos/base/system/autochk/CMakeLists.txt @@ -3,6 +3,6 @@ add_executable(autochk WIN32 autochk.c autochk.rc) set_module_type(autochk nativecui) -target_link_libraries(autochk mingw_common nt) -add_importlibs(autochk kernel32 ntdll) +target_link_libraries(autochk nt) +add_importlibs(autochk ntdll) add_cd_file(TARGET autochk DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/system/smss/CMakeLists.txt b/reactos/base/system/smss/CMakeLists.txt index b1c77a3b491..d6c7b99873b 100644 --- a/reactos/base/system/smss/CMakeLists.txt +++ b/reactos/base/system/smss/CMakeLists.txt @@ -25,7 +25,7 @@ list(APPEND SOURCE add_executable(smss WIN32 ${CMAKE_CURRENT_BINARY_DIR}/smss_smss.h.gch ${SOURCE}) -target_link_libraries(smss mingw_common nt smlib) +target_link_libraries(smss nt smlib) if(MSVC) target_link_libraries(smss msvcsup) set_entrypoint(smss DllMainCRTStartup) diff --git a/reactos/dll/3rdparty/libjpeg/CMakeLists.txt b/reactos/dll/3rdparty/libjpeg/CMakeLists.txt index 124a4fb7a82..7805ac5e282 100644 --- a/reactos/dll/3rdparty/libjpeg/CMakeLists.txt +++ b/reactos/dll/3rdparty/libjpeg/CMakeLists.txt @@ -61,11 +61,6 @@ add_library(libjpeg SHARED set_entrypoint(libjpeg 0) -if(MSVC) -# for _fltused -target_link_libraries(libjpeg mingw_common) -endif() - add_importlibs(libjpeg msvcrt kernel32) add_dependencies(libjpeg psdk) diff --git a/reactos/dll/3rdparty/libpng/CMakeLists.txt b/reactos/dll/3rdparty/libpng/CMakeLists.txt index a3704f37418..4c5d4ae4793 100644 --- a/reactos/dll/3rdparty/libpng/CMakeLists.txt +++ b/reactos/dll/3rdparty/libpng/CMakeLists.txt @@ -30,7 +30,7 @@ add_library(libpng SHARED set_entrypoint(libpng 0) -target_link_libraries(libpng mingw_common zlib) +target_link_libraries(libpng zlib) add_importlibs(libpng msvcrt kernel32) diff --git a/reactos/dll/3rdparty/libtiff/CMakeLists.txt b/reactos/dll/3rdparty/libtiff/CMakeLists.txt index 9be13ae70dc..2586552d5fe 100644 --- a/reactos/dll/3rdparty/libtiff/CMakeLists.txt +++ b/reactos/dll/3rdparty/libtiff/CMakeLists.txt @@ -53,7 +53,7 @@ add_library(libtiff SHARED set_entrypoint(libtiff 0) -target_link_libraries(libtiff mingw_common zlib getopt) +target_link_libraries(libtiff zlib getopt) add_importlibs(libtiff user32 msvcrt kernel32) diff --git a/reactos/dll/win32/dnsapi/CMakeLists.txt b/reactos/dll/win32/dnsapi/CMakeLists.txt index fbd465929de..42141bdeee5 100644 --- a/reactos/dll/win32/dnsapi/CMakeLists.txt +++ b/reactos/dll/win32/dnsapi/CMakeLists.txt @@ -28,10 +28,6 @@ add_library(dnsapi SHARED set_entrypoint(dnsapi 0) target_link_libraries(dnsapi adns) -if(MSVC) - target_link_libraries(dnsapi msvcsup) -endif() - add_importlibs(dnsapi user32 ws2_32 iphlpapi msvcrt kernel32 ntdll) add_pch(dnsapi ${CMAKE_CURRENT_SOURCE_DIR}/dnsapi/precomp.h ${SOURCE}) add_dependencies(dnsapi psdk) diff --git a/reactos/dll/win32/olesvr32/CMakeLists.txt b/reactos/dll/win32/olesvr32/CMakeLists.txt index a50cfd70edc..dbfc68a3ef4 100644 --- a/reactos/dll/win32/olesvr32/CMakeLists.txt +++ b/reactos/dll/win32/olesvr32/CMakeLists.txt @@ -13,9 +13,7 @@ add_library(olesvr32 SHARED ${SOURCE}) set_entrypoint(olesvr32 0) -target_link_libraries(olesvr32 - wine - mingw_common) +target_link_libraries(olesvr32 wine) add_importlibs(olesvr32 kernel32 ntdll) add_dependencies(olesvr32 psdk) diff --git a/reactos/dll/win32/winemp3.acm/CMakeLists.txt b/reactos/dll/win32/winemp3.acm/CMakeLists.txt index 44b35f18022..e948366308d 100644 --- a/reactos/dll/win32/winemp3.acm/CMakeLists.txt +++ b/reactos/dll/win32/winemp3.acm/CMakeLists.txt @@ -18,7 +18,6 @@ set_entrypoint(winemp3.acm 0) set_target_properties(winemp3.acm PROPERTIES SUFFIX "") target_link_libraries(winemp3.acm - mingw_common wine libmpg123) diff --git a/reactos/lib/sdk/crt/CMakeLists.txt b/reactos/lib/sdk/crt/CMakeLists.txt index da0459d6103..663b57292c4 100644 --- a/reactos/lib/sdk/crt/CMakeLists.txt +++ b/reactos/lib/sdk/crt/CMakeLists.txt @@ -8,18 +8,6 @@ include(libcntpr.cmake) include(msvcrtex.cmake) include(oldnames.cmake) -if(MSVC) -# This is a temporary solution until we have proper crt libs - list(APPEND MSVCSUP_SOURCE - misc/fltused.c - except/i386/chkstk_asm.s - math/i386/ci.c - math/i386/ftol2_asm.S) - - add_library(msvcsup ${MSVCSUP_SOURCE}) - add_dependencies(msvcsup psdk asm) -endif() - add_library(user32_wsprintf printf/streamout.c printf/wstreamout.c diff --git a/reactos/lib/sdk/crt/misc/ofmt_stub.c b/reactos/lib/sdk/crt/misc/ofmt_stub.c new file mode 100644 index 00000000000..73e206dcf2b --- /dev/null +++ b/reactos/lib/sdk/crt/misc/ofmt_stub.c @@ -0,0 +1,6 @@ + +int _get_output_format(void) +{ + return 0; +} + diff --git a/reactos/lib/sdk/crt/msvcrtex.cmake b/reactos/lib/sdk/crt/msvcrtex.cmake index 461fd212849..ece7f959dd0 100644 --- a/reactos/lib/sdk/crt/msvcrtex.cmake +++ b/reactos/lib/sdk/crt/msvcrtex.cmake @@ -8,6 +8,7 @@ endif() list(APPEND MSVCRTEX_SOURCE startup/crtexe.c startup/wcrtexe.c + startup/crtdll.c startup/_newmode.c startup/wildcard.c startup/tlssup.c @@ -18,6 +19,7 @@ list(APPEND MSVCRTEX_SOURCE startup/atonexit.c startup/txtmode.c startup/pseudo-reloc.c + startup/pseudo-reloc-list.c startup/tlsmcrt.c startup/tlsthrd.c startup/tlsmthread.c @@ -28,10 +30,20 @@ list(APPEND MSVCRTEX_SOURCE startup/wdllargv.c startup/crt0_c.c startup/crt0_w.c - + startup/dllentry.c misc/fltused.c + misc/ofmt_stub.c ) +if(ARCH MATCHES i386) +list(APPEND MSVCRTEX_SOURCE + except/i386/chkstk_asm.s + math/i386/ci.c + math/i386/ftol2_asm.S + math/i386/alldiv_asm.s +) +endif() + if(MSVC) list(APPEND MSVCRTEX_SOURCE startup/mscmain.c) else() @@ -40,6 +52,7 @@ endif() add_library(msvcrtex ${MSVCRTEX_SOURCE}) set_target_properties(msvcrtex PROPERTIES COMPILE_DEFINITIONS _M_CEE_PURE) +set_source_files_properties(startup/crtdll.c PROPERTIES COMPILE_DEFINITIONS CRTDLL) if(NOT MSVC) target_link_libraries(msvcrtex oldnames) diff --git a/reactos/lib/sdk/crt/startup/crtdll.c b/reactos/lib/sdk/crt/startup/crtdll.c new file mode 100644 index 00000000000..001cbd7358f --- /dev/null +++ b/reactos/lib/sdk/crt/startup/crtdll.c @@ -0,0 +1,215 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#ifdef CRTDLL +#undef CRTDLL +#ifndef _DLL +#define _DLL +#endif + +#include +#include +#include +#include +#define _DECL_DLLMAIN +#include +#include + +#ifndef _CRTIMP +#ifdef CRTDLL +#define _CRTIMP __declspec(dllexport) +#else +#ifdef _DLL +#define _CRTIMP __declspec(dllimport) +#else +#define _CRTIMP +#endif +#endif +#endif +#include +#include + +extern void __cdecl _initterm(_PVFV *,_PVFV *); +extern void __main (); +extern void _pei386_runtime_relocator (void); +extern _CRTALLOC(".CRT$XIA") _PIFV __xi_a[]; +extern _CRTALLOC(".CRT$XIZ") _PIFV __xi_z[]; +extern _CRTALLOC(".CRT$XCA") _PVFV __xc_a[]; +extern _CRTALLOC(".CRT$XCZ") _PVFV __xc_z[]; + +/* TLS initialization hook. */ +extern const PIMAGE_TLS_CALLBACK __dyn_tls_init_callback; + +static int __proc_attached = 0; + +extern _PVFV *__onexitbegin; +extern _PVFV *__onexitend; + +extern int mingw_app_type; + +extern WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved); + +extern WINBOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID); + +static int pre_c_init (void); + +_CRTALLOC(".CRT$XIAA") _PIFV pcinit = pre_c_init; + +static int +pre_c_init (void) +{ + _PVFV *onexitbegin; + + onexitbegin = (_PVFV *) malloc (32 * sizeof (_PVFV)); + __onexitend = __onexitbegin = (_PVFV *) _encode_pointer (onexitbegin); + + if (onexitbegin == NULL) + return 1; + *onexitbegin = (_PVFV) NULL; + return 0; +} + +WINBOOL WINAPI _CRT_INIT (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +{ + if (dwReason == DLL_PROCESS_DETACH) + { + if (__proc_attached > 0) + __proc_attached--; + else + return FALSE; + } + if (dwReason == DLL_PROCESS_ATTACH) + { + void *lock_free = NULL; + void *fiberid = ((PNT_TIB)NtCurrentTeb ())->StackBase; + int nested = FALSE; + + while ((lock_free = InterlockedCompareExchangePointer ((volatile PVOID *) &__native_startup_lock, + fiberid, 0)) != 0) + { + if (lock_free == fiberid) + { + nested = TRUE; + break; + } + Sleep(1000); + } + if (__native_startup_state != __uninitialized) + { + _amsg_exit(31); + } + else + { + __native_startup_state = __initializing; + + _initterm ((_PVFV *) (void *) __xi_a, (_PVFV *) (void *) __xi_z); + _initterm (__xc_a,__xc_z); + __native_startup_state = __initialized; + } + if (! nested) + { + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + } + if (__dyn_tls_init_callback != NULL) + { + __dyn_tls_init_callback (hDllHandle, DLL_THREAD_ATTACH, lpreserved); + } + __proc_attached++; + } + else if (dwReason == DLL_PROCESS_DETACH) + { + void *lock_free = NULL; + while ((lock_free = InterlockedCompareExchangePointer ((volatile PVOID *) &__native_startup_lock,(PVOID) 1, 0)) != 0) + { + Sleep(1000); + } + if(__native_startup_state!=__initialized) + { + _amsg_exit (31); + } + else + { + _PVFV * onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); + if (onexitbegin) + { + _PVFV *onexitend = (_PVFV *) _decode_pointer (__onexitend); + while (--onexitend >= onexitbegin) + if (*onexitend != NULL) + (**onexitend) (); + free (onexitbegin); + __onexitbegin = __onexitend = (_PVFV *) NULL; + } + __native_startup_state = __uninitialized; + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + } + } + return TRUE; +} + +static WINBOOL __DllMainCRTStartup (HANDLE, DWORD, LPVOID); + +WINBOOL WINAPI DllMainCRTStartup (HANDLE, DWORD, LPVOID); +int __mingw_init_ehandler (void); + +WINBOOL WINAPI +DllMainCRTStartup (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +{ + mingw_app_type = 0; + if (dwReason == DLL_PROCESS_ATTACH) + { + __security_init_cookie (); +#ifdef _WIN64 + __mingw_init_ehandler (); +#endif + } + return __DllMainCRTStartup (hDllHandle, dwReason, lpreserved); +} + +__declspec(noinline) WINBOOL +__DllMainCRTStartup (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +{ + WINBOOL retcode = TRUE; + + __native_dllmain_reason = dwReason; + if (dwReason == DLL_PROCESS_DETACH && __proc_attached == 0) + { + retcode = FALSE; + goto i__leave; + } + _pei386_runtime_relocator (); + if (dwReason == DLL_PROCESS_ATTACH || dwReason == DLL_THREAD_ATTACH) + { + retcode = _CRT_INIT (hDllHandle, dwReason, lpreserved); + if (!retcode) + goto i__leave; + retcode = DllEntryPoint (hDllHandle, dwReason, lpreserved); + if (! retcode) + { + if (dwReason == DLL_PROCESS_ATTACH) + _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved); + goto i__leave; + } + } + if (dwReason == DLL_PROCESS_ATTACH) + __main (); + retcode = DllMain(hDllHandle,dwReason,lpreserved); + if (dwReason == DLL_PROCESS_ATTACH && ! retcode) + { + DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved); + DllEntryPoint (hDllHandle, DLL_PROCESS_DETACH, lpreserved); + _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved); + } + if (dwReason == DLL_PROCESS_DETACH || dwReason == DLL_THREAD_DETACH) + { + retcode = DllEntryPoint (hDllHandle, dwReason, lpreserved); + if (_CRT_INIT (hDllHandle, dwReason, lpreserved) == FALSE) + retcode = FALSE; + } +i__leave: + __native_dllmain_reason = UINT_MAX; + return retcode ; +} +#endif diff --git a/reactos/lib/sdk/crt/startup/crtexe.c b/reactos/lib/sdk/crt/startup/crtexe.c index daab5cd5984..6bee420c8dc 100644 --- a/reactos/lib/sdk/crt/startup/crtexe.c +++ b/reactos/lib/sdk/crt/startup/crtexe.c @@ -56,7 +56,7 @@ extern int _dowildcard; #if defined(__GNUC__) int _MINGW_INSTALL_DEBUG_MATHERR __attribute__((weak)) = 0; #else -int _MINGW_INSTALL_DEBUG_MATHERR = 0; +int __declspec(selectany) _MINGW_INSTALL_DEBUG_MATHERR = 0; #endif extern int __defaultmatherr; extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *); @@ -108,8 +108,8 @@ static void duplicate_ppstrings (int ac, char ***av); static int __cdecl pre_c_init (void); static void __cdecl pre_cpp_init (void); static void __cdecl __mingw_prepare_except_for_msvcr80_and_higher (void); -_CRTALLOC(".CRT$XIAA") _PIFV mingw_pcinit = pre_c_init; -_CRTALLOC(".CRT$XCAA") _PVFV mingw_pcppinit = pre_cpp_init; +_CRTALLOC(".CRT$XIAA") _PIFV __declspec(selectany) mingw_pcinit = pre_c_init; +_CRTALLOC(".CRT$XCAA") _PVFV __declspec(selectany) mingw_pcppinit = pre_cpp_init; static int __cdecl pre_c_init (void) diff --git a/reactos/lib/sdk/crt/startup/dllentry.c b/reactos/lib/sdk/crt/startup/dllentry.c new file mode 100644 index 00000000000..d2ed1b57315 --- /dev/null +++ b/reactos/lib/sdk/crt/startup/dllentry.c @@ -0,0 +1,18 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#include +#define _DECL_DLLMAIN +#include + +BOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID); + +BOOL WINAPI DllEntryPoint (HANDLE __UNUSED_PARAM(hDllHandle), + DWORD __UNUSED_PARAM(dwReason), + LPVOID __UNUSED_PARAM(lpreserved)) +{ + return TRUE; +} diff --git a/reactos/lib/sdk/crt/startup/pseudo-reloc-list.c b/reactos/lib/sdk/crt/startup/pseudo-reloc-list.c new file mode 100644 index 00000000000..4ce46bbb29b --- /dev/null +++ b/reactos/lib/sdk/crt/startup/pseudo-reloc-list.c @@ -0,0 +1,8 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +char __RUNTIME_PSEUDO_RELOC_LIST_END__ = 0; +char __RUNTIME_PSEUDO_RELOC_LIST__ = 0; diff --git a/reactos/msc.cmake b/reactos/msc.cmake index 66558a6882a..1b1b2988b96 100644 --- a/reactos/msc.cmake +++ b/reactos/msc.cmake @@ -26,7 +26,7 @@ if(${ARCH} MATCHES amd64) add_definitions(-D__x86_64) endif() -link_directories("${REACTOS_BINARY_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/3rdparty/mingw) +link_directories("${REACTOS_BINARY_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/sdk/crt) set(CMAKE_RC_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY}) set(CMAKE_ASM_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY}) @@ -70,28 +70,21 @@ macro(set_module_type MODULE TYPE) if(${TYPE} MATCHES nativecui) set_subsystem(${MODULE} native) set_entrypoint(${MODULE} NtProcessStartup@4) - endif() - if (${TYPE} MATCHES win32gui) + elseif (${TYPE} MATCHES win32gui) set_subsystem(${MODULE} windows) - set_entrypoint(${MODULE} WinMainCRTStartup) if(IS_UNICODE) - target_link_libraries(${MODULE} mingw_wmain) + set_entrypoint(${MODULE} wWinMainCRTStartup) else() - target_link_libraries(${MODULE} mingw_main) - endif() - target_link_libraries(${MODULE} mingw_common msvcsup) - endif () - if (${TYPE} MATCHES win32cui) + set_entrypoint(${MODULE} WinMainCRTStartup) + endif(IS_UNICODE) + elseif (${TYPE} MATCHES win32cui) set_subsystem(${MODULE} console) - set_entrypoint(${MODULE} mainCRTStartup) if(IS_UNICODE) - target_link_libraries(${MODULE} mingw_wmain) + set_entrypoint(${MODULE} wmainCRTStartup) else() - target_link_libraries(${MODULE} mingw_main) - endif() - target_link_libraries(${MODULE} mingw_common msvcsup) - endif () - if(${TYPE} MATCHES win32dll) + set_entrypoint(${MODULE} mainCRTStartup) + endif(IS_UNICODE) + elseif(${TYPE} MATCHES win32dll) # Need this only because mingw library is broken set_entrypoint(${MODULE} DllMainCRTStartup@12) if(DEFINED baseaddress_${MODULE}) @@ -99,29 +92,23 @@ macro(set_module_type MODULE TYPE) else() message(STATUS "${MODULE} has no base address") endif() - target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) add_linkerflag(${MODULE} "/DLL") - endif() - if(${TYPE} MATCHES win32ocx) + elseif(${TYPE} MATCHES win32ocx) set_entrypoint(${MODULE} DllMainCRTStartup@12) set_target_properties(${MODULE} PROPERTIES SUFFIX ".ocx") - target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) add_linkerflag(${MODULE} "/DLL") - endif() - if(${TYPE} MATCHES cpl) + elseif(${TYPE} MATCHES cpl) set_entrypoint(${MODULE} DllMainCRTStartup@12) set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl") - target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) add_linkerflag(${MODULE} "/DLL") - endif() - if(${TYPE} MATCHES kernelmodedriver) + elseif(${TYPE} MATCHES kernelmodedriver) set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys") set_entrypoint(${MODULE} DriverEntry@8) set_subsystem(${MODULE} native) set_image_base(${MODULE} 0x00010000) add_linkerflag(${MODULE} "/DRIVER") add_dependencies(${MODULE} bugcodes) - target_link_libraries(${MODULE} msvcsup) + target_link_libraries(${MODULE}) endif() endmacro() @@ -182,6 +169,9 @@ endmacro() macro(add_importlibs MODULE) foreach(LIB ${ARGN}) + if ("${LIB}" MATCHES "msvcrt") + target_link_libraries(${MODULE} msvcrtex) + endif() target_link_libraries(${MODULE} ${CMAKE_BINARY_DIR}/importlibs/lib${LIB}.lib) add_dependencies(${MODULE} lib${LIB}) endforeach() diff --git a/reactos/subsystems/ntvdm/CMakeLists.txt b/reactos/subsystems/ntvdm/CMakeLists.txt index a64fd05ee4e..2346970488e 100644 --- a/reactos/subsystems/ntvdm/CMakeLists.txt +++ b/reactos/subsystems/ntvdm/CMakeLists.txt @@ -9,11 +9,7 @@ add_executable(ntvdm set_module_type(ntvdm win32cui) -target_link_libraries(ntvdm - mingw_main - mingw_common) - -add_importlibs(ntvdm ntdll user32 gdi32 advapi32 kernel32 msvcrt) +add_importlibs(ntvdm ntdll user32 gdi32 advapi32 msvcrt kernel32) add_dependencies(ntvdm ndk bugcodes) -add_cd_file(TARGET ntvdm DESTINATION reactos/system32 FOR all) \ No newline at end of file +add_cd_file(TARGET ntvdm DESTINATION reactos/system32 FOR all)