Author: jgardou Date: Sun May 15 18:10:27 2011 New Revision: 51771
URL: http://svn.reactos.org/svn/reactos?rev=51771&view=rev Log: [CMAKE] - refactor generation of rpcproxy file to avoid recompiling Get rid of unnecessary libraries in the process. Tested with both mingw32-make+widl/nmake+midl - do not rebuild livecd hives if not necessary
Modified: branches/cmake-bringup/CMakeLists.txt branches/cmake-bringup/boot/bootdata/CMakeLists.txt branches/cmake-bringup/cmake/idl-support.cmake branches/cmake-bringup/dll/directx/quartz/CMakeLists.txt branches/cmake-bringup/dll/win32/actxprxy/CMakeLists.txt branches/cmake-bringup/dll/win32/ole32/CMakeLists.txt branches/cmake-bringup/dll/win32/oleaut32/CMakeLists.txt branches/cmake-bringup/dll/win32/qmgrprxy/CMakeLists.txt branches/cmake-bringup/dll/win32/sti/CMakeLists.txt branches/cmake-bringup/dll/win32/urlmon/CMakeLists.txt
Modified: branches/cmake-bringup/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/CMakeLists.txt?rev... ============================================================================== --- branches/cmake-bringup/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -21,7 +21,7 @@ set(CMAKE_SKIP_PREPROCESSED_SOURCE_RULES TRUE) set(CMAKE_SKIP_ASSEMBLY_SOURCE_RULES TRUE) set(CMAKE_COLOR_MAKEFILE OFF) -set_property(GLOBAL PROPERTY RULE_MESSAGES OFF) +#set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
if(NOT ARCH) set(ARCH i386)
Modified: branches/cmake-bringup/boot/bootdata/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/bootdata/CMak... ============================================================================== --- branches/cmake-bringup/boot/bootdata/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/boot/bootdata/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -12,9 +12,21 @@ ${CMAKE_CURRENT_SOURCE_DIR}/livecd.inf ${CMAKE_CURRENT_SOURCE_DIR}/hiveinst_${ARCH}.inf)
+add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sam + ${CMAKE_CURRENT_BINARY_DIR}/default + ${CMAKE_CURRENT_BINARY_DIR}/security + ${CMAKE_CURRENT_BINARY_DIR}/software + ${CMAKE_CURRENT_BINARY_DIR}/system + COMMAND native-mkhive ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${ARCH} ${CD_HIVES} + DEPENDS native-mkhive ${CD_HIVES}) + add_custom_target(livecd_hives - native-mkhive ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${ARCH} ${CD_HIVES} - DEPENDS native-mkhive ${CD_HIVES}) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sam + ${CMAKE_CURRENT_BINARY_DIR}/default + ${CMAKE_CURRENT_BINARY_DIR}/security + ${CMAKE_CURRENT_BINARY_DIR}/software + ${CMAKE_CURRENT_BINARY_DIR}/system)
add_cd_file( FILE ${CMAKE_CURRENT_BINARY_DIR}/sam
Modified: branches/cmake-bringup/cmake/idl-support.cmake URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/cmake/idl-support.... ============================================================================== --- branches/cmake-bringup/cmake/idl-support.cmake [iso-8859-1] (original) +++ branches/cmake-bringup/cmake/idl-support.cmake [iso-8859-1] Sun May 15 18:10:27 2011 @@ -3,12 +3,13 @@ if(MSVC) set(IDL_COMPILER midl) set(IDL_HEADER_ARG /h) #.h - set(IDL_HEADER_ARG2 /h) #.h + set(IDL_HEADER_ARG2 /header) #.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_INTERFACE_ARG /iid) + set(IDL_DLLDATA_ARG /dlldata) if(ARCH MATCHES i386) set(IDL_FLAGS /win32) elseif(ARCH MATCHES amd64) @@ -19,12 +20,13 @@ else() set(IDL_COMPILER native-widl) set(IDL_HEADER_ARG -h -o) #.h - set(IDL_HEADER_ARG2 -h -H) #.h + set(IDL_HEADER_ARG2 -H) #.h set(IDL_TYPELIB_ARG -t -o) #.tlb set(IDL_SERVER_ARG -s -S) #.c for server library set(IDL_CLIENT_ARG -c -C) #.c for stub client library - set(IDL_PROXY_ARG -p -P) + set(IDL_PROXY_ARG -p -o) set(IDL_INTERFACE_ARG -u -o) + set(IDL_DLLDATA_ARG --dlldata-only -o) if(ARCH MATCHES i386) set(IDL_FLAGS -m32 --win32) elseif(ARCH MATCHES amd64) @@ -80,38 +82,42 @@ add_custom_target(${TARGET} ALL DEPENDS ${HEADERS}) endmacro()
-macro(add_rpcproxy_library TARGET) +macro(add_rpcproxy_files) get_includes(INCLUDES) get_defines(DEFINES) + + if(MSVC) + set(DLLDATA_ARG /dlldata ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c) + endif() foreach(FILE ${ARGN}) get_filename_component(NAME ${FILE} NAME_WE) - if(MSVC) - set(IDL_DLLDATA_ARG /dlldata ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c) - else() - set(IDL_DLLDATA_ARG "") + if(NOT MSVC) + # cmake internal dependency checker detects that .c depends on .h. + # Building them in two passes avoids unnecessary recompilation (to put it simple) + # Fortunately, midl is smarter and generates .h BEFORE .c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h + COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) + set(_depends ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h) + list(APPEND IDLS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) endif() add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c - COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.h ${IDL_PROXY_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c ${IDL_DLLDATA_ARG} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) - set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c - PROPERTIES GENERATED TRUE) - list(APPEND rpcproxy_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c) - list(APPEND IDLS ${CMAKE_CURRENT_SOURCE_DIR}/${NAME}.idl) + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c + COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_PROXY_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_p.c ${IDL_HEADER_ARG2} ${NAME}_p.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${DLLDATA_ARG} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${_depends}) endforeach()
- if(NOT MSVC) - # Extra pass to generate dlldata for widl + # Extra pass to generate dlldata + if(MSVC) + #nobody told how to generate it, so mark it as generated + set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c PROPERTIES GENERATED TRUE) + else() add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c - COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} --dlldata-only -o ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS} + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c + COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} --dlldata-only -o ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c ${IDLS} DEPENDS ${IDLS}) endif() - set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c - PROPERTIES GENERATED TRUE) - add_library(${TARGET} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${rpcproxy_SOURCES}) endmacro()
macro(add_rpc_library TARGET) @@ -120,7 +126,11 @@ foreach(FILE ${ARGN}) get_filename_component(NAME ${FILE} NAME_WE) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.c + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.h + COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.c COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG2} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) set_source_files_properties( @@ -129,7 +139,11 @@ list(APPEND server_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_s.c)
add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.c + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.h + COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.h ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.c COMMAND ${IDL_COMPILER} ${INCLUDES} ${DEFINES} ${IDL_FLAGS} ${IDL_HEADER_ARG2} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) set_source_files_properties(
Modified: branches/cmake-bringup/dll/directx/quartz/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/directx/quartz... ============================================================================== --- branches/cmake-bringup/dll/directx/quartz/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/directx/quartz/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -14,7 +14,7 @@
spec2def(quartz.dll quartz.spec)
-add_rpcproxy_library(quartzproxy quartz_strmif.idl) +add_rpcproxy_files(quartz_strmif.idl)
list(APPEND SOURCE avidec.c @@ -42,6 +42,8 @@ control.c avisplit.c version.rc + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c + ${CMAKE_CURRENT_BINARY_DIR}/quartz_strmif_p.c ${CMAKE_CURRENT_BINARY_DIR}/quartz.def)
add_library(quartz SHARED ${SOURCE}) @@ -49,7 +51,6 @@ set_module_type(quartz win32dll)
target_link_libraries(quartz - quartzproxy strmiids uuid wine
Modified: branches/cmake-bringup/dll/win32/actxprxy/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/actxprxy... ============================================================================== --- branches/cmake-bringup/dll/win32/actxprxy/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/actxprxy/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -4,7 +4,7 @@
spec2def(actxprxy.dll actxprxy.spec)
-add_rpcproxy_library(actxprxylib +add_rpcproxy_files( actxprxy_activscp.idl actxprxy_comcat.idl actxprxy_docobj.idl @@ -18,6 +18,17 @@
list(APPEND SOURCE usrmarshal.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_activscp_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_comcat_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_docobj_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_hlink_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_htiframe_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_objsafe_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_ocmm_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_servprov_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_shobjidl_p.c + ${CMAKE_CURRENT_BINARY_DIR}/actxprxy_urlhist_p.c + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c ${CMAKE_CURRENT_BINARY_DIR}/actxprxy.def)
add_library(actxprxy SHARED ${SOURCE}) @@ -25,7 +36,6 @@ set_entrypoint(actxprxy 0)
target_link_libraries(actxprxy - actxprxylib uuid wine ${PSEH_LIB})
Modified: branches/cmake-bringup/dll/win32/ole32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/ole32/CM... ============================================================================== --- branches/cmake-bringup/dll/win32/ole32/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/ole32/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -20,7 +20,7 @@ ${CMAKE_CURRENT_BINARY_DIR} ${REACTOS_SOURCE_DIR}/include/reactos/wine)
-add_rpcproxy_library(ole32proxy +add_rpcproxy_files( dcom.idl ole32_unknwn.idl ole32_objidl.idl @@ -65,7 +65,12 @@ usrmarshal.c ole32res.rc ${CMAKE_CURRENT_BINARY_DIR}/dcom_i.c + ${CMAKE_CURRENT_BINARY_DIR}/dcom_p.c + ${CMAKE_CURRENT_BINARY_DIR}/ole32_unknwn_p.c + ${CMAKE_CURRENT_BINARY_DIR}/ole32_objidl_p.c + ${CMAKE_CURRENT_BINARY_DIR}/ole32_oleidl_p.c ${CMAKE_CURRENT_BINARY_DIR}/ole32_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c ${CMAKE_CURRENT_BINARY_DIR}/ole32.def)
add_library(ole32 SHARED ${SOURCE}) @@ -73,7 +78,6 @@ set_module_type(ole32 win32dll)
target_link_libraries(ole32 - ole32proxy wine irotrpc uuid
Modified: branches/cmake-bringup/dll/win32/oleaut32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/oleaut32... ============================================================================== --- branches/cmake-bringup/dll/win32/oleaut32/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/oleaut32/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -20,6 +20,9 @@ vartype.c oleaut32.rc ${CMAKE_CURRENT_BINARY_DIR}/oleaut32_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c + ${CMAKE_CURRENT_BINARY_DIR}/oleaut32_oaidl_p.c + ${CMAKE_CURRENT_BINARY_DIR}/oleaut32_ocidl_p.c ${CMAKE_CURRENT_BINARY_DIR}/oleaut32.def)
remove_definitions(-D_WIN32_WINNT=0x502) @@ -47,14 +50,13 @@
spec2def(oleaut32.dll oleaut32.spec)
-add_rpcproxy_library(oleaut32proxy oleaut32_oaidl.idl oleaut32_ocidl.idl) +add_rpcproxy_files(oleaut32_oaidl.idl oleaut32_ocidl.idl)
add_library(oleaut32 SHARED ${SOURCE})
set_module_type(oleaut32 win32dll)
target_link_libraries(oleaut32 - oleaut32proxy wine wineldr uuid
Modified: branches/cmake-bringup/dll/win32/qmgrprxy/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/qmgrprxy... ============================================================================== --- branches/cmake-bringup/dll/win32/qmgrprxy/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/qmgrprxy/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -12,13 +12,15 @@ list(APPEND SOURCE version.rc ${CMAKE_CURRENT_BINARY_DIR}/qmgrprxy_i.c + ${CMAKE_CURRENT_BINARY_DIR}/qmgrprxy_p.c + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c ${CMAKE_CURRENT_BINARY_DIR}/qmgrprxy.def)
-add_rpcproxy_library(qmgrprxylib qmgrprxy.idl) +add_rpcproxy_files(qmgrprxy.idl)
add_library(qmgrprxy SHARED ${SOURCE})
set_module_type(qmgrprxy win32dll) -target_link_libraries(qmgrprxy qmgrprxylib ${PSEH_LIB} wine) +target_link_libraries(qmgrprxy ${PSEH_LIB} wine) add_importlibs(qmgrprxy rpcrt4 msvcrt kernel32 ntdll) add_cd_file(TARGET qmgrprxy DESTINATION reactos/system32 FOR all)
Modified: branches/cmake-bringup/dll/win32/sti/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/sti/CMak... ============================================================================== --- branches/cmake-bringup/dll/win32/sti/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/sti/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -16,16 +16,17 @@ regsvr.c sti.c sti_main.c + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c + ${CMAKE_CURRENT_BINARY_DIR}/sti_wia_p.c ${CMAKE_CURRENT_BINARY_DIR}/sti.def)
-add_rpcproxy_library(stiproxy sti_wia.idl) +add_rpcproxy_files(sti_wia.idl)
add_library(sti SHARED ${SOURCE})
set_entrypoint(sti 0)
target_link_libraries(sti - stiproxy wine uuid ${PSEH_LIB})
Modified: branches/cmake-bringup/dll/win32/urlmon/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/dll/win32/urlmon/C... ============================================================================== --- branches/cmake-bringup/dll/win32/urlmon/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/dll/win32/urlmon/CMakeLists.txt [iso-8859-1] Sun May 15 18:10:27 2011 @@ -10,7 +10,7 @@
spec2def(urlmon.dll urlmon.spec)
-add_rpcproxy_library(urlmonproxy urlmon_urlmon.idl) +add_rpcproxy_files(urlmon_urlmon.idl)
list(APPEND SOURCE bindctx.c @@ -36,6 +36,8 @@ urlmon_main.c usrmarshal.c rsrc.rc + ${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c + ${CMAKE_CURRENT_BINARY_DIR}/urlmon_urlmon_p.c ${CMAKE_CURRENT_BINARY_DIR}/urlmon_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/urlmon.def)
@@ -45,7 +47,6 @@ set_module_type(urlmon win32dll)
target_link_libraries(urlmon - urlmonproxy uuid wine ${PSEH_LIB})