Author: tfaber
Date: Sat Sep 3 14:57:27 2011
New Revision: 53545
URL:
http://svn.reactos.org/svn/reactos?rev=53545&view=rev
Log:
[CMAKE]
- Add add_target_property macro and add wrapper macros to easily set important properties
- This makes macros more consistent, follows CMake property names, favors per-target
instead of per-directory property settings and favors adding to properties instead of
replacing them
- Convert the global settings to use the new add_compile_flags and add_target_link_flags -
no functional change
- Fix add_importlibs to add to compile definitions instead of replacing them
- Big thanks to Amine
Modified:
trunk/reactos/cmake/CMakeMacros.cmake
trunk/reactos/cmake/compilerflags.cmake
trunk/reactos/cmake/gcc.cmake
trunk/reactos/cmake/msvc.cmake
Modified: trunk/reactos/cmake/CMakeMacros.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/CMakeMacros.cmake?re…
==============================================================================
--- trunk/reactos/cmake/CMakeMacros.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/CMakeMacros.cmake [iso-8859-1] Sat Sep 3 14:57:27 2011
@@ -231,7 +231,7 @@
add_dependency_node(${_module})
foreach(LIB ${ARGN})
if ("${LIB}" MATCHES "msvcrt")
- add_definitions(-D_DLL -D__USE_CRTIMP)
+ add_target_compile_definitions(${_module} _DLL __USE_CRTIMP)
target_link_libraries(${_module} msvcrtex)
endif()
target_link_libraries(${_module}
${CMAKE_BINARY_DIR}/importlibs/lib${LIB}${CMAKE_STATIC_LIBRARY_SUFFIX})
Modified: trunk/reactos/cmake/compilerflags.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/compilerflags.cmake?…
==============================================================================
--- trunk/reactos/cmake/compilerflags.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/compilerflags.cmake [iso-8859-1] Sat Sep 3 14:57:27 2011
@@ -1,4 +1,32 @@
+# add_target_property
+# Adds one or more values to the specified property of the specified target.
+# Note that there are properties which require (semicolon-separated) lists,
+# while others require space-separated strings. The function has a list of
+# properties of the former variety and handles the values accordingly
+function(add_target_property _module _propname)
+ list(APPEND _list_properties COMPILE_DEFINITIONS INCLUDE_DIRECTORIES)
+ set(_newvalue "")
+ get_target_property(_oldvalue ${_module} ${_propname})
+ if (_oldvalue)
+ set(_newvalue ${_oldvalue})
+ endif()
+ list(FIND _list_properties ${_propname} _list_index)
+ if (NOT _list_index EQUAL -1)
+ # list property
+ list(APPEND _newvalue ${ARGN})
+ else()
+ # string property
+ foreach(_flag ${ARGN})
+ set(_newvalue "${_newvalue} ${_flag}")
+ endforeach()
+ endif()
+ set_property(TARGET ${_module} PROPERTY ${_propname} ${_newvalue})
+endfunction()
+
+#
+# For backwards compatibility. To be removed soon.
+#
function(add_compiler_flags)
set(flags_list "")
# Adds the compiler flag to both CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
@@ -6,11 +34,14 @@
set(flags_list "${flags_list} ${flag}")
endforeach()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flags_list}" PARENT_SCOPE)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flags_list}" PARENT_SCOPE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flags_list}" PARENT_SCOPE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flags_list}" PARENT_SCOPE)
endfunction()
function(add_linkerflag MODULE _flag)
+ if (${ARGC} GREATER 2)
+ message(STATUS "Excess arguments to add_linkerflag! Module ${MODULE}, args
${ARGN}")
+ endif()
set(NEW_LINKER_FLAGS ${_flag})
get_target_property(LINKER_FLAGS ${MODULE} LINK_FLAGS)
if(LINKER_FLAGS)
@@ -19,6 +50,48 @@
set_target_properties(${MODULE} PROPERTIES LINK_FLAGS ${NEW_LINKER_FLAGS})
endfunction()
+# New versions, using add_target_property where appropriate.
+# Note that the functions for string properties take a single string
+# argument while those for list properties can take a variable number of
+# arguments, all of which will be added to the list
+#
+# Examples:
+# add_compile_flags("-pedantic -O5")
+# add_target_link_flags(mymodule "-s --fatal-warnings")
+# add_target_compile_flags(mymodule "-pedantic -O5")
+# add_target_compile_definitions(mymodule WIN32 _WIN32)
+# add_target_include_directories(mymodule include ../include)
+function(add_compile_flags _flags)
+ if (${ARGC} GREATER 1)
+ message(STATUS "Excess arguments to add_compile_flags! Args ${ARGN}")
+ endif()
+ # Adds the compiler flag to both CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" PARENT_SCOPE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" PARENT_SCOPE)
+endfunction()
+
+function(add_target_compile_flags _module _flags)
+ if (${ARGC} GREATER 2)
+ message(STATUS "Excess arguments to add_target_compile_flags! Module
${_module}, args ${ARGN}")
+ endif()
+ add_target_property(${_module} COMPILE_FLAGS ${_flags})
+endfunction()
+
+function(add_target_link_flags _module _flags)
+ if (${ARGC} GREATER 2)
+ message(STATUS "Excess arguments to add_target_link_flags! Module
${_module}, args ${ARGN}")
+ endif()
+ add_target_property(${_module} LINK_FLAGS ${_flags})
+endfunction()
+
+function(add_target_compile_definitions _module)
+ add_target_property(${_module} COMPILE_DEFINITIONS ${ARGN})
+endfunction()
+
+function(add_target_include_directories _module)
+ add_target_property(${_module} INCLUDE_DIRECTORIES ${ARGN})
+endfunction()
+
macro(set_unicode)
add_definitions(-DUNICODE -D_UNICODE)
set(IS_UNICODE 1)
Modified: trunk/reactos/cmake/gcc.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/gcc.cmake?rev=53545&…
==============================================================================
--- trunk/reactos/cmake/gcc.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/gcc.cmake [iso-8859-1] Sat Sep 3 14:57:27 2011
@@ -1,54 +1,54 @@
# Compiler Core
-add_compiler_flags(-pipe -fms-extensions)
+add_compile_flags("-pipe -fms-extensions")
# Debugging (Note: DWARF-4 on 4.5.1 when we ship)
-add_compiler_flags(-gdwarf-2 -g2 -femit-struct-debug-detailed=none
-feliminate-unused-debug-types)
+add_compile_flags("-gdwarf-2 -g2 -femit-struct-debug-detailed=none
-feliminate-unused-debug-types")
# Tuning
if(ARCH MATCHES i386)
- add_compiler_flags(-march=${OARCH} -mtune=${TUNE})
+ add_compile_flags("-march=${OARCH} -mtune=${TUNE}")
else()
- add_compiler_flags(-march=${OARCH})
+ add_compile_flags("-march=${OARCH}")
endif()
# Warnings
-add_compiler_flags(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar
-Wno-error=uninitialized -Wno-unused-value -Winvalid-pch)
+add_compile_flags("-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar
-Wno-error=uninitialized -Wno-unused-value -Winvalid-pch")
if(ARCH MATCHES amd64)
- add_compiler_flags(-Wno-format)
+ add_compile_flags("-Wno-format")
elseif(ARCH MATCHES arm)
- add_compiler_flags(-Wno-attributes)
+ add_compile_flags("-Wno-attributes")
endif()
# Optimizations
if(OPTIMIZE STREQUAL "1")
- add_compiler_flags(-Os)
+ add_compile_flags("-Os")
elseif(OPTIMIZE STREQUAL "2")
- add_compiler_flags(-Os)
+ add_compile_flags("-Os")
elseif(OPTIMIZE STREQUAL "3")
- add_compiler_flags(-O1)
+ add_compile_flags("-O1")
elseif(OPTIMIZE STREQUAL "4")
- add_compiler_flags(-O2)
+ add_compile_flags("-O2")
elseif(OPTIMIZE STREQUAL "5")
- add_compiler_flags(-O3)
-endif()
-
-add_compiler_flags(-fno-strict-aliasing)
+ add_compile_flags("-O3")
+endif()
+
+add_compile_flags("-fno-strict-aliasing")
if(ARCH MATCHES i386)
- add_compiler_flags(-mpreferred-stack-boundary=2 -fno-set-stack-executable
-fno-optimize-sibling-calls -fno-omit-frame-pointer)
+ add_compile_flags("-mpreferred-stack-boundary=2 -fno-set-stack-executable
-fno-optimize-sibling-calls -fno-omit-frame-pointer")
if(OPTIMIZE STREQUAL "1")
- add_compiler_flags(-ftracer -momit-leaf-frame-pointer)
+ add_compile_flags("-ftracer -momit-leaf-frame-pointer")
endif()
elseif(ARCH MATCHES amd64)
- add_compiler_flags(-mpreferred-stack-boundary=4)
+ add_compile_flags("-mpreferred-stack-boundary=4")
if(OPTIMIZE STREQUAL "1")
- add_compiler_flags(-ftracer -momit-leaf-frame-pointer)
+ add_compile_flags("-ftracer -momit-leaf-frame-pointer")
endif()
elseif(ARCH MATCHES arm)
if(OPTIMIZE STREQUAL "1")
- add_compiler_flags(-ftracer)
+ add_compile_flags("-ftracer")
endif()
endif()
@@ -100,24 +100,24 @@
# Optional 3rd parameter: stdcall stack bytes
function(set_entrypoint MODULE ENTRYPOINT)
if(${ENTRYPOINT} STREQUAL "0")
- add_linkerflag(${MODULE} "-Wl,-entry,0")
+ add_target_link_flags(${MODULE} "-Wl,-entry,0")
elseif(ARCH MATCHES i386)
set(_entrysymbol _${ENTRYPOINT})
if (${ARGC} GREATER 2)
set(_entrysymbol ${_entrysymbol}@${ARGV2})
endif()
- add_linkerflag(${MODULE} "-Wl,-entry,${_entrysymbol}")
+ add_target_link_flags(${MODULE} "-Wl,-entry,${_entrysymbol}")
else()
- add_linkerflag(${MODULE} "-Wl,-entry,${ENTRYPOINT}")
+ add_target_link_flags(${MODULE} "-Wl,-entry,${ENTRYPOINT}")
endif()
endfunction()
function(set_subsystem MODULE SUBSYSTEM)
- add_linkerflag(${MODULE} "-Wl,--subsystem,${SUBSYSTEM}")
+ add_target_link_flags(${MODULE} "-Wl,--subsystem,${SUBSYSTEM}")
endfunction()
function(set_image_base MODULE IMAGE_BASE)
- add_linkerflag(${MODULE} "-Wl,--image-base,${IMAGE_BASE}")
+ add_target_link_flags(${MODULE} "-Wl,--image-base,${IMAGE_BASE}")
endfunction()
function(set_module_type MODULE TYPE)
@@ -158,7 +158,8 @@
set_entrypoint(${MODULE} DllMainCRTStartup 12)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl")
elseif(${TYPE} MATCHES kernelmodedriver)
- set_target_properties(${MODULE} PROPERTIES LINK_FLAGS
"-Wl,--exclude-all-symbols -Wl,-file-alignment=0x1000
-Wl,-section-alignment=0x1000" SUFFIX ".sys")
+ add_target_link_flags(${MODULE} "-Wl,--exclude-all-symbols
-Wl,-file-alignment=0x1000 -Wl,-section-alignment=0x1000")
+ set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys")
set_entrypoint(${MODULE} DriverEntry 8)
set_subsystem(${MODULE} native)
set_image_base(${MODULE} 0x00010000)
@@ -342,7 +343,7 @@
set_source_files_properties(${_item} PROPERTIES COMPILE_FLAGS
"-fpch-preprocess" OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_gch_filename})
endif()
endforeach()
- #set dependency checking : depends on precompiled header only whixh already
depends on deeper header
+ #set dependency checking : depends on precompiled header only which already
depends on deeper header
set_target_properties(${_target_name} PROPERTIES
IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
"\"${_basename}\"=;<${_basename}>=")
endmacro()
else()
Modified: trunk/reactos/cmake/msvc.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/msvc.cmake?rev=53545…
==============================================================================
--- trunk/reactos/cmake/msvc.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/msvc.cmake [iso-8859-1] Sat Sep 3 14:57:27 2011
@@ -19,7 +19,7 @@
add_definitions(/Dinline=__inline /D__STDC__=1)
-add_compiler_flags(/X /GR- /GS- /Zl /W3)
+add_compile_flags("/X /GR- /GS- /Zl /W3")
if(${_MACHINE_ARCH_FLAG} MATCHES X86)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO
/NODEFAULTLIB")
@@ -61,24 +61,24 @@
function(set_entrypoint _module _entrypoint)
if(${_entrypoint} STREQUAL "0")
- add_linkerflag(${_module} "/NOENTRY")
+ add_target_link_flags(${_module} "/NOENTRY")
elseif(ARCH MATCHES i386)
set(_entrysymbol ${_entrypoint})
if (${ARGC} GREATER 2)
set(_entrysymbol ${_entrysymbol}@${ARGV2})
endif()
- add_linkerflag(${_module} "/ENTRY:${_entrysymbol}")
+ add_target_link_flags(${_module} "/ENTRY:${_entrysymbol}")
else()
- add_linkerflag(${_module} "/ENTRY:${_entrypoint}")
+ add_target_link_flags(${_module} "/ENTRY:${_entrypoint}")
endif()
endfunction()
function(set_subsystem MODULE SUBSYSTEM)
- add_linkerflag(${MODULE} "/subsystem:${SUBSYSTEM}")
+ add_target_link_flags(${MODULE} "/subsystem:${SUBSYSTEM}")
endfunction()
function(set_image_base MODULE IMAGE_BASE)
- add_linkerflag(${MODULE} "/BASE:${IMAGE_BASE}")
+ add_target_link_flags(${MODULE} "/BASE:${IMAGE_BASE}")
endfunction()
function(set_module_type MODULE TYPE)
@@ -108,21 +108,21 @@
else()
message(STATUS "${MODULE} has no base address")
endif()
- add_linkerflag(${MODULE} "/DLL")
+ add_target_link_flags(${MODULE} "/DLL")
elseif(${TYPE} MATCHES win32ocx)
set_entrypoint(${MODULE} DllMainCRTStartup 12)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".ocx")
- add_linkerflag(${MODULE} "/DLL")
+ add_target_link_flags(${MODULE} "/DLL")
elseif(${TYPE} MATCHES cpl)
set_entrypoint(${MODULE} DllMainCRTStartup 12)
set_target_properties(${MODULE} PROPERTIES SUFFIX ".cpl")
- add_linkerflag(${MODULE} "/DLL")
+ add_target_link_flags(${MODULE} "/DLL")
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_target_link_flags(${MODULE} "/DRIVER")
add_dependencies(${MODULE} bugcodes)
elseif(${TYPE} MATCHES nativedll)
set_subsystem(${MODULE} native)
@@ -195,7 +195,7 @@
macro(add_delay_importlibs MODULE)
foreach(LIB ${ARGN})
- add_linkerflag(${MODULE} "/DELAYLOAD:${LIB}.dll")
+ add_target_link_flags(${MODULE} "/DELAYLOAD:${LIB}.dll")
target_link_libraries(${MODULE} ${CMAKE_BINARY_DIR}/importlibs/lib${LIB}.LIB)
add_dependencies(${MODULE} lib${LIB})
endforeach()