cotire icon indicating copy to clipboard operation
cotire copied to clipboard

Precompiled headers not used in unity target

Open mirkow opened this issue 9 years ago • 4 comments

When using a unity target the precompiled headers are not used. Is this normal or am I doing something wrong?

As you can see below for the normal target the precompiled header is found and used but not for the unity target.

normal target:

15:56:47: Running steps for project MyProjectCore...
15:56:47: Starting: "/usr/bin/ninja" MyProjectCore

....

[41/78 3.5/sec] Building CXX object source/MyProjectCore/core/CMakeFiles/MyProjectCore.dir/ManagedIceObject.cpp.o
! /media/waechter/compilation/waechter/MyProject/MyProjectCore/build/source/MyProjectCore/core/cotire/MyProjectCore_CXX_prefix.hxx.gch
. ../source/MyProjectCore/core/logging/MyProjectLogBuf.h
.. /usr/include/c++/4.8/streambuf
.. ../source/MyProjectCore/core/logging/LogSender.h
... ../source/MyProjectCore/core/util/PrecompilationIncludes.h
.... ../source/MyProjectCore/core/util/PrecompilationIncludesInternal.h
..... /usr/include/boost/lexical_cast.hpp
..... /usr/include/boost/algorithm/string/split.hpp
..... /usr/include/boost/algorithm/string.hpp
..... /usr/include/boost/thread/locks.hpp
..... /usr/include/boost/shared_ptr.hpp
..... /usr/include/boost/thread/mutex.hpp
..... /usr/include/boost/thread/recursive_mutex.hpp
..... /usr/include/boost/thread/shared_mutex.hpp
..... /usr/include/boost/thread/condition_variable.hpp
..... /usr/include/boost/regex.hpp
..... /usr/include/boost/utility/enable_if.hpp
..... /usr/include/boost/type_traits/is_base_of.hpp
..... /usr/include/boost/static_assert.hpp
..... /usr/include/boost/unordered_map.hpp
..... /usr/include/boost/logic/tribool.hpp
..... /usr/include/boost/program_options.hpp
..... /usr/include/c++/4.8/vector
..... /usr/include/c++/4.8/map
..... /usr/include/c++/4.8/string
..... /usr/include/c++/4.8/iostream
..... /usr/include/c++/4.8/limits
..... /usr/include/Ice/Ice.h
... ../source/MyProjectCore/core/system/ImportExport.h
... ../source/MyProjectCore/core/util/StringHelpers.h
.... /usr/include/c++/4.8/sstream
.... ../source/MyProjectCore/core/system/Synchronization.h
..... ../source/MyProjectCore/core/exceptions/Exception.h
...... source/MyProjectCore/interface/core/UserException.h
....... /usr/include/Ice/ProxyF.h
....... /usr/include/Ice/ObjectF.h
....... /usr/include/Ice/Exception.h
....... /usr/include/Ice/LocalObject.h
....... /usr/include/Ice/StreamHelpers.h
....... /usr/include/Ice/FactoryTableInit.h
....... /usr/include/IceUtil/ScopedArray.h
....... /usr/include/IceUtil/Optional.h
....... /usr/include/Ice/StreamF.h
....... /usr/include/Ice/UndefSysMacros.h
...... /usr/include/c++/4.8/exception
.... /usr/include/c++/4.8/cxxabi.h
.... /usr/include/boost/algorithm/string/classification.hpp
... source/MyProjectCore/interface/core/Log.h
.... /usr/include/Ice/Proxy.h
.... /usr/include/Ice/Object.h
.... /usr/include/Ice/Outgoing.h
.... /usr/include/Ice/OutgoingAsync.h
.... /usr/include/Ice/Incoming.h
.... /usr/include/Ice/Direct.h
. ../source/MyProjectCore/core/logging/../system/Synchronization.h

......

15:57:16: The process "/usr/bin/ninja" exited normally.
15:57:16: Elapsed time: 00:29.

unity target:


15:50:33: Running steps for project MyProjectCore...
15:50:33: Starting: "/usr/bin/ninja" MyProjectCore_unity
[0/3 ?/sec] Building CXX object source/MyProjectCore/core/CMakeFiles/MyProjectCore_unity.dir/cotire/MyProjectCore_CXX_unity_0_5.cxx.o
. /media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/MyProjectManager.cpp
.. /media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/MyProjectManager.h
... ../source/MyProjectCore/core/util/PrecompilationIncludes.h
.... ../source/MyProjectCore/core/util/PrecompilationIncludesInternal.h
..... /usr/include/boost/lexical_cast.hpp
...... /usr/include/boost/config.hpp
....... /usr/include/boost/config/user.hpp
....... /usr/include/boost/config/select_compiler_config.hpp
....... /usr/include/boost/config/compiler/gcc.hpp
....... /usr/include/boost/config/select_stdlib_config.hpp
........ /usr/include/c++/4.8/cstddef
......... /usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h
.......... /usr/include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h
........... /usr/include/features.h

... a lot more includes

Multiple include guards may be useful for:
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/MyProjectManager.cpp
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/MyProjectObjectObserver.cpp
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/MyProjectObjectScheduler.cpp
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/Component.cpp
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/IceGridAdmin.cpp
/media/waechter/compilation/waechter/MyProject/MyProjectCore/source/MyProjectCore/core/ManagedIceObject.cpp
/usr/include/boost/bind/mem_fn_cc.hpp
/usr/include/boost/bind/mem_fn_template.hpp
/usr/include/boost/config/compiler/gcc.hpp
/usr/include/boost/config/platform/linux.hpp
/usr/include/boost/config/posix_features.hpp
/usr/include/boost/config/select_compiler_config.hpp
/usr/include/boost/config/select_platform_config.hpp
/usr/include/boost/config/select_stdlib_config.hpp
/usr/include/boost/config/stdlib/libstdcpp3.hpp
/usr/include/boost/config/user.hpp
/usr/include/boost/date_time/gregorian_calendar.ipp
/usr/include/boost/detail/fenv.hpp
/usr/include/boost/mpl/apply_fwd.hpp
/usr/include/boost/mpl/aux_/advance_backward.hpp
/usr/include/boost/mpl/aux_/advance_forward.hpp
/usr/include/boost/mpl/aux_/full_lambda.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/and.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/apply.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/arg.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/bind.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/greater.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/less.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/list.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/minus.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/or.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/plus.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/quote.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/times.hpp
/usr/include/boost/mpl/aux_/preprocessed/gcc/vector.hpp
/usr/include/boost/mpl/aux_/template_arity.hpp
/usr/include/boost/mpl/bind.hpp
/usr/include/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
/usr/include/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
/usr/include/boost/mpl/quote.hpp
/usr/include/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp
/usr/include/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp
/usr/include/boost/numeric/conversion/detail/numeric_cast_traits.hpp
/usr/include/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
/usr/include/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp
/usr/include/boost/program_options/detail/value_semantic.hpp
/usr/include/boost/regex/user.hpp
/usr/include/boost/type_traits/detail/is_function_ptr_helper.hpp
/usr/include/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
/usr/include/boost/type_traits/detail/size_t_trait_def.hpp
/usr/include/boost/type_traits/detail/size_t_trait_undef.hpp
/usr/include/c++/4.8/cfloat
/usr/include/c++/4.8/clocale
/usr/include/limits.h
/usr/include/linux/errno.h
/usr/include/x86_64-linux-gnu/asm/errno.h
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h
/usr/include/x86_64-linux-gnu/bits/byteswap.h
/usr/include/x86_64-linux-gnu/bits/confname.h
/usr/include/x86_64-linux-gnu/bits/endian.h
/usr/include/x86_64-linux-gnu/bits/environments.h
/usr/include/x86_64-linux-gnu/bits/errno.h
/usr/include/x86_64-linux-gnu/bits/fenv.h
/usr/include/x86_64-linux-gnu/bits/huge_val.h
/usr/include/x86_64-linux-gnu/bits/huge_valf.h
/usr/include/x86_64-linux-gnu/bits/huge_vall.h
/usr/include/x86_64-linux-gnu/bits/inf.h
/usr/include/x86_64-linux-gnu/bits/local_lim.h
/usr/include/x86_64-linux-gnu/bits/mathdef.h
/usr/include/x86_64-linux-gnu/bits/nan.h
/usr/include/x86_64-linux-gnu/bits/sched.h
/usr/include/x86_64-linux-gnu/bits/select.h
/usr/include/x86_64-linux-gnu/bits/sigset.h
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
/usr/include/x86_64-linux-gnu/bits/typesizes.h
/usr/include/x86_64-linux-gnu/bits/waitflags.h
/usr/include/x86_64-linux-gnu/bits/waitstatus.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/ctype_base.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/ctype_inline.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/messages_members.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/time_members.h
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h
/usr/include/x86_64-linux-gnu/gnu/stubs.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/syslimits.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/adxintrin.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ia32intrin.h
[1/3 0.1/sec] Linking CXX shared library lib/unity/libMyProjectCore.so.0.7.7
[2/3 0.2/sec] Creating library symlink lib/unity/libMyProjectCore.so.0 lib/unity/libMyProjectCore.so
15:50:43: The process "/usr/bin/ninja" exited normally.
15:50:43: Elapsed time: 00:10.

mirkow avatar Dec 13 '15 15:12 mirkow

Pretty sure that's normal since a unity build would not benefits from using a precompiled header.

gcamp avatar May 08 '17 21:05 gcamp

Why not? A unity build includes a few of my own files that change frequently, and a lot of system includes that never change. If I modify my code and recompile, having the system includes precompiled could be much faster, no?

Is there a way to have a target with both unity and precompiled headers enabled?

chatziko avatar Jul 08 '17 11:07 chatziko

Any update on that point ?

leolchat avatar Jul 05 '18 01:07 leolchat

It is even more important when using cotire with COTIRE_MAXIMUM_NUMBER_OF_UNITY_INCLUDES

leolchat avatar Jul 09 '18 02:07 leolchat