X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=msc.cmake;h=864eea0c4fe77bac9b44392cc9ecb66918f81407;hp=cf122410f9dbfaf8ddc6f64e98c1e22bbfa2687f;hb=9cc4f5ceeeaff1e0ab88b6aab373d31ca26e229e;hpb=152b92b9288e067d674768be4f3bd9679b76e10f diff --git a/msc.cmake b/msc.cmake index cf122410f9d..864eea0c4fe 100644 --- a/msc.cmake +++ b/msc.cmake @@ -1,35 +1,43 @@ -if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86") - add_definitions(-D__i386__) +if(0) # Fixme redefinition warning +if(OPTIMIZE STREQUAL "1") + add_definitions(/O1) +elseif(OPTIMIZE STREQUAL "2") + add_definitions(/O2) +elseif(OPTIMIZE STREQUAL "3") + add_definitions(/Ot /Ox /GS-) +elseif(OPTIMIZE STREQUAL "4") + add_definitions(/Os /Ox /GS-) +elseif(OPTIMIZE STREQUAL "5") + add_definitions(/GF /Gy /Ob2 /Os /Ox /GS-) +endif() endif() -add_definitions(-Dinline=__inline) - -if(NOT CMAKE_CROSSCOMPILING) - -else() - -add_definitions(/GS- /Zl /Zi) +add_definitions(/X /GS- /Zl /Zi) add_definitions(-Dinline=__inline -D__STDC__=1) -IF(${_MACHINE_ARCH_FLAG} MATCHES X86) - SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") - SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") - SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO") -ENDIF() +if(${_MACHINE_ARCH_FLAG} MATCHES X86) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO") +endif() + +if(${ARCH} MATCHES amd64) + add_definitions(-D__x86_64) +endif() link_directories("${REACTOS_BINARY_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/3rdparty/mingw) set(CMAKE_RC_CREATE_SHARED_LIBRARY " -o ") -MACRO(add_pch _target_name _header_filename _src_list) +macro(add_pch _target_name _header_filename _src_list) get_filename_component(FILE ${_header_filename} NAME) set(_gch_filename "${_target_name}_${FILE}.gch") add_custom_command( OUTPUT ${_gch_filename} COMMAND echo Ignoring precompiled header DEPENDS ${_header_filename}) -ENDMACRO(add_pch _target_name _header_filename _src_list) +endmacro() macro(add_linkerflag MODULE _flag) set(NEW_LINKER_FLAGS ${_flag}) @@ -70,7 +78,7 @@ macro(set_module_type MODULE TYPE) else() target_link_libraries(${MODULE} mingw_main) endif() - target_link_libraries(${MODULE} mingw_common msvcsup) + target_link_libraries(${MODULE} mingw_common msvcsup) endif () if (${TYPE} MATCHES win32cui) set_subsystem(${MODULE} console) @@ -80,17 +88,17 @@ macro(set_module_type MODULE TYPE) else() target_link_libraries(${MODULE} mingw_main) endif() - target_link_libraries(${MODULE} mingw_common msvcsup) + target_link_libraries(${MODULE} mingw_common msvcsup) endif () if(${TYPE} MATCHES win32dll) # Need this only because mingw library is broken set_entrypoint(${MODULE} DllMainCRTStartup@12) - if(DEFINED baseaddress_${MODULE}) - set_image_base(${MODULE} ${baseaddress_${MODULE}}) - else() - message(STATUS "${MODULE} has no base address") - endif() - target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) + if(DEFINED baseaddress_${MODULE}) + set_image_base(${MODULE} ${baseaddress_${MODULE}}) + 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) @@ -105,15 +113,15 @@ macro(set_module_type MODULE TYPE) target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) add_linkerflag(${MODULE} "/DLL") endif() - if(${TYPE} MATCHES kernelmodedriver) - set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys") - set_entrypoint(${MODULE} DriverEntry@8) - set_subsystem(${MODULE} native) + if(${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) - endif() - + add_dependencies(${MODULE} bugcodes) + target_link_libraries(${MODULE} msvcsup) + endif() endmacro() macro(set_unicode) @@ -128,30 +136,29 @@ macro(set_rc_compiler) # dummy, this workaround is only needed in mingw due to lack of RC support in cmake endmacro() -#idl files support -set(IDL_COMPILER midl) -set(IDL_FLAGS /win32) -set(IDL_HEADER_ARG /h) #.h -set(IDL_TYPELIB_ARG /tlb) #.tlb -set(IDL_SERVER_ARG /sstub) #.c for stub server library -set(IDL_CLIENT_ARG /cstub) #.c for stub client library -set(IDL_PROXY_ARG /proxy) -set(IDL_DLLDATA_ARG /dlldata ) - # Thanks MS for creating a stupid linker macro(add_importlib_target _exports_file) get_filename_component(_name ${_exports_file} NAME_WE) + get_target_property(_suffix ${_name} SUFFIX) + if(${_suffix} STREQUAL "_suffix-NOTFOUND") + get_target_property(_type ${_name} TYPE) + if(${_type} MATCHES EXECUTABLE) + set(_suffix ".exe") + else() + set(_suffix ".dll") + endif() + endif() # Generate the asm stub file and the export def file add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def - COMMAND native-spec2def -@ -r -d=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def -l=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file} + COMMAND native-spec2def --ms --kill-at -r -n=${_name}${_suffix} -d=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def -l=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}) # Assemble the stub file add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj - COMMAND ${CMAKE_ASM_COMPILER} /nologo /Fo${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj /c /Ta ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm + COMMAND ${CMAKE_ASM_COMPILER} /nologo /Cp /Fo${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj /c /Ta ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm DEPENDS "${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm") # Add neccessary importlibs for redirections @@ -171,7 +178,7 @@ macro(add_importlib_target _exports_file) add_custom_target( lib${_name} DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib) - + add_dependencies(lib${_name} asm ${_dependencies}) endmacro() @@ -186,31 +193,18 @@ macro(spec2def _dllname _spec_file) get_filename_component(_file ${_spec_file} NAME_WE) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c - COMMAND native-spec2def -@ -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + COMMAND native-spec2def --ms --kill-at -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file}) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c PROPERTIES GENERATED TRUE) - list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c) -endmacro() - -# Optional 3rd parameter: dllname -macro(set_export_spec _module _spec_file) - get_filename_component(_file ${_spec_file} NAME_WE) - if (${ARGC} GREATER 2) - set(_dllname ${ARGV2}) - else() - set(_dllname ${_file}.dll) - endif() - spec2def(${_dllname} ${_spec_file}) endmacro() macro(macro_mc FILE) - set(COMMAND_MC mc -r ${REACTOS_BINARY_DIR}/include/reactos -h ${REACTOS_BINARY_DIR}/include/reactos ${REACTOS_SOURCE_DIR}/include/reactos/mc/${FILE}.mc) + set(COMMAND_MC mc -r ${REACTOS_BINARY_DIR}/include/reactos -h ${REACTOS_BINARY_DIR}/include/reactos ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.mc) endmacro() file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/importlibs) #pseh workaround -set(PSEH_LIB "") +set(PSEH_LIB "pseh") -endif()