Author: jgardou
Date: Tue Feb 21 14:32:05 2012
New Revision: 55776
URL:
http://svn.reactos.org/svn/reactos?rev=55776&view=rev
Log:
[CMAKE]
- generate 'real' libraries for import libraries
This way only the link step relies on them.
Should avoid rebuilding half of the tree next time Alex changes ntdll.spec
A relinking orgy is more than enough
Modified:
trunk/reactos/cmake/CMakeMacros.cmake
trunk/reactos/cmake/gcc.cmake
trunk/reactos/cmake/msvc.cmake
Modified: trunk/reactos/cmake/CMakeMacros.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/CMakeMacros.cmake?re…
==============================================================================
--- trunk/reactos/cmake/CMakeMacros.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/CMakeMacros.cmake [iso-8859-1] Tue Feb 21 14:32:05 2012
@@ -271,7 +271,7 @@
add_target_compile_definitions(${_module} _DLL __USE_CRTIMP)
target_link_libraries(${_module} msvcrtex)
endif()
- target_link_libraries(${_module}
${CMAKE_BINARY_DIR}/importlibs/lib${LIB}${CMAKE_STATIC_LIBRARY_SUFFIX})
+ target_link_libraries(${_module} lib${LIB})
add_dependencies(${_module} lib${LIB})
add_dependency_edge(${_module} ${LIB})
endforeach()
Modified: trunk/reactos/cmake/gcc.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/gcc.cmake?rev=55776&…
==============================================================================
--- trunk/reactos/cmake/gcc.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/gcc.cmake [iso-8859-1] Tue Feb 21 14:32:05 2012
@@ -182,8 +182,7 @@
function(add_delay_importlibs MODULE)
foreach(LIB ${ARGN})
- target_link_libraries(${MODULE}
${CMAKE_BINARY_DIR}/importlibs/lib${LIB}_delayed.a)
- add_dependencies(${MODULE} lib${LIB}_delayed)
+ target_link_libraries(${MODULE} lib${LIB}_delayed)
endforeach()
target_link_libraries(${MODULE} delayimp)
endfunction()
@@ -192,50 +191,32 @@
set(DECO_OPTION "-@")
endif()
+# 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(add_importlib_target _exports_file _implib_name)
-
get_filename_component(_name ${_exports_file} NAME_WE)
get_filename_component(_extension ${_exports_file} EXT)
if(${_extension} STREQUAL ".spec")
- # Normal importlib creation
+ # generate .def
add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.a
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def
COMMAND native-spec2def -n=${_implib_name} -a=${ARCH2}
-d=${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def
${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
- COMMAND ${CMAKE_DLLTOOL} --def
${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def --kill-at
--output-lib=${CMAKE_BINARY_DIR}/importlibs/lib${_name}.a
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file} native-spec2def)
-
- # Delayed importlib creation
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_delayed.a
- COMMAND native-spec2def -n=${_implib_name} -a=${ARCH2}
-d=${CMAKE_CURRENT_BINARY_DIR}/${_name}_delayed_implib.def
${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
- COMMAND ${CMAKE_DLLTOOL} --def
${CMAKE_CURRENT_BINARY_DIR}/${_name}_delayed_implib.def --kill-at --output-delaylib
${CMAKE_BINARY_DIR}/importlibs/lib${_name}_delayed.a
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file} native-spec2def)
-
- elseif(${_extension} STREQUAL ".def")
- message("Use of def files for import libs is deprecated:
${_exports_file}")
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.a
- COMMAND ${CMAKE_DLLTOOL} --def ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
--kill-at --output-lib=${CMAKE_BINARY_DIR}/importlibs/lib${_name}.a
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file})
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_delayed.a
- COMMAND ${CMAKE_DLLTOOL} --def ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
--kill-at --output-delaylib ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_delayed.a
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file})
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def
PROPERTIES EXTERNAL_OBJECT TRUE)
+
+ #create normal importlib
+ add_library(lib${_name} STATIC EXCLUDE_FROM_ALL
${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def)
+ set_target_properties(lib${_name} PROPERTIES LINKER_LANGUAGE "IMPLIB"
PREFIX "")
+
+ #create delayed importlib
+ add_library(lib${_name}_delayed STATIC EXCLUDE_FROM_ALL
${CMAKE_CURRENT_BINARY_DIR}/${_name}_implib.def)
+ set_target_properties(lib${_name}_delayed PROPERTIES LINKER_LANGUAGE
"IMPLIB" PREFIX "")
else()
message(FATAL_ERROR "Unsupported exports file extension:
${_extension}")
endif()
-
- # Normal importlib target
- add_custom_target(
- lib${_name}
- DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.a)
- # Delayed importlib target
- add_custom_target(
- lib${_name}_delayed
- DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_delayed.a)
-
endfunction()
function(spec2def _dllname _spec_file)
Modified: trunk/reactos/cmake/msvc.cmake
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/cmake/msvc.cmake?rev=55776…
==============================================================================
--- trunk/reactos/cmake/msvc.cmake [iso-8859-1] (original)
+++ trunk/reactos/cmake/msvc.cmake [iso-8859-1] Tue Feb 21 14:32:05 2012
@@ -131,6 +131,9 @@
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> ${rc_result_defs}
/I${CMAKE_CURRENT_SOURCE_DIR} ${rc_result_incs} /fo <OBJECT> <SOURCE>"
PARENT_SCOPE)
endfunction()
+#define those for having real libraries
+set(CMAKE_IMPLIB_CREATE_STATIC_LIBRARY "LINK /LIB /NOLOGO <LINK_FLAGS>
/OUT:<TARGET> <OBJECTS>")
+
# Thanks MS for creating a stupid linker
function(add_importlib_target _exports_file _implib_name)
@@ -138,43 +141,31 @@
# Generate the asm stub file and the export def file
add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm
${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def
- COMMAND native-spec2def --ms --kill-at -a=${SPEC2DEF_ARCH} --implib
-n=${_implib_name} -d=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def
-l=${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm
${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_stubs.asm
${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_exp.def
+ COMMAND native-spec2def --ms --kill-at -a=${SPEC2DEF_ARCH} --implib
-n=${_implib_name} -d=${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_exp.def
-l=${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_stubs.asm
${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_exports_file} native-spec2def)
-
- # Assemble the stub file
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj
- COMMAND ${CMAKE_ASM_COMPILER} /nologo /Cp
/Fo${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj /c /Ta
${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm
- DEPENDS "${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.asm")
-
- # Add neccessary importlibs for redirections
- set(_libraries "")
- set(_dependencies "")
- foreach(_lib ${ARGN})
- list(APPEND _libraries "${CMAKE_BINARY_DIR}/importlibs/${_lib}.lib")
- list(APPEND _dependencies ${_lib})
- endforeach()
-
- # Build the importlib
- add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib
- COMMAND LINK /LIB /NOLOGO /DEF:${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def
/OUT:${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib
${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj ${_libraries}
- DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}_stubs.obj
${CMAKE_BINARY_DIR}/importlibs/lib${_name}_exp.def)
-
- # Add the importlib target
- add_custom_target(
- lib${_name}
- DEPENDS ${CMAKE_BINARY_DIR}/importlibs/lib${_name}.lib)
-
- add_dependencies(lib${_name} asm ${_dependencies})
+ # be clear about the language
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_stubs.asm
PROPERTIES LANGUAGE "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${_name} STATIC
+ ${CMAKE_CURRENT_BINARY_DIR}/lib${_name}_stubs.asm)
+
+ # Add necessary importlibs for redirections. Still necessary ?
+ if(ARGN)
+ target_link_libraries(lib${_name} ${ARGN})
+ endif()
+
+ # set correct link rule
+ set_target_properties(lib${_name} PROPERTIES LINKER_LANGUAGE "IMPLIB"
+ STATIC_LIBRARY_FLAGS
"/DEF:${CMAKE_CURRENT_BINARY_DIR}\\lib${_name}_exp.def")
endfunction()
macro(add_delay_importlibs MODULE)
foreach(LIB ${ARGN})
add_target_link_flags(${MODULE} "/DELAYLOAD:${LIB}.dll")
- target_link_libraries(${MODULE} ${CMAKE_BINARY_DIR}/importlibs/lib${LIB}.LIB)
- add_dependencies(${MODULE} lib${LIB})
+ target_link_libraries(${MODULE} lib${LIB})
endforeach()
target_link_libraries(${MODULE} delayimp)
endmacro()