You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2019/05/13 22:17:25 UTC

[qpid-proton] branch master updated: PROTON-2048: Avoid recompiling some source files - The source of proton-core used to be compiled twice Once for qpid-proton-core and once for qpid-proton - Now use a cmake object library to only compile once - The test_main of catch2 is very template heavy and takes a lot of time on small machines to compile. It was previously recompiled for each of the C tests, now we use a cmake object library. - This reduces some CI build times by approx 20%

This is an automated email from the ASF dual-hosted git repository.

astitcher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git


The following commit(s) were added to refs/heads/master by this push:
     new c5367f5  PROTON-2048: Avoid recompiling some source files - The source of proton-core used to be compiled twice   Once for qpid-proton-core and once for qpid-proton - Now use a cmake object library to only compile once - The test_main of catch2 is very template heavy and takes   a lot of time on small machines to compile. It was previously   recompiled for each of the C tests, now we use a cmake object   library. - This reduces some CI build times by approx 20%
c5367f5 is described below

commit c5367f5307dae7909149875cca6b314603a33858
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Fri May 10 12:54:00 2019 -0400

    PROTON-2048: Avoid recompiling some source files
    - The source of proton-core used to be compiled twice
      Once for qpid-proton-core and once for qpid-proton
    - Now use a cmake object library to only compile once
    - The test_main of catch2 is very template heavy and takes
      a lot of time on small machines to compile. It was previously
      recompiled for each of the C tests, now we use a cmake object
      library.
    - This reduces some CI build times by approx 20%
---
 c/CMakeLists.txt       | 23 ++++++++++++++---------
 c/tests/CMakeLists.txt |  5 ++++-
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/c/CMakeLists.txt b/c/CMakeLists.txt
index effb96b..b6617d8 100644
--- a/c/CMakeLists.txt
+++ b/c/CMakeLists.txt
@@ -443,8 +443,19 @@ set(qpid-proton-core-src
   ${qpid-proton-include-generated}
 )
 
-add_library (qpid-proton-core SHARED ${qpid-proton-core-src})
-add_dependencies (qpid-proton-core generated_c_files)
+add_library (qpid-proton-core-objects OBJECT ${qpid-proton-core-src})
+add_dependencies (qpid-proton-core-objects generated_c_files)
+set_target_properties(qpid-proton-core-objects PROPERTIES POSITION_INDEPENDENT_CODE ON)
+target_compile_definitions(qpid-proton-core-objects PRIVATE qpid_proton_core_EXPORTS)
+
+# Can't use target_link_libraries() because cmake 2.8.12 doesn't allow object libraries as the first param
+# otherwise for cmake 3.9 and on this would be:
+#   target_link_libraries (qpid-proton-core-objects ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS})
+target_compile_definitions(qpid-proton-core-objects PRIVATE $<TARGET_PROPERTY:qpid-proton-core,COMPILE_DEFINITIONS>)
+target_compile_options    (qpid-proton-core-objects PRIVATE $<TARGET_PROPERTY:qpid-proton-core,COMPILE_OPTIONS>)
+target_include_directories(qpid-proton-core-objects PRIVATE $<TARGET_PROPERTY:qpid-proton-core,INCLUDE_DIRECTORIES>)
+
+add_library (qpid-proton-core SHARED $<TARGET_OBJECTS:qpid-proton-core-objects>)
 target_link_libraries (qpid-proton-core ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS})
 set_target_properties (qpid-proton-core
   PROPERTIES
@@ -458,12 +469,6 @@ if (BUILD_STATIC_LIBS)
 endif(BUILD_STATIC_LIBS)
 
 set(qpid-proton-src
-  # Proton Core
-  ${qpid-proton-core}
-  ${qpid-proton-layers}
-  ${qpid-proton-platform}
-  ${qpid-proton-include}
-  ${qpid-proton-include-generated}
   # Proactor
   ${qpid-proton-proactor}
   # Proton Reactor/Messenger
@@ -472,7 +477,7 @@ set(qpid-proton-src
   ${qpid-proton-include-extra}
 )
 
-add_library (qpid-proton SHARED ${qpid-proton-src})
+add_library (qpid-proton SHARED $<TARGET_OBJECTS:qpid-proton-core-objects> ${qpid-proton-src})
 target_link_libraries (qpid-proton LINK_PRIVATE ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS} ${PROACTOR_LIBS})
 set_target_properties (qpid-proton
   PROPERTIES
diff --git a/c/tests/CMakeLists.txt b/c/tests/CMakeLists.txt
index 3642112..ae75d2e 100644
--- a/c/tests/CMakeLists.txt
+++ b/c/tests/CMakeLists.txt
@@ -37,8 +37,11 @@ endif()
 # Tests for each library are combined in a single executable.
 
 if (CMAKE_CXX_COMPILER)
+
+  add_library(test_main OBJECT test_main.cpp)
+
   macro(add_c_test exe)
-    add_executable(${exe} test_main.cpp pn_test.cpp ${ARGN})
+    add_executable(${exe} $<TARGET_OBJECTS:test_main> pn_test.cpp ${ARGN})
     set_target_properties(${exe} PROPERTIES
       COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_WARNING_FLAGS}")
     add_test(NAME ${exe} COMMAND ${test_env} ${TEST_EXE_PREFIX_CMD} $<TARGET_FILE:${exe}>)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org