Author: tkreuzer Date: Sun Apr 29 19:04:02 2012 New Revision: 56447
URL: http://svn.reactos.org/svn/reactos?rev=56447&view=rev Log: [CMAKE] - seperate generation of importlibs from spec2def (generate_import_lib function)
Modified: trunk/reactos/cmake/gcc.cmake trunk/reactos/cmake/msvc.cmake
Modified: trunk/reactos/cmake/gcc.cmake URL: http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/gcc.cmake?rev=56447&a... ============================================================================== --- trunk/reactos/cmake/gcc.cmake [iso-8859-1] (original) +++ trunk/reactos/cmake/gcc.cmake [iso-8859-1] Sun Apr 29 19:04:02 2012 @@ -217,11 +217,28 @@ set(DECO_OPTION "-@") endif()
+function(generate_import_lib _libname _dllname _spec_file) + # generate the def for the import lib + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def + COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) + set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def PROPERTIES EXTERNAL_OBJECT TRUE) + + #create normal importlib + _add_library(${_libname} STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def) + set_target_properties(${_libname} PROPERTIES LINKER_LANGUAGE "IMPLIB" PREFIX "") + + #create delayed importlib + _add_library(${_libname}_delayed STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def) + set_target_properties(${_libname}_delayed PROPERTIES LINKER_LANGUAGE "IMPLIB_DELAYED" PREFIX "") +endfunction() + # Cute little hack to produce import libs set(CMAKE_IMPLIB_CREATE_STATIC_LIBRARY "${CMAKE_DLLTOOL} --def <OBJECTS> --kill-at --output-lib=<TARGET>") set(CMAKE_IMPLIB_DELAYED_CREATE_STATIC_LIBRARY "${CMAKE_DLLTOOL} --def <OBJECTS> --kill-at --output-delaylib=<TARGET>") function(spec2def _dllname _spec_file) - # do we also want to add impotlib targets? + # do we also want to add importlib targets? if(${ARGC} GREATER 2) if(${ARGN} STREQUAL "ADD_IMPORTLIB") set(__add_importlib TRUE) @@ -245,20 +262,7 @@ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
if(__add_importlib) - # generate the def for the export lib - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}_implib.def - COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) - set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_file}_implib.def PROPERTIES EXTERNAL_OBJECT TRUE) - - #create normal importlib - _add_library(lib${_file} STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${_file}_implib.def) - set_target_properties(lib${_file} PROPERTIES LINKER_LANGUAGE "IMPLIB" PREFIX "") - - #create delayed importlib - _add_library(lib${_file}_delayed STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${_file}_implib.def) - set_target_properties(lib${_file}_delayed PROPERTIES LINKER_LANGUAGE "IMPLIB_DELAYED" PREFIX "") + generate_import_lib(lib${_file} ${_dllname} ${_spec_file}) endif() endfunction()
Modified: trunk/reactos/cmake/msvc.cmake URL: http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/msvc.cmake?rev=56447&... ============================================================================== --- trunk/reactos/cmake/msvc.cmake [iso-8859-1] (original) +++ trunk/reactos/cmake/msvc.cmake [iso-8859-1] Sun Apr 29 19:04:02 2012 @@ -124,6 +124,29 @@ target_link_libraries(${MODULE} delayimp) endmacro()
+function(generate_import_lib _libname _dllname _spec_file) + # Generate the asm stub file and the def file for import library + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_exp.def + COMMAND native-spec2def --ms --kill-at -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_exp.def -l=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) + + # be clear about the "language" + # Thanks MS for creating a stupid linker + set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm PROPERTIES LANGUAGE "STUB_ASM") + + # add our library + # NOTE: as stub file and def file are generated in one pass, depending on one is like depending on the other + add_library(${_libname} STATIC EXCLUDE_FROM_ALL + ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_stubs.asm) + + add_dependencies(${_libname} ${CMAKE_CURRENT_BINARY_DIR}\${_libname}_exp.def) + + # set correct "link rule" + set_target_properties(${_libname} PROPERTIES LINKER_LANGUAGE "IMPLIB" + STATIC_LIBRARY_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}\${_libname}_exp.def") +endfunction() + if(${ARCH} MATCHES amd64) add_definitions(/D__x86_64) set(SPEC2DEF_ARCH x86_64) @@ -154,24 +177,8 @@ COMMAND native-spec2def --ms --kill-at -a=${SPEC2DEF_ARCH} -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def)
- if(__add_importlib) - # Generate the asm stub file and the export def file for import library - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_stubs.asm ${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_exp.def - COMMAND native-spec2def --ms --kill-at -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_exp.def -l=${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_stubs.asm ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) - # be clear about the "language" - # Thanks MS for creating a stupid linker - set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_stubs.asm PROPERTIES LANGUAGE "STUB_ASM") - - # add our library - # NOTE: as stub file and def file are generated in one pass, depending on one is like depending on the other - add_library(lib${_file} STATIC EXCLUDE_FROM_ALL - ${CMAKE_CURRENT_BINARY_DIR}/lib${_file}_stubs.asm) - - # set correct "link rule" - set_target_properties(lib${_file} PROPERTIES LINKER_LANGUAGE "IMPLIB" - STATIC_LIBRARY_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}\lib${_file}_exp.def") + if(__add_importlib) + generate_import_lib(lib${_file} ${_dllname} ${_spec_file}) endif() endfunction()