Author: tkreuzer Date: Tue Sep 21 02:31:09 2010 New Revision: 48838
URL: http://svn.reactos.org/svn/reactos?rev=48838&view=rev Log: [CMAKE] Create a portable way of compiling IDL files. Sorry for the coding style :)
Modified: branches/cmake-bringup/CMakeMacros.cmake branches/cmake-bringup/include/psdk/CMakeLists.txt branches/cmake-bringup/toolchain-mingw32.cmake branches/cmake-bringup/toolchain-msvc.cmake
Modified: branches/cmake-bringup/CMakeMacros.cmake URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/CMakeMacros.cmake?... ============================================================================== --- branches/cmake-bringup/CMakeMacros.cmake [iso-8859-1] (original) +++ branches/cmake-bringup/CMakeMacros.cmake [iso-8859-1] Tue Sep 21 02:31:09 2010 @@ -1,77 +1,116 @@ - -MACRO(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename) - - # Add the precompiled header to the build - get_filename_component(FILE ${_header_filename} NAME) - set(_gch_filename "${_target_name}_${FILE}.gch") - list(APPEND ${_out_compile_flags} -c ${_header_filename} -o ${_gch_filename}) - - # This gets us our includes - get_directory_property(DIRINC INCLUDE_DIRECTORIES) - foreach(item ${DIRINC}) - list(APPEND ${_out_compile_flags} -I${item}) - endforeach(item) - - # This is a particular bit of undocumented/hacky magic I'm quite proud of - get_directory_property(_compiler_flags DEFINITIONS) - string(REPLACE "\ " "\t" _compiler_flags ${_compiler_flags}) - list(APPEND ${_out_compile_flags} ${_compiler_flags}) - - # This gets any specific definitions that were added with set-target-property - get_target_property(_target_defs ${_target_name} COMPILE_DEFINITIONS) - if (_target_defs) - foreach(item ${_target_defs}) - list(APPEND ${_out_compile_flags} -D${item}) - endforeach(item) - endif() - -ENDMACRO(_PCH_GET_COMPILE_FLAGS) - -MACRO(add_pch _target_name _header_filename _src_list) - - get_filename_component(FILE ${_header_filename} NAME) - set(_gch_filename "${_target_name}_${FILE}.gch") - list(APPEND ${_src_list} ${_gch_filename}) - _PCH_GET_COMPILE_FLAGS(${_target_name} _args ${_header_filename}) - file(REMOVE ${_gch_filename}) - add_custom_command( - OUTPUT ${_gch_filename} - COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${_args} - DEPENDS ${_header_filename}) - -ENDMACRO(add_pch _target_name _header_filename _src_list) - -MACRO(spec2def _target_name _spec_file _def_file) - - add_custom_command( - OUTPUT ${_def_file} - COMMAND native-winebuild -o ${_def_file} --def -E ${_spec_file} --filename ${_target_name}.dll - DEPENDS native-winebuild) - set_source_files_properties(${_def_file} PROPERTIES GENERATED TRUE) - add_custom_target(${_target_name}_def ALL DEPENDS ${_def_file}) - -ENDMACRO(spec2def _target_name _spec_file _def_file) - -MACRO(CreateBootSectorTarget _target_name _asm_file _object_file) - - get_filename_component(OBJECT_PATH ${_object_file} PATH) - file(MAKE_DIRECTORY ${OBJECT_PATH}) - get_directory_property(defines COMPILE_DEFINITIONS) - get_directory_property(includes INCLUDE_DIRECTORIES) - - foreach(arg ${defines}) - set(result_defs ${result_defs} -D${arg}) - endforeach(arg ${defines}) - - foreach(arg ${includes}) - set(result_incs -I${arg} ${result_incs}) - endforeach(arg ${includes}) - - add_custom_command( - OUTPUT ${_object_file} - COMMAND nasm -o ${_object_file} ${result_incs} ${result_defs} -f bin ${_asm_file} - DEPENDS native-winebuild) - set_source_files_properties(${_object_file} PROPERTIES GENERATED TRUE) - add_custom_target(${_target_name} ALL DEPENDS ${_object_file}) - -ENDMACRO(CreateBootSectorTarget _target_name _asm_file _object_file) + +MACRO(_PCH_GET_COMPILE_FLAGS _target_name _out_compile_flags _header_filename) + + # Add the precompiled header to the build + get_filename_component(FILE ${_header_filename} NAME) + set(_gch_filename "${_target_name}_${FILE}.gch") + list(APPEND ${_out_compile_flags} -c ${_header_filename} -o ${_gch_filename}) + + # This gets us our includes + get_directory_property(DIRINC INCLUDE_DIRECTORIES) + foreach(item ${DIRINC}) + list(APPEND ${_out_compile_flags} -I${item}) + endforeach(item) + + # This is a particular bit of undocumented/hacky magic I'm quite proud of + get_directory_property(_compiler_flags DEFINITIONS) + string(REPLACE "\ " "\t" _compiler_flags ${_compiler_flags}) + list(APPEND ${_out_compile_flags} ${_compiler_flags}) + + # This gets any specific definitions that were added with set-target-property + get_target_property(_target_defs ${_target_name} COMPILE_DEFINITIONS) + if (_target_defs) + foreach(item ${_target_defs}) + list(APPEND ${_out_compile_flags} -D${item}) + endforeach(item) + endif() + +ENDMACRO(_PCH_GET_COMPILE_FLAGS) + +MACRO(add_pch _target_name _header_filename _src_list) + + get_filename_component(FILE ${_header_filename} NAME) + set(_gch_filename "${_target_name}_${FILE}.gch") + list(APPEND ${_src_list} ${_gch_filename}) + _PCH_GET_COMPILE_FLAGS(${_target_name} _args ${_header_filename}) + file(REMOVE ${_gch_filename}) + add_custom_command( + OUTPUT ${_gch_filename} + COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${_args} + DEPENDS ${_header_filename}) + +ENDMACRO(add_pch _target_name _header_filename _src_list) + +MACRO(spec2def _target_name _spec_file _def_file) + + add_custom_command( + OUTPUT ${_def_file} + COMMAND native-winebuild -o ${_def_file} --def -E ${_spec_file} --filename ${_target_name}.dll + DEPENDS native-winebuild) + set_source_files_properties(${_def_file} PROPERTIES GENERATED TRUE) + add_custom_target(${_target_name}_def ALL DEPENDS ${_def_file}) + +ENDMACRO(spec2def _target_name _spec_file _def_file) + +if (NOT MSVC) +MACRO(CreateBootSectorTarget _target_name _asm_file _object_file) + + get_filename_component(OBJECT_PATH ${_object_file} PATH) + file(MAKE_DIRECTORY ${OBJECT_PATH}) + get_directory_property(defines COMPILE_DEFINITIONS) + get_directory_property(includes INCLUDE_DIRECTORIES) + + foreach(arg ${defines}) + set(result_defs ${result_defs} -D${arg}) + endforeach(arg ${defines}) + + foreach(arg ${includes}) + set(result_incs -I${arg} ${result_incs}) + endforeach(arg ${includes}) + + add_custom_command( + OUTPUT ${_object_file} + COMMAND nasm -o ${_object_file} ${result_incs} ${result_defs} -f bin ${_asm_file} + DEPENDS native-winebuild) + set_source_files_properties(${_object_file} PROPERTIES GENERATED TRUE) + add_custom_target(${_target_name} ALL DEPENDS ${_object_file}) + +ENDMACRO(CreateBootSectorTarget _target_name _asm_file _object_file) +else() +MACRO(CreateBootSectorTarget _target_name _asm_file _object_file) +ENDMACRO() +endif() + +MACRO(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>" "${CMAKE_IDL_COMPILER}" IDL_COMMAND "${IDL_COMMAND}") + STRING(REPLACE <FLAGS> "${FLAGS}" IDL_COMMAND "${IDL_COMMAND}") + STRING(REPLACE "<DEFINES>" "${DEFINES}" IDL_COMMAND "${IDL_COMMAND}") + STRING(REPLACE "<OBJECT>" "${OBJECT}" IDL_COMMAND "${IDL_COMMAND}") + STRING(REPLACE "<SOURCE>" "${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) + MACRO_IDL_COMPILE_OBJECT(${OBJECT} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE}) + LIST(APPEND OBJECTS ${OBJECT}) + ENDFOREACH() + ADD_CUSTOM_TARGET(${TARGET} ALL DEPENDS ${OBJECTS}) +ENDMACRO()
Modified: branches/cmake-bringup/include/psdk/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/include/psdk/CMake... ============================================================================== --- branches/cmake-bringup/include/psdk/CMakeLists.txt [iso-8859-1] (original) +++ branches/cmake-bringup/include/psdk/CMakeLists.txt [iso-8859-1] Tue Sep 21 02:31:09 2010 @@ -1,56 +1,113 @@
-MACRO (MACRO_ADD_PSDK_INTERFACES) +LIST(APPEND SOURCE +# access.idl + activaut.idl +# asynot.idl +# asysta.idl + bdaiface.idl +# binres.idl + bits.idl + bits1_5.idl +# cmdbas.idl +# cmdtxt.idl + comcat.idl + commoncontrols.idl + control.idl +# crtrow.idl + ctxtcall.idl +# dbccmd.idl +# dbcses.idl +# dbdsad.idl +# dbinit.idl +# dbprop.idl +# dbs.idl + devenum.idl + dimm.idl + dispex.idl + docobj.idl + downloadmgr.idl +# dyngraph.idl + exdisp.idl + fusion.idl + hlink.idl + htiframe.idl + iads.idl + icftypes.idl + imnact.idl + imnxport.idl + indexsrv.idl + mimeinfo.idl + mimeole.idl + mscoree.idl + msdadc.idl + mshtmhst.idl + msinkaut.idl + mstask.idl + msxml.idl + msxml2.idl + netcon.idl + netfw.idl + oaidl.idl + objidl.idl + objsafe.idl + ocidl.idl + ocmm.idl + oleacc.idl + oledb.idl + oleidl.idl +# opnrst.idl + optary.idl + perhist.idl + propidl.idl + propsys.idl + pstore.idl + richole.idl +# row.idl +# rowchg.idl +# rstbas.idl +# rstinf.idl +# rstloc.idl + sensevts.idl + servprov.idl +# sesprp.idl + shdeprecated.idl + shldisp.idl + shtypes.idl +# stdole2.idl + strmif.idl + structuredquerycondition.idl + textstor.idl + tom.idl + tuner.idl + unknwn.idl + urlhist.idl + urlmon.idl + vmr9.idl +# vmrender.idl + wbemcli.idl + wia_lh.idl + wia_xp.idl + wtypes.idl + xmldom.idl + xmldso.idl + xmllite.idl)
- FOREACH(_in_FILE ${ARGN}) +if(NOT MSVC) + LIST(APPEND SOURCE + activscp.idl + activdbg.idl + asptlb.idl + ctfutb.idl + mlang.idl + msctf.idl + mshtml.idl + shobjidl.idl + wincodec.idl + wuapi.idl +) +endif()
- GET_FILENAME_COMPONENT(FILE ${_in_FILE} NAME_WE) - - ADD_CUSTOM_COMMAND( - OUTPUT ${REACTOS_BINARY_DIR}/include/psdk/${FILE}.h - COMMAND native-widl -I${REACTOS_SOURCE_DIR}/include/dxsdk -I. -I${REACTOS_SOURCE_DIR}/include -I${REACTOS_SOURCE_DIR}/include/psdk -m32 --win32 -h -H ${REACTOS_BINARY_DIR}/include/psdk/${FILE}.h ${REACTOS_SOURCE_DIR}/include/psdk/${FILE}.idl - DEPENDS native-widl - ) - - SET_SOURCE_FILES_PROPERTIES( - ${REACTOS_BINARY_DIR}/include/psdk/${FILE}.h - PROPERTIES - GENERATED TRUE - ) - - LIST(APPEND PSDK_HEADERS ${REACTOS_BINARY_DIR}/include/psdk/${FILE}.h) - - ENDFOREACH(_in_FILE ${ARGN}) - -ENDMACRO (MACRO_ADD_PSDK_INTERFACES) - -file(GLOB_RECURSE SOURCE "*.idl") -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/access.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/asynot.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/asysta.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/binres.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/cmdbas.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/cmdtxt.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/crtrow.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbccmd.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbcses.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbdsad.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbinit.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/vmrender.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/sesprp.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/stdole2.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/rstloc.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/rstbas.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/rstinf.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/rowchg.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/row.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/opnrst.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dyngraph.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbs.idl) -LIST(REMOVE_ITEM SOURCE ${REACTOS_SOURCE_DIR}/include/psdk/dbprop.idl) - -MACRO_ADD_PSDK_INTERFACES(${SOURCE}) - -ADD_CUSTOM_TARGET(psdk ALL DEPENDS ${PSDK_HEADERS}) +ADD_INTERFACE_DEFINITIONS(psdk ${SOURCE})
ADD_CUSTOM_COMMAND( OUTPUT ${REACTOS_BINARY_DIR}/include/psdk/stdole2.tlb @@ -60,4 +117,4 @@
SET_SOURCE_FILES_PROPERTIES(${REACTOS_BINARY_DIR}/include/psdk/stdole2.tlb PROPERTIES GENERATED TRUE)
-ADD_CUSTOM_TARGET(stdole2 ALL DEPENDS ${REACTOS_BINARY_DIR}/include/psdk/stdole2.tlb) +ADD_CUSTOM_TARGET(stdole2 ALL DEPENDS ${REACTOS_BINARY_DIR}/include/psdk/stdole2.tlb)
Modified: branches/cmake-bringup/toolchain-mingw32.cmake URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/toolchain-mingw32.... ============================================================================== --- branches/cmake-bringup/toolchain-mingw32.cmake [iso-8859-1] (original) +++ branches/cmake-bringup/toolchain-mingw32.cmake [iso-8859-1] Tue Sep 21 02:31:09 2010 @@ -26,7 +26,9 @@ SET(CMAKE_RC_COMPILER ${MINGW_PREFIX}windres) SET(CMAKE_ASM_COMPILER ${MINGW_PREFIX}gcc) SET(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -x assembler-with-cpp -o <OBJECT> <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>") +SET(CMAKE_IDL_COMPILER native-widl)
+SET(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> -m32 --win32 -h -H <OBJECT> <SOURCE>") SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> <CMAKE_C_LINK_FLAGS> <DEFINES> -I${REACTOS_SOURCE_DIR}/include/psdk -I${REACTOS_BINARY_DIR}/include/psdk -I${REACTOS_SOURCE_DIR}/include/ -I${REACTOS_SOURCE_DIR}/include/reactos -I${REACTOS_BINARY_DIR}/include/reactos -I${REACTOS_SOURCE_DIR}/include/reactos/wine -I${REACTOS_SOURCE_DIR}/include/crt -I${REACTOS_SOURCE_DIR}/include/crt/mingw32 -O coff -o <OBJECT> ")
# Use stdcall fixups, and don't link with anything by default unless we say so
Modified: branches/cmake-bringup/toolchain-msvc.cmake URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/toolchain-msvc.cma... ============================================================================== --- branches/cmake-bringup/toolchain-msvc.cmake [iso-8859-1] (original) +++ branches/cmake-bringup/toolchain-msvc.cmake [iso-8859-1] Tue Sep 21 02:31:09 2010 @@ -29,8 +29,10 @@ set(CMAKE_CXX_COMPILER cl) SET(CMAKE_RC_COMPILER rc) SET(CMAKE_ASM_COMPILER ml) +SET(CMAKE_IDL_COMPILER midl)
SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <DEFINES> /I${REACTOS_SOURCE_DIR}/include/psdk /I${REACTOS_BINARY_DIR}/include/psdk /I${REACTOS_SOURCE_DIR}/include /I${REACTOS_SOURCE_DIR}/include/reactos /I${REACTOS_BINARY_DIR}/include/reactos /I${REACTOS_SOURCE_DIR}/include/reactos/wine /I${REACTOS_SOURCE_DIR}/include/crt /I${REACTOS_SOURCE_DIR}/include/crt/mingw32 /fo <OBJECT> <SOURCE>") +SET(CMAKE_IDL_COMPILE_OBJECT "<CMAKE_IDL_COMPILER> <FLAGS> <DEFINES> /win32 /h <OBJECT> <SOURCE>")
set(CMAKE_C_FLAGS_INIT "/DWIN32 /D_WINDOWS /W1 /Zm1000") set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od")