Blob Blame History Raw
From 21395b23947df7e2b5e0c93626453aeacdee026c Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 16 Jan 2018 10:25:50 +0100
Subject: [PATCH] Reduce the needed memory for compilation

The linking of rootcling_stage1 and libCling requires a lot of memory.
Since these are linked from mostly the same objects, the build is
ready to link them at the same time. If you make a parallel build this
means that the two targets that require the most amount of memory are
being linked in parallel. This exhausts the available memory, and the
computer starts swapping.

This commit adds a dependency of one of the targets to the other. The
dependency is not really there since it is not needed for building,
but it prevents the two memory consuming targets to be built in
parallel.

A similar dependency existed before the latest code changes (see
commit 2638f6fc7f54b0995f2f9d60363daaf8aae2386e), then between
rootcling and libCling.
---
 core/metacling/src/CMakeLists.txt | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/core/metacling/src/CMakeLists.txt b/core/metacling/src/CMakeLists.txt
index 2923345f7c..b44a4d4115 100644
--- a/core/metacling/src/CMakeLists.txt
+++ b/core/metacling/src/CMakeLists.txt
@@ -114,6 +114,11 @@ ROOT_LINKER_LIBRARY(Cling
         $<TARGET_OBJECTS:MetaCling>
         LIBRARIES ${CLING_LIBRARIES} ${LINK_LIBS} ${CLING_PLUGIN_LINK_LIBS})
 
+# The dependency on rootcling_stage1 was added to prevent Cling (libCling) and
+# rootcling_stage1 from being linked in parallel.
+# This avoids doing two memory consuming operations in parallel.
+add_dependencies(Cling rootcling_stage1)
+
 if(MSVC)
   set_target_properties(Cling PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
   set(cling_exports
-- 
2.26.2