X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=CMakeMacros.cmake;h=3d4e3a2bc21bd38cfc0bb4c6c40de6e1f93e8d97;hp=5c0b50fc33b256ccca64354eac4d5d19de0adeea;hb=53fbd8e18538e430a677ca80bb451f70e5652eea;hpb=0e74512f1e211f04673dc792d7d8ef4de21f0d0e diff --git a/CMakeMacros.cmake b/CMakeMacros.cmake index 5c0b50fc33b..3d4e3a2bc21 100644 --- a/CMakeMacros.cmake +++ b/CMakeMacros.cmake @@ -22,7 +22,6 @@ macro(CreateBootSectorTarget _target_name _asm_file _object_file) DEPENDS ${_asm_file}) set_source_files_properties(${_object_file} PROPERTIES GENERATED TRUE) add_custom_target(${_target_name} ALL DEPENDS ${_object_file}) - add_minicd(${_object_file} loader ${OBJECT_NAME}) endmacro() else() @@ -32,55 +31,6 @@ endmacro() endif() -macro(idl_compile_object OBJECT SOURCE) - get_property(FLAGS SOURCE ${SOURCE} PROPERTY COMPILE_FLAGS) - get_property(DEFINES SOURCE ${SOURCE} PROPERTY COMPILE_DEFINITIONS) - get_property(INCLUDE_DIRECTORIES DIRECTORY PROPERTY INCLUDE_DIRECTORIES) - - foreach(DIR ${INCLUDE_DIRECTORIES}) - set(FLAGS "${FLAGS} -I${DIR}") - endforeach() - - set(IDL_COMMAND ${CMAKE_IDL_COMPILE_OBJECT}) - string(REPLACE "" "${CMAKE_IDL_COMPILER}" IDL_COMMAND "${IDL_COMMAND}") - string(REPLACE "${FLAGS}" IDL_COMMAND "${IDL_COMMAND}") - string(REPLACE "" "${DEFINES}" IDL_COMMAND "${IDL_COMMAND}") - string(REPLACE "" "${OBJECT}" IDL_COMMAND "${IDL_COMMAND}") - string(REPLACE "" "${SOURCE}" IDL_COMMAND "${IDL_COMMAND}") - separate_arguments(IDL_COMMAND) - - add_custom_command( - OUTPUT ${OBJECT} - COMMAND ${IDL_COMMAND} - DEPENDS ${SOURCE} - VERBATIM) -endmacro() - -macro(add_interface_definitions TARGET) - foreach(SOURCE ${ARGN}) - get_filename_component(FILE ${SOURCE} NAME_WE) - set(OBJECT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}.h) - idl_compile_object(${OBJECT} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}) - list(APPEND OBJECTS ${OBJECT}) - endforeach() - add_custom_target(${TARGET} ALL DEPENDS ${OBJECTS}) -endmacro() - -macro(add_minicd_target _targetname _dir) # optional parameter: _nameoncd - if("${ARGN}" STREQUAL "") - get_target_property(FILENAME ${_targetname} LOCATION) - get_filename_component(_nameoncd ${FILENAME} NAME) - else() - set(_nameoncd ${ARGN}) - endif() - - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_minicd_target.txt "${_targetname}\t${_dir}\t${_nameoncd}\n") -endmacro() - -macro(add_minicd FILENAME _dir _nameoncd) - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_minicd.txt "${FILENAME}\t${_dir}\t${_nameoncd}\n") -endmacro() - macro(set_cpp) include_directories(BEFORE ${REACTOS_SOURCE_DIR}/include/c++/stlport) set(IS_CPP 1) @@ -89,167 +39,117 @@ macro(set_cpp) -DNATIVE_C_INCLUDE=${REACTOS_SOURCE_DIR}/include/crt) endmacro() -macro(add_livecd_target _targetname _dir )# optional parameter : _nameoncd - if("${ARGN}" STREQUAL "") - get_target_property(FILENAME ${_targetname} LOCATION) - get_filename_component(_nameoncd ${FILENAME} NAME) - else() - set(_nameoncd ${ARGN}) - endif() - - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_livecd_target.txt "${_targetname}\t${_dir}\t${_nameoncd}\n") +macro(add_dependency_node _node) + if(GENERATE_DEPENDENCY_GRAPH) + get_target_property(_type ${_node} TYPE) + if(_type MATCHES SHARED_LIBRARY) + file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml " \n") + endif() + endif() endmacro() -macro(add_livecd FILENAME _dir)# optional parameter : _nameoncd - if("${ARGN}" STREQUAL "") - get_filename_component(_nameoncd ${FILENAME} NAME) - else() - set(_nameoncd ${ARGN}) +macro(add_dependency_edge _source _target) + if(GENERATE_DEPENDENCY_GRAPH) + get_target_property(_type ${_source} TYPE) + if(_type MATCHES SHARED_LIBRARY) + file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml " \n") + endif() endif() - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_livecd.txt "${FILENAME}\t${_dir}\t${_nameoncd}\n") endmacro() -macro(cab_to_dir _dir_num _var_name) -# 1 = system32 -# 2 = system32\drivers -# 3 = Fonts -# 4 = -# 5 = system32\drivers\etc -# 6 = inf -# 7 = bin -# 8 = media - if(${_dir_num} STREQUAL "1") - set(${_var_name} "reactos/system32") - elseif(${_dir_num} STREQUAL "2") - set(${_var_name} "reactos/system32/drivers") - elseif(${_dir_num} STREQUAL "3") - set(${_var_name} "reactos/fonts") - elseif(${_dir_num} STREQUAL "4") - set(${_var_name} "reactos") - elseif(${_dir_num} STREQUAL "5") - set(${_var_name} "reactos/system32/drivers/etc") - elseif(${_dir_num} STREQUAL "6") - set(${_var_name} "reactos/inf") - elseif(${_dir_num} STREQUAL "7") - set(${_var_name} "reactos/bin") - elseif(${_dir_num} STREQUAL "8") - set(${_var_name} "reactos/system32/drivers") - else() - message(FATAL_ERROR "Wrong directory ${_dir_num}") - endif() -endmacro() - -macro(add_cab_target _targetname _num ) - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt "${_targetname}\t${_num}\n") - cab_to_dir(${_num} _dir) - add_livecd_target(${_targetname} ${_dir}) -endmacro() - -macro(add_cab FILENAME _num) - file(APPEND ${REACTOS_BINARY_DIR}/boot/ros_cab.txt "${FILENAME}\t${_num}\n") - cab_to_dir(${_num} _dir) - add_livecd(${FILENAME} ${_dir}) -endmacro() - -macro(custom_incdefs) - if(NOT DEFINED result_incs) #rpc_defines - get_directory_property(rpc_defines COMPILE_DEFINITIONS) - get_directory_property(rpc_includes INCLUDE_DIRECTORIES) - - foreach(arg ${rpc_defines}) - set(result_defs ${result_defs} -D${arg}) - endforeach() - - foreach(arg ${rpc_includes}) - set(result_incs -I${arg} ${result_incs}) - endforeach() - endif() +macro(add_dependency_header) + file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml "\n\n \n") + add_dependency_node(ntdll) endmacro() -macro(rpcproxy TARGET) - custom_incdefs() - list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c) - - foreach(_in_FILE ${ARGN}) - get_filename_component(FILE ${_in_FILE} NAME_WE) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c - COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.h ${IDL_PROXY_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl) - set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c - PROPERTIES GENERATED TRUE) - list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c) - list(APPEND IDLS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl) - list(APPEND PROXY_DEPENDS ${TARGET}_${FILE}_p) - add_custom_target(${TARGET}_${FILE}_p - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_p.c) - #add_dependencies(${TARGET}_proxy ${TARGET}_${FILE}_p) - endforeach() - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c - COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_DLLDATA_ARG}${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS} - DEPENDS ${IDLS}) - set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c - PROPERTIES GENERATED TRUE) - - add_library(${TARGET}_proxy ${SOURCE}) - add_dependencies(${TARGET}_proxy psdk ${PROXY_DEPENDS}) +macro(add_dependency_footer) + file(APPEND ${REACTOS_BINARY_DIR}/dependencies.graphml " \n\n") endmacro() -macro(idl_files) - custom_incdefs() +macro(add_message_headers) foreach(_in_FILE ${ARGN}) get_filename_component(FILE ${_in_FILE} NAME_WE) + macro_mc(${FILE}) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c - COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl - DEPENDS ${_in_file}) - set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c - PROPERTIES GENERATED TRUE) - add_library(${FILE}_server ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c) - add_dependencies(${FILE}_server psdk) - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c - 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 - DEPENDS ${_in_file}) + OUTPUT ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.rc ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.h + COMMAND ${COMMAND_MC} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.mc) set_source_files_properties( - ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c + ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.h ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.rc PROPERTIES GENERATED TRUE) - add_library(${FILE}_client ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c) - add_dependencies(${FILE}_client psdk) + add_custom_target(${FILE} ALL DEPENDS ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.h ${REACTOS_BINARY_DIR}/include/reactos/${FILE}.rc) endforeach() endmacro() -macro(add_typelib TARGET) - custom_incdefs() - foreach(SOURCE ${ARGN}) - get_filename_component(FILE ${SOURCE} NAME_WE) - set(OBJECT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}.tlb) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}.tlb - COMMAND ${IDL_COMPILER} ${result_incs} ${IDL_FLAGS} ${IDL_TYPELIB_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}.tlb ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE} - DEPENDS ${SOURCE}) - list(APPEND OBJECTS ${OBJECT}) - endforeach() - add_custom_target(${TARGET} ALL DEPENDS ${OBJECTS}) +macro(dir_to_num dir var) + if(${dir} STREQUAL reactos/system32) + set(${var} 1) + elseif(${dir} STREQUAL reactos/system32/drivers) + set(${var} 2) + elseif(${dir} STREQUAL reactos/Fonts) + set(${var} 3) + elseif(${dir} STREQUAL reactos) + set(${var} 4) + elseif(${dir} STREQUAL reactos/system32/drivers/etc) + set(${var} 5) + elseif(${dir} STREQUAL reactos/inf) + set(${var} 6) + elseif(${dir} STREQUAL reactos/bin) + set(${var} 7) + elseif(${dir} STREQUAL reactos/media) + set(${var} 8) + else() + message(ERROR "Wrong destination: ${dir}") + endif() endmacro() -macro(add_idl_interface IDL_FILE) - custom_incdefs() - if(ARCH MATCHES i386) - set(platform_flags "-m32 --win32") - elseif(ARCH MATCHES amd64) - set(platform_flags "-m64 --win64") +function(add_cd_file) + cmake_parse_arguments(_CD "NO_CAB;NO_LIVECD" "DESTINATION;NAME_ON_CD;TARGET" "FILE" ${ARGN}) + if(NOT (_CD_TARGET OR _CD_FILE)) + message(FATAL_ERROR "You must provide a target or a file to install!") endif() - get_filename_component(FILE ${IDL_FILE} NAME_WE) - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c - COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${platform_flags} -u -U ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE} - DEPENDS ${IDL_FILE}) - set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE) -endmacro() + + if(NOT _CD_DESTINATION) + message(FATAL_ERROR "You must provide a destination") + elseif(${_CD_DESTINATION} STREQUAL root) + set(_CD_DESTINATION "") + endif() + + if(NOT _CD_FILE) + get_target_property(__file ${_CD_TARGET} LOCATION) + else() + if(NOT _CD_NO_CAB) + add_dependencies(reactos_cab ${_CD_FILE}) + endif() + set(__file ${_CD_FILE}) + endif() + #whether or not we should put it in reactos.cab or directly on cd + if(_CD_NO_CAB) + foreach(item ${__file}) + file(APPEND ${REACTOS_BINARY_DIR}/boot/bootcd.cmake "file(COPY \"${item}\" DESTINATION \"\${CD_DIR}/${_CD_DESTINATION}\")\n") + endforeach() + if(_CD_NAME_ON_CD) + get_filename_component(__file ${__file} NAME) + #rename it in the cd tree + file(APPEND ${REACTOS_BINARY_DIR}/boot/bootcd.cmake "file(RENAME \${CD_DIR}/${_CD_DESTINATION}/${__file} \${CD_DIR}/${_CD_DESTINATION}/${_CD_NAME_ON_CD})\n") + endif() + #add right dependency + if(_CD_TARGET) + add_dependencies(bootcd ${_CD_TARGET}) + else() + add_dependencies(bootcd ${_CD_FILE}) + endif() + if(NOT _CD_NO_LIVECD) + file(APPEND ${REACTOS_BINARY_DIR}/boot/livecd.cmake "file(COPY \"${__file}\" DESTINATION \"\${CD_DIR}/${_CD_DESTINATION}\")\n") + endif() + else() + #add right dependency + if(_CD_TARGET) + add_dependencies(reactos_cab ${_CD_TARGET}) + else() + add_dependencies(reactos_cab ${_CD_FILE}) + endif() + dir_to_num(${_CD_DESTINATION} _num) + file(APPEND ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.dff.dyn "${__file} ${_num}\n") + endif() +endfunction()