[CMAKE]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 31 Dec 2010 16:49:49 +0000 (16:49 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 31 Dec 2010 16:49:49 +0000 (16:49 +0000)
Add generation of a depencency graph for shared libraries.
The output is a graphml file. Can be enabled with GENERATE_DEPENDENCY_GRAPH switch.

svn path=/branches/cmake-bringup/; revision=50243

CMakeLists.txt
CMakeMacros.cmake
config.cmake
gcc.cmake

index fd4c043..44073c1 100644 (file)
@@ -79,6 +79,7 @@ if(CMAKE_CROSSCOMPILING)
 
     #Some cleanup
     file(REMOVE
+        ${REACTOS_BINARY_DIR}/dependencies.graphml
         ${REACTOS_BINARY_DIR}/boot/ros_livecd.txt
         ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt
         ${REACTOS_BINARY_DIR}/boot/ros_minicd.txt
@@ -145,6 +146,8 @@ if(CMAKE_CROSSCOMPILING)
         include_directories(include/crt/mingw32)
     endif()
 
+    add_dependency_header()
+
     add_subdirectory(include/psdk)
     add_subdirectory(include/dxsdk)
     add_subdirectory(include/reactos/idl)
@@ -227,4 +230,6 @@ if(CMAKE_CROSSCOMPILING)
     #bootcd and livecd
     include(ros_cd.cmake)
 
+    add_dependency_footer()
+
 endif()
index a6014ce..896129a 100644 (file)
@@ -36,7 +36,7 @@ macro(idl_compile_object OBJECT SOURCE)
     get_property(FLAGS SOURCE ${SOURCE} PROPERTY COMPILE_FLAGS)\r
     get_property(DEFINES SOURCE ${SOURCE} PROPERTY COMPILE_DEFINITIONS)\r
     get_property(INCLUDE_DIRECTORIES DIRECTORY PROPERTY INCLUDE_DIRECTORIES)\r
-  \r
+\r
     foreach(DIR ${INCLUDE_DIRECTORIES})\r
         set(FLAGS "${FLAGS} -I${DIR}")\r
     endforeach()\r
@@ -73,7 +73,7 @@ macro(add_minicd_target _targetname _dir) # optional parameter: _nameoncd
     else()\r
         set(_nameoncd ${ARGN})\r
     endif()\r
-    \r
+\r
     file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt "${_targetname}\t${_dir}\t${_nameoncd}\n")\r
 endmacro()\r
 \r
@@ -96,7 +96,7 @@ macro(add_livecd_target _targetname _dir )# optional parameter : _nameoncd
     else()\r
         set(_nameoncd ${ARGN})\r
     endif()\r
-    \r
+\r
     file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt "${_targetname}\t${_dir}\t${_nameoncd}\n")\r
 endmacro()\r
 \r
@@ -149,7 +149,7 @@ macro(add_cab FILENAME _num)
     file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_cab.txt "${FILENAME}\t${_num}\n")\r
     cab_to_dir(${_num} _dir)\r
     add_livecd(${FILENAME} ${_dir})\r
-endmacro()    \r
+endmacro()\r
 \r
 macro(custom_incdefs)\r
     if(NOT DEFINED result_incs) #rpc_defines\r
@@ -181,6 +181,13 @@ macro(rpcproxy TARGET)
             PROPERTIES GENERATED TRUE)\r
         list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c)\r
         list(APPEND IDLS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl)\r
+<<<<<<< .mine\r
+        list(APPEND PROXY_DEPENDS ${TARGET}_${FILE}_p)\r
+        add_custom_target(${TARGET}_${FILE}_p\r
+            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c)\r
+        #add_dependencies(${TARGET}_proxy ${TARGET}_${FILE}_p)\r
+=======\r
+>>>>>>> .r50241\r
     endforeach()\r
 \r
     add_custom_command(\r
@@ -190,6 +197,12 @@ macro(rpcproxy TARGET)
     set_source_files_properties(\r
         ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c\r
         PROPERTIES GENERATED TRUE)\r
+<<<<<<< .mine\r
+\r
+    add_library(${TARGET}_proxy ${SOURCE})\r
+    add_dependencies(${TARGET}_proxy psdk ${PROXY_DEPENDS})\r
+=======\r
+>>>>>>> .r50241\r
 endmacro()\r
 \r
 macro(idl_files)\r
@@ -205,7 +218,7 @@ macro(idl_files)
             PROPERTIES GENERATED TRUE)\r
         add_library(${FILE}_server ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c)\r
         add_dependencies(${FILE}_server psdk)\r
-    \r
+\r
         add_custom_command(\r
             OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c\r
             COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl\r
@@ -241,3 +254,30 @@ macro(add_idl_interface IDL_FILE)
         DEPENDS ${IDL_FILE})\r
     set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE)\r
 endmacro()\r
+\r
+macro(add_dependency_node _node)\r
+    if(GENERATE_DEPENDENCY_GRAPH)\r
+        get_target_property(_type ${_node} TYPE)\r
+        if(_type MATCHES SHARED_LIBRARY)\r
+            file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml "    <node id=\"${_node}\"/>\n")\r
+        endif()\r
+     endif()\r
+endmacro()\r
+\r
+macro(add_dependency_edge _source _target)\r
+    if(GENERATE_DEPENDENCY_GRAPH)\r
+        get_target_property(_type ${_source} TYPE)\r
+        if(_type MATCHES SHARED_LIBRARY)\r
+            file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml "    <edge source=\"${_source}\" target=\"${_target}\"/>\n")\r
+        endif()\r
+    endif()\r
+endmacro()\r
+\r
+macro(add_dependency_header)\r
+    file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<graphml>\n  <graph id=\"ReactOS dependencies\" edgedefault=\"directed\">\n")\r
+    add_dependency_node(ntdll)\r
+endmacro()\r
+\r
+macro(add_dependency_footer)\r
+    file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml "  </graph>\n</graphml>\n")\r
+endmacro()\r
index fda455f..dc65862 100644 (file)
@@ -47,3 +47,5 @@ This settings is disabled (0) by default.")
 set(BUILD_MP TRUE CACHE BOOL\r
 "Whether to compile the multi processor versions for ntoskrnl and hal.")\r
 \r
+set(GENERATE_DEPENDENCY_GRAPH FALSE CACHE BOOL\r
+"Whether to create a graphml dependency of dlls.")\r
index 54e48a5..5bdbc13 100644 (file)
--- a/gcc.cmake
+++ b/gcc.cmake
@@ -218,9 +218,11 @@ set(IDL_PROXY_ARG -p -P)
 set(IDL_DLLDATA_ARG --dlldata-only --dlldata=)
 
 macro(add_importlibs MODULE)
+    add_dependency_node(${MODULE})
     foreach(LIB ${ARGN})
         target_link_libraries(${MODULE} ${CMAKE_BINARY_DIR}/importlibs/lib${LIB}.a)
         add_dependencies(${MODULE} lib${LIB})
+        add_dependency_edge(${MODULE} ${LIB})
     endforeach()
 endmacro()