[CMAKE]
[reactos.git] / gcc.cmake
index 79a26fa..2f5225c 100644 (file)
--- a/gcc.cmake
+++ b/gcc.cmake
@@ -33,6 +33,18 @@ add_definitions(-Wall -Wno-char-subscripts -Wpointer-arith -Wno-multichar -Wno-e
 add_definitions(-Os -fno-strict-aliasing -ftracer -momit-leaf-frame-pointer -mpreferred-stack-boundary=2 -fno-set-stack-executable -fno-optimize-sibling-calls)
 
 # Macros
+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(add_linkerflag MODULE _flag)
     set(NEW_LINKER_FLAGS ${_flag})
     get_target_property(LINKER_FLAGS ${MODULE} LINK_FLAGS)
@@ -154,18 +166,15 @@ macro(add_importlib_target _def_file)
   # empty for now, while import libs are shipped
 endmacro()
 
-MACRO(spec2def _dllname _spec_file)
+macro(spec2def _dllname _spec_file)
     get_filename_component(_file ${_spec_file} NAME_WE)
     add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def
-        COMMAND native-winebuild -o ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def --def -E ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} --filename ${_dllname}
+        COMMAND native-spec2def --dll ${_dllname} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file})
     set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${_file}.def
         PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE)
-    add_custom_target(
-        ${_dllname}.def
-        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def)
-ENDMACRO(spec2def _dllname _spec_file)
+endmacro()
 
 # Optional 3rd parameter: dllname
 macro(set_export_spec _module _spec_file)
@@ -176,8 +185,6 @@ macro(set_export_spec _module _spec_file)
         set(_dllname ${_file}.dll)
     endif()
     spec2def(${_dllname} ${_spec_file})
-    target_link_libraries(${_module} "${CMAKE_CURRENT_BINARY_DIR}/${_file}.def")
-    add_dependencies(${_module} ${_dllname}.def)
 endmacro()
 
 #pseh lib, needed with mingw