- handle stdcall decoration in MSVC set_entrypoint

svn path=/trunk/; revision=53337
This commit is contained in:
Timo Kreuzer 2011-08-20 12:29:51 +00:00
parent 1810920919
commit d34a623b35

View file

@ -59,11 +59,17 @@ set(CMAKE_ASM_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY})
macro(add_pch _target_name _FILE) macro(add_pch _target_name _FILE)
endmacro() endmacro()
function(set_entrypoint MODULE ENTRYPOINT) function(set_entrypoint _module _entrypoint)
if(${ENTRYPOINT} STREQUAL "0") if(${_entrypoint} STREQUAL "0")
add_linkerflag(${MODULE} "/NOENTRY") add_linkerflag(${_module} "/NOENTRY")
elseif(ARCH MATCHES i386)
set(_entrysymbol ${_entrypoint})
if (${ARGC} GREATER 2)
set(_entrysymbol ${_entrysymbol}@${ARGV2})
endif()
add_linkerflag(${_module} "/ENTRY:${_entrysymbol}")
else() else()
add_linkerflag(${MODULE} "/ENTRY:${ENTRYPOINT}") add_linkerflag(${_module} "/ENTRY:${_entrypoint}")
endif() endif()
endfunction() endfunction()
@ -79,7 +85,7 @@ function(set_module_type MODULE TYPE)
add_dependencies(${MODULE} psdk) add_dependencies(${MODULE} psdk)
if(${TYPE} MATCHES nativecui) if(${TYPE} MATCHES nativecui)
set_subsystem(${MODULE} native) set_subsystem(${MODULE} native)
set_entrypoint(${MODULE} NtProcessStartup@4) set_entrypoint(${MODULE} NtProcessStartup 4)
elseif (${TYPE} MATCHES win32gui) elseif (${TYPE} MATCHES win32gui)
set_subsystem(${MODULE} windows) set_subsystem(${MODULE} windows)
if(IS_UNICODE) if(IS_UNICODE)
@ -96,7 +102,7 @@ function(set_module_type MODULE TYPE)
endif(IS_UNICODE) endif(IS_UNICODE)
elseif(${TYPE} MATCHES win32dll) elseif(${TYPE} MATCHES win32dll)
# Need this only because mingw library is broken # Need this only because mingw library is broken
set_entrypoint(${MODULE} DllMainCRTStartup@12) set_entrypoint(${MODULE} DllMainCRTStartup 12)
if(DEFINED baseaddress_${MODULE}) if(DEFINED baseaddress_${MODULE})
set_image_base(${MODULE} ${baseaddress_${MODULE}}) set_image_base(${MODULE} ${baseaddress_${MODULE}})
else() else()
@ -104,16 +110,16 @@ function(set_module_type MODULE TYPE)
endif() endif()
add_linkerflag(${MODULE} "/DLL") add_linkerflag(${MODULE} "/DLL")
elseif(${TYPE} MATCHES win32ocx) elseif(${TYPE} MATCHES win32ocx)
set_entrypoint(${MODULE} DllMainCRTStartup@12) set_entrypoint(${MODULE} DllMainCRTStartup 12)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".ocx") set_target_properties(${MODULE} PROPERTIES SUFFIX ".ocx")
add_linkerflag(${MODULE} "/DLL") add_linkerflag(${MODULE} "/DLL")
elseif(${TYPE} MATCHES cpl) elseif(${TYPE} MATCHES cpl)
set_entrypoint(${MODULE} DllMainCRTStartup@12) set_entrypoint(${MODULE} DllMainCRTStartup 12)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl") set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl")
add_linkerflag(${MODULE} "/DLL") add_linkerflag(${MODULE} "/DLL")
elseif(${TYPE} MATCHES kernelmodedriver) elseif(${TYPE} MATCHES kernelmodedriver)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys") set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys")
set_entrypoint(${MODULE} DriverEntry@8) set_entrypoint(${MODULE} DriverEntry 8)
set_subsystem(${MODULE} native) set_subsystem(${MODULE} native)
set_image_base(${MODULE} 0x00010000) set_image_base(${MODULE} 0x00010000)
add_linkerflag(${MODULE} "/DRIVER") add_linkerflag(${MODULE} "/DRIVER")