Freestyle: Use precompiled headers with MSVC.
authorRay Molenkamp <github@lazydodo.com>
Thu, 6 Jun 2019 01:05:16 +0000 (19:05 -0600)
committerRay Molenkamp <github@lazydodo.com>
Thu, 6 Jun 2019 01:05:16 +0000 (19:05 -0600)
This brings down the build time for freestyle with MSVC from a
minute to 10-20 seconds.

vs2019 bf_freestyle debug   before: 60464 ms  after: 11028 ms
vs2019 bf_freestyle release before: 56984 ms  after: 20526 ms

Differential Revision: https://developer.blender.org/D2606

Reviewed By: brecht , sergey

build_files/cmake/macros.cmake
source/blender/freestyle/CMakeLists.txt
source/blender/freestyle/FRS_precomp.cpp [new file with mode: 0644]
source/blender/freestyle/FRS_precomp.h [new file with mode: 0644]

index 5fd677e..42f707d 100644 (file)
@@ -1220,3 +1220,11 @@ macro(WINDOWS_SIGN_TARGET target)
     endif()
   endif()
 endmacro()
+
+MACRO(blender_precompile_headers target cpp header)
+  if (MSVC AND NOT MSVC_CLANG)
+               target_sources(${target} PRIVATE ${cpp} ${header})
+               set_target_properties(${target} PROPERTIES COMPILE_FLAGS "/Yu${header} /FI${header}")
+               set_source_files_properties(${cpp} PROPERTIES COMPILE_FLAGS "/Yc${header}")
+       endif()
+ENDMACRO()
index e6e72ea..253fcec 100644 (file)
@@ -586,3 +586,4 @@ if(WIN32)
 endif()
 
 blender_add_lib(bf_freestyle "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
+blender_precompile_headers(bf_freestyle FRS_precomp.cpp FRS_precomp.h)
diff --git a/source/blender/freestyle/FRS_precomp.cpp b/source/blender/freestyle/FRS_precomp.cpp
new file mode 100644 (file)
index 0000000..771f5bf
--- /dev/null
@@ -0,0 +1 @@
+#include "FRS_precomp.h"
\ No newline at end of file
diff --git a/source/blender/freestyle/FRS_precomp.h b/source/blender/freestyle/FRS_precomp.h
new file mode 100644 (file)
index 0000000..6b9abff
--- /dev/null
@@ -0,0 +1,46 @@
+#include <Python.h>
+#include <pthread.h>
+#include <string>
+#include <vector>
+#include <iostream>
+#include <math.h>
+#include <stdbool.h>
+#include <algorithm>
+#include <time.h>
+#include <iterator>
+#include <memory>
+#include <set>
+#include <map>
+#include <list>
+#include <deque>
+#include <sstream>
+#include <stdarg.h>
+#include <fstream>
+#include <iomanip>
+#include <stack>
+#include "intern/python/BPy_BBox.h"
+#include "intern/python/BPy_BinaryPredicate0D.h"
+#include "intern/python/BPy_BinaryPredicate1D.h"
+#include "intern/python/BPy_ContextFunctions.h"
+#include "intern/python/BPy_Convert.h"
+#include "intern/python/BPy_Freestyle.h"
+#include "intern/python/BPy_FrsMaterial.h"
+#include "intern/python/BPy_FrsNoise.h"
+#include "intern/python/BPy_Id.h"
+#include "intern/python/BPy_IntegrationType.h"
+#include "intern/python/BPy_Interface0D.h"
+#include "intern/python/BPy_Interface1D.h"
+#include "intern/python/BPy_Iterator.h"
+#include "intern/python/BPy_MediumType.h"
+#include "intern/python/BPy_Nature.h"
+#include "intern/python/BPy_Operators.h"
+#include "intern/python/BPy_SShape.h"
+#include "intern/python/BPy_StrokeAttribute.h"
+#include "intern/python/BPy_StrokeShader.h"
+#include "intern/python/BPy_UnaryFunction0D.h"
+#include "intern/python/BPy_UnaryFunction1D.h"
+#include "intern/python/BPy_UnaryPredicate0D.h"
+#include "intern/python/BPy_UnaryPredicate1D.h"
+#include "intern/python/BPy_ViewMap.h"
+#include "intern/python/BPy_ViewShape.h"
+#include "intern/python/Director.h"