- Improve the warnings and compiler flags according to the different architectures we have.

svn path=/branches/cmake-bringup/; revision=50340
This commit is contained in:
Amine Khaldi 2011-01-09 16:49:10 +00:00
parent acf11aa2c7
commit 4bb42765f5
3 changed files with 74 additions and 30 deletions

View file

@ -12,7 +12,7 @@ set(OARCH "pentium" CACHE STRING
set(TUNE "i686" CACHE STRING set(TUNE "i686" CACHE STRING
"Which CPU ReactOS should be optimized for.") "Which CPU ReactOS should be optimized for.")
set (OPTIMIZE "1" CACHE STRING set(OPTIMIZE "1" CACHE STRING
"What level of optimisation to use. "What level of optimisation to use.
0 = off 0 = off
1 = Default option, optimize for size (-Os) with some additional options 1 = Default option, optimize for size (-Os) with some additional options

View file

@ -27,18 +27,53 @@ else()
endif() endif()
# Warnings # Warnings
add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-error=uninitialized -Wno-unused-value -Winvalid-pch) add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-error=uninitialized -Wno-unused-value -Winvalid-pch)
if(ARCH MATCHES amd64)
add_definitions(-Wno-format)
elseif(ARCH MATCHES arm)
add_definitions(-Wno-attributes)
endif()
# Optimizations # Optimizations
if(OPTIMIZE STREQUAL "1")
add_definitions(-Os)
elseif(OPTIMIZE STREQUAL "2")
add_definitions(-Os)
elseif(OPTIMIZE STREQUAL "3")
add_definitions(-O1)
elseif(OPTIMIZE STREQUAL "4")
add_definitions(-O2)
elseif(OPTIMIZE STREQUAL "5")
add_definitions(-O3)
endif()
add_definitions(-fno-strict-aliasing)
if(ARCH MATCHES i386) if(ARCH MATCHES i386)
add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls) add_definitions(-mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls)
if(OPTIMIZE STREQUAL "1")
add_definitions(-ftracer -momit-leaf-frame-pointer)
endif()
elseif(ARCH MATCHES amd64) elseif(ARCH MATCHES amd64)
add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=4) add_definitions(-mpreferred-stack-boundary=4)
if(OPTIMIZE STREQUAL "1")
add_definitions(-ftracer -momit-leaf-frame-pointer)
endif()
elseif(ARCH MATCHES arm)
if(OPTIMIZE STREQUAL "1")
add_definitions(-ftracer)
endif()
endif() endif()
# Other # Other
if(ARCH MATCHES amd64) if(ARCH MATCHES amd64)
add_definitions(-U_X86_ -UWIN32) add_definitions(-U_X86_ -UWIN32)
elseif(ARCH MATCHES arm)
add_definitions(-U_UNICODE -UUNICODE)
add_definitions(-D__MSVCRT__) # DUBIOUS
endif() endif()
# alternative arch name # alternative arch name
@ -280,4 +315,4 @@ endmacro()
#pseh lib, needed with mingw #pseh lib, needed with mingw
set(PSEH_LIB "pseh") set(PSEH_LIB "pseh")
endif() endif(CMAKE_CROSSCOMPILING)

View file

@ -5,31 +5,41 @@ endif()
add_definitions(-Dinline=__inline) add_definitions(-Dinline=__inline)
if(NOT CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
else() 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()
add_definitions(/GS- /Zl /Zi) add_definitions(/GS- /Zl /Zi)
add_definitions(-Dinline=__inline -D__STDC__=1) add_definitions(-Dinline=__inline -D__STDC__=1)
IF(${_MACHINE_ARCH_FLAG} MATCHES X86) if(${_MACHINE_ARCH_FLAG} MATCHES X86)
SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_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") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
ENDIF() endif()
link_directories("${REACTOS_BINARY_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/3rdparty/mingw) link_directories("${REACTOS_BINARY_DIR}/importlibs" ${REACTOS_BINARY_DIR}/lib/3rdparty/mingw)
set(CMAKE_RC_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") set(CMAKE_RC_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
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) get_filename_component(FILE ${_header_filename} NAME)
set(_gch_filename "${_target_name}_${FILE}.gch") set(_gch_filename "${_target_name}_${FILE}.gch")
add_custom_command( add_custom_command(
OUTPUT ${_gch_filename} OUTPUT ${_gch_filename}
COMMAND echo Ignoring precompiled header COMMAND echo Ignoring precompiled header
DEPENDS ${_header_filename}) DEPENDS ${_header_filename})
ENDMACRO(add_pch _target_name _header_filename _src_list) endmacro()
macro(add_linkerflag MODULE _flag) macro(add_linkerflag MODULE _flag)
set(NEW_LINKER_FLAGS ${_flag}) set(NEW_LINKER_FLAGS ${_flag})
@ -70,7 +80,7 @@ macro(set_module_type MODULE TYPE)
else() else()
target_link_libraries(${MODULE} mingw_main) target_link_libraries(${MODULE} mingw_main)
endif() endif()
target_link_libraries(${MODULE} mingw_common msvcsup) target_link_libraries(${MODULE} mingw_common msvcsup)
endif () endif ()
if (${TYPE} MATCHES win32cui) if (${TYPE} MATCHES win32cui)
set_subsystem(${MODULE} console) set_subsystem(${MODULE} console)
@ -80,17 +90,17 @@ macro(set_module_type MODULE TYPE)
else() else()
target_link_libraries(${MODULE} mingw_main) target_link_libraries(${MODULE} mingw_main)
endif() endif()
target_link_libraries(${MODULE} mingw_common msvcsup) target_link_libraries(${MODULE} mingw_common msvcsup)
endif () endif ()
if(${TYPE} MATCHES win32dll) if(${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()
message(STATUS "${MODULE} has no base address") message(STATUS "${MODULE} has no base address")
endif() endif()
target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup)
add_linkerflag(${MODULE} "/DLL") add_linkerflag(${MODULE} "/DLL")
endif() endif()
if(${TYPE} MATCHES win32ocx) if(${TYPE} MATCHES win32ocx)
@ -105,15 +115,14 @@ macro(set_module_type MODULE TYPE)
target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup) target_link_libraries(${MODULE} mingw_common mingw_dllmain msvcsup)
add_linkerflag(${MODULE} "/DLL") add_linkerflag(${MODULE} "/DLL")
endif() endif()
if(${TYPE} MATCHES kernelmodedriver) if(${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")
add_dependencies(${MODULE} bugcodes) add_dependencies(${MODULE} bugcodes)
endif() endif()
endmacro() endmacro()
macro(set_unicode) macro(set_unicode)
@ -213,4 +222,4 @@ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/importlibs)
#pseh workaround #pseh workaround
set(PSEH_LIB "") set(PSEH_LIB "")
endif() endif(CMAKE_CROSSCOMPILING)