mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 16:46:47 +00:00
Add experimental FAST_BUILD option
Significantly reduces compile time for the FairMQ target with precompiled headers and unity build. For maximum improvement, use a multi-core-aware build tool, e.g. Ninja. Leave it undocumented for now, let's first test it internally for a while.
This commit is contained in:
parent
aee2ba7b9b
commit
c8bd19b7a1
|
@ -34,10 +34,26 @@ cmake_dependent_option(BUILD_OFI_TRANSPORT "Build experimental OFI transport." O
|
||||||
cmake_dependent_option(BUILD_DDS_PLUGIN "Build DDS plugin." OFF "BUILD_FAIRMQ" OFF)
|
cmake_dependent_option(BUILD_DDS_PLUGIN "Build DDS plugin." OFF "BUILD_FAIRMQ" OFF)
|
||||||
cmake_dependent_option(BUILD_EXAMPLES "Build FairMQ examples." ON "BUILD_FAIRMQ" OFF)
|
cmake_dependent_option(BUILD_EXAMPLES "Build FairMQ examples." ON "BUILD_FAIRMQ" OFF)
|
||||||
option(BUILD_DOCS "Build FairMQ documentation." OFF)
|
option(BUILD_DOCS "Build FairMQ documentation." OFF)
|
||||||
|
option(FAST_BUILD "Fast production build. Not recommended for development." OFF)
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
# Dependencies #################################################################
|
# Dependencies #################################################################
|
||||||
|
if(FAST_BUILD)
|
||||||
|
include(cotire)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(find_msgpack)
|
||||||
|
if(NOT msgpack_FOUND)
|
||||||
|
find_package2(PRIVATE msgpack VERSION 3.0.0)
|
||||||
|
set(PROJECT_msgpack_VERSION 2.1.5)
|
||||||
|
if(NOT msgpack_FOUND)
|
||||||
|
find_package2(PRIVATE msgpack VERSION 2.1.5 REQUIRED)
|
||||||
|
endif()
|
||||||
|
set(msgpack_ROOT ${PACKAGE_PREFIX_DIR})
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
28
COPYRIGHT
28
COPYRIGHT
|
@ -11,5 +11,31 @@ Comment: The copyright of individual contributors is documented in the
|
||||||
Git history.
|
Git history.
|
||||||
License: LGPL-3.0-only
|
License: LGPL-3.0-only
|
||||||
|
|
||||||
|
Files: cmake/cotire.cmake
|
||||||
|
Copyright: 2012-2018 Sascha Kratky
|
||||||
|
License: COTIRE
|
||||||
|
|
||||||
License: LGPL-3.0-only
|
License: LGPL-3.0-only
|
||||||
[see LICENSE file]
|
[see LICENSE file]
|
||||||
|
|
||||||
|
License: COTIRE
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
4190
cmake/cotire.cmake
Normal file
4190
cmake/cotire.cmake
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -191,17 +191,25 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/options/startConfigExample.sh.in ${CM
|
||||||
#################################
|
#################################
|
||||||
# define libFairMQ build target #
|
# define libFairMQ build target #
|
||||||
#################################
|
#################################
|
||||||
add_library(FairMQ SHARED
|
if(FAST_BUILD)
|
||||||
|
set(_target FairMQ_)
|
||||||
|
else()
|
||||||
|
set(_target FairMQ)
|
||||||
|
endif()
|
||||||
|
add_library(${_target} SHARED
|
||||||
${FAIRMQ_SOURCE_FILES}
|
${FAIRMQ_SOURCE_FILES}
|
||||||
${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration
|
${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration
|
||||||
${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration
|
${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration
|
||||||
)
|
)
|
||||||
set_target_properties(FairMQ PROPERTIES LABELS coverage)
|
set_target_properties(${_target} PROPERTIES LABELS coverage)
|
||||||
|
if(FAST_BUILD)
|
||||||
|
set_target_properties(${_target} PROPERTIES OUTPUT_NAME FairMQ)
|
||||||
|
endif()
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
# include directories #
|
# include directories #
|
||||||
#######################
|
#######################
|
||||||
target_include_directories(FairMQ
|
target_include_directories(${_target}
|
||||||
PUBLIC # consumers inherit public include directories
|
PUBLIC # consumers inherit public include directories
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
|
||||||
|
@ -219,7 +227,10 @@ endif()
|
||||||
if(BUILD_OFI_TRANSPORT)
|
if(BUILD_OFI_TRANSPORT)
|
||||||
set(OFI_DEPS OFI::libfabric protobuf::libprotobuf $<TARGET_OBJECTS:OfiTransport>)
|
set(OFI_DEPS OFI::libfabric protobuf::libprotobuf $<TARGET_OBJECTS:OfiTransport>)
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(FairMQ
|
set(optional_deps ${NANOMSG_DEPS} ${OFI_DEPS})
|
||||||
|
list(REMOVE_DUPLICATES optional_deps)
|
||||||
|
|
||||||
|
target_link_libraries(${_target}
|
||||||
INTERFACE # only consumers link against interface dependencies
|
INTERFACE # only consumers link against interface dependencies
|
||||||
|
|
||||||
PUBLIC # libFairMQ AND consumers of libFairMQ link aginst public dependencies
|
PUBLIC # libFairMQ AND consumers of libFairMQ link aginst public dependencies
|
||||||
|
@ -246,6 +257,20 @@ set_target_properties(FairMQ PROPERTIES
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
##############
|
||||||
|
# fast build #
|
||||||
|
##############
|
||||||
|
if(FAST_BUILD)
|
||||||
|
set_target_properties(${_target} PROPERTIES
|
||||||
|
COTIRE_UNITY_TARGET_NAME "FairMQ"
|
||||||
|
# COTIRE_ENABLE_PRECOMPILED_HEADER FALSE
|
||||||
|
EXCLUDE_FROM_ALL TRUE
|
||||||
|
)
|
||||||
|
cotire(${_target})
|
||||||
|
set_target_properties(FairMQ PROPERTIES EXCLUDE_FROM_ALL FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# executables #
|
# executables #
|
||||||
###############
|
###############
|
||||||
|
|
Loading…
Reference in New Issue
Block a user