Skip to content

Commit cecd0fb

Browse files
committed
top-level-only cmake
1 parent 079bab2 commit cecd0fb

8 files changed

+1128
-0
lines changed

0001-required-source-changes-for-windows-build.patch

Lines changed: 805 additions & 0 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
cmake_minimum_required(VERSION 3.7.0)
2+
include(CMakePrintHelpers)
3+
4+
# set the project name
5+
project(FastJetContrib VERSION 1.101)
6+
# set a pre-release version if relevant, e.g. "-beta1"
7+
#set(PROJECT_VERSION_PRERELEASE "")
8+
set(PROJECT_VERSION_PRERELEASE "-devel")
9+
10+
if(MSVC)
11+
execute_process(COMMAND
12+
git apply --whitespace=fix -p0 0001-required-source-changes-for-windows-build.patch
13+
WORKING_DIRECTORY
14+
${CMAKE_CURRENT_SOURCE_DIR}
15+
)
16+
endif()
17+
18+
#----------------------------------------------------------------------
19+
# version information
20+
set(FASTJETCONTRIB_VERSION "${PROJECT_VERSION}${PROJECT_VERSION_PRERELEASE}")
21+
22+
set(FASTJETCONTRIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
23+
set(FASTJETCONTRIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
24+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL "${PROJECT_VERSION_PATCH}")
25+
set(FASTJETCONTRIB_VERSION_PRERELEASE "${PROJECT_VERSION_PRERELEASE}")
26+
# build a unique version number
27+
if (FASTJETCONTRIB_VERSION_MINOR LESS 10)
28+
set(FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER "0${FASTJETCONTRIB_VERSION_MINOR}")
29+
else()
30+
set(FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER "${FASTJETCONTRIB_VERSION_MINOR}")
31+
endif()
32+
if (FASTJETCONTRIB_VERSION_PATCHLEVEL LESS 10)
33+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER "0${FASTJETCONTRIB_VERSION_PATCHLEVEL}")
34+
else()
35+
set(FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER "${FASTJETCONTRIB_VERSION_PATCHLEVEL}")
36+
endif()
37+
set(FASTJETCONTRIB_VERSION_NUMBER "${FASTJETCONTRIB_VERSION_MAJOR}${FASTJETCONTRIB_VERSION_MINOR_FOR_NUMBER}${FASTJETCONTRIB_VERSION_PATCHLEVEL_FOR_NUMBER}")
38+
39+
# print out the project name and version
40+
cmake_print_variables(PROJECT_NAME FASTJETCONTRIB_VERSION)
41+
42+
# need this to be able to set the installation prefix in fastjet-config
43+
include(GNUInstallDirs)
44+
45+
#----------------------------------------------------------------------
46+
# basic C++ checks
47+
#----------------------------------------------------------------------
48+
49+
# specify the C++ standard
50+
set(CMAKE_CXX_STANDARD 14)
51+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
52+
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
53+
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG")
54+
if (MSVC)
55+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
56+
endif()
57+
58+
59+
if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") # Intel compilers are used with -O3
60+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -Wshadow")
61+
elseif (MSVC)
62+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus /utf-8 /W4 /Ox")
63+
else()
64+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wshadow")
65+
endif()
66+
67+
# all contribs require fastjet so get it now!
68+
if(NOT TARGET fastjet::fastjet)
69+
find_package(fastjet REQUIRED)
70+
endif()
71+
72+
list(APPEND fjcontrib_DIRNAMES
73+
GenericSubtractor
74+
JetFFMoments
75+
VariableR
76+
Nsubjettiness
77+
EnergyCorrelator
78+
ScJet
79+
SubjetCounting
80+
JetCleanser
81+
JetsWithoutJets
82+
ConstituentSubtractor
83+
RecursiveTools
84+
SoftKiller
85+
ValenciaPlugin
86+
ClusteringVetoPlugin
87+
QCDAwarePlugin
88+
FlavorCone
89+
LundPlane
90+
Centauro
91+
KTClusCXX
92+
SignalFreeBackgroundEstimator
93+
IFNPlugin
94+
CMPPlugin
95+
SDFPlugin
96+
GHSAlgo
97+
)
98+
99+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
100+
string(TOUPPER ${FJCONTRIB_NAME} FJCONTRIB_NAME_UPPER)
101+
option(FASTJETCONTRIB_ENABLE_${FJCONTRIB_NAME_UPPER} "Enable the ${FJCONTRIB_NAME} Contrib [default=ON]" ON)
102+
endforeach()
103+
option(FASTJETCONTRIB_ENABLE_FRAGILELIB "Enable fragile combined mono-library [default=OFF]" OFF)
104+
105+
set(fjcontrib_combined_TARGETS)
106+
107+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
108+
109+
string(TOUPPER ${FJCONTRIB_NAME} FJCONTRIB_NAME_UPPER)
110+
string(TOLOWER ${FJCONTRIB_NAME} FJCONTRIB_NAME_LOWER)
111+
if (FASTJETCONTRIB_ENABLE_${FJCONTRIB_NAME_UPPER})
112+
configure_file(defines.h.in ${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h)
113+
114+
set(SRCLINE)
115+
set(INCLLINE)
116+
set(DEPLINE)
117+
file(STRINGS ${FJCONTRIB_NAME}/Makefile FJCONTRIB_MAKEFILE)
118+
while(FJCONTRIB_MAKEFILE)
119+
list(POP_FRONT FJCONTRIB_MAKEFILE MAKEFILE_LINE)
120+
#message("${MAKEFILE_LINE}")
121+
if(MAKEFILE_LINE MATCHES "^SRCS=")
122+
string(REPLACE "SRCS=" "" SRCLINE "${MAKEFILE_LINE}")
123+
set(${FJCONTRIB_NAME_LOWER}_SOURCES "${SRCLINE}")
124+
endif()
125+
if(MAKEFILE_LINE MATCHES "^INSTALLED_HEADERS=")
126+
string(REPLACE "INSTALLED_HEADERS=" "" INCLLINE "${MAKEFILE_LINE}")
127+
set(${FJCONTRIB_NAME_LOWER}_INCLUDES "${INCLLINE}")
128+
endif()
129+
if(MAKEFILE_LINE MATCHES "^DEPENDS_ON\ =")
130+
string(REPLACE "DEPENDS_ON\ =" "" DEPLINE "${MAKEFILE_LINE}")
131+
string(STRIP "${DEPLINE}" DEPLINE)
132+
set(${FJCONTRIB_NAME_LOWER}_DEPENDENCIES "${DEPLINE}")
133+
endif()
134+
endwhile()
135+
136+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include)
137+
configure_file(incfastjet_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/CMakeLists.txt COPYONLY)
138+
configure_file(inccontrib_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/fastjet/CMakeLists.txt COPYONLY)
139+
configure_file(incdir_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include/fastjet/contrib/CMakeLists.txt)
140+
endif()
141+
configure_file(contrib_CMakeLists.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/CMakeLists.txt)
142+
143+
add_subdirectory(${FJCONTRIB_NAME})
144+
if (TARGET ${FJCONTRIB_NAME})
145+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
146+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE True)
147+
endif()
148+
if (MSVC)
149+
target_compile_definitions(${FJCONTRIB_NAME} PUBLIC _USE_MATH_DEFINES)
150+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
151+
target_compile_definitions(${FJCONTRIB_NAME} PRIVATE fastjetcontrib_EXPORTS)
152+
else()
153+
target_compile_definitions(${FJCONTRIB_NAME} PRIVATE ${FJCONTRIB_NAME_LOWER}_EXPORTS)
154+
endif()
155+
endif()
156+
list(APPEND fjcontrib_combined_TARGETS $<TARGET_OBJECTS:${FJCONTRIB_NAME}>)
157+
endif()
158+
endif()
159+
160+
endforeach()
161+
162+
if (fjcontrib_combined_TARGETS AND FASTJETCONTRIB_ENABLE_FRAGILELIB)
163+
add_library(fastjetcontribfragile SHARED ${fjcontrib_combined_TARGETS})
164+
target_link_libraries(fastjetcontribfragile PUBLIC fastjet::fastjettools)
165+
foreach (FJCONTRIB_NAME ${fjcontrib_DIRNAMES})
166+
target_include_directories(fastjetcontribfragile
167+
PUBLIC
168+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include>
169+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include>
170+
$<INSTALL_INTERFACE:include>
171+
)
172+
endforeach()
173+
174+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
175+
set_target_properties(fastjetcontribfragile PROPERTIES INSTALL_RPATH "@loader_path")
176+
elseif (NOT MSVC)
177+
set_target_properties(fastjetcontribfragile PROPERTIES INSTALL_RPATH "$ORIGIN")
178+
endif()
179+
180+
add_library(fastjet::contrib::fastjetcontribfragile ALIAS fastjetcontribfragile)
181+
install(TARGETS
182+
fastjetcontribfragile
183+
EXPORT
184+
FastjetContribTargets
185+
RUNTIME
186+
COMPONENT Runtime
187+
DESTINATION ${CMAKE_INSTALL_BINDIR}
188+
LIBRARY
189+
COMPONENT Runtime
190+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
191+
ARCHIVE
192+
COMPONENT Development
193+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
194+
)
195+
endif()
196+
197+
# allow Fastjet Contrib to work with find_package
198+
export(EXPORT FastjetContribTargets
199+
NAMESPACE fastjet::contrib::
200+
FILE "${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribTargets.cmake"
201+
)
202+
203+
install(EXPORT FastjetContribTargets
204+
NAMESPACE fastjet::contrib::
205+
FILE fastjetcontribTargets.cmake
206+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib
207+
)
208+
209+
include(CMakePackageConfigHelpers)
210+
211+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
212+
"${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfig.cmake"
213+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib"
214+
NO_SET_AND_CHECK_MACRO
215+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
216+
)
217+
218+
write_basic_package_version_file(
219+
"${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfigVersion.cmake"
220+
VERSION "${PROJECT_VERSION}"
221+
COMPATIBILITY AnyNewerVersion
222+
)
223+
224+
install(FILES
225+
${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfig.cmake
226+
${CMAKE_CURRENT_BINARY_DIR}/fastjetcontribConfigVersion.cmake
227+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/fastjetcontrib
228+
)
229+

Config.cmake.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
find_package(fastjet REQUIRED)
4+
5+
include ( "${CMAKE_CURRENT_LIST_DIR}/fastjetcontribTargets.cmake" )

contrib_CMakeLists.txt.in

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include)
2+
add_subdirectory(include)
3+
install(FILES
4+
${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h
5+
DESTINATION
6+
include/fastjet/contrib
7+
)
8+
else()
9+
file(COPY ${${FJCONTRIB_NAME_LOWER}_INCLUDES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/fastjet/contrib)
10+
install(FILES
11+
${${FJCONTRIB_NAME_LOWER}_INCLUDES}
12+
${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include/${FJCONTRIB_NAME_LOWER}_defines.h
13+
DESTINATION
14+
include/fastjet/contrib
15+
)
16+
endif()
17+
18+
if(${FJCONTRIB_NAME_LOWER}_SOURCES)
19+
20+
21+
if (FASTJETCONTRIB_ENABLE_FRAGILELIB)
22+
add_library(${FJCONTRIB_NAME} OBJECT ${${FJCONTRIB_NAME_LOWER}_SOURCES})
23+
else()
24+
add_library(${FJCONTRIB_NAME} SHARED ${${FJCONTRIB_NAME_LOWER}_SOURCES})
25+
endif()
26+
target_link_libraries(${FJCONTRIB_NAME} PUBLIC fastjet::fastjettools ${${FJCONTRIB_NAME_LOWER}_DEPENDENCIES})
27+
if("${FJCONTRIB_NAME}" STREQUAL "SDFPlugin")
28+
target_link_libraries(${FJCONTRIB_NAME} PUBLIC fastjet::fastjetplugins)
29+
endif()
30+
target_include_directories(${FJCONTRIB_NAME}
31+
PUBLIC
32+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${FJCONTRIB_NAME}/include>
33+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${FJCONTRIB_NAME}/include>
34+
$<INSTALL_INTERFACE:include>
35+
)
36+
37+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
38+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
39+
elseif (NOT MSVC)
40+
set_target_properties(${FJCONTRIB_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
41+
endif()
42+
43+
if (NOT FASTJETCONTRIB_ENABLE_FRAGILELIB)
44+
add_library(fastjet::contrib::${FJCONTRIB_NAME} ALIAS ${FJCONTRIB_NAME})
45+
install(TARGETS
46+
${FJCONTRIB_NAME}
47+
EXPORT
48+
FastjetContribTargets
49+
RUNTIME
50+
COMPONENT Runtime
51+
DESTINATION ${CMAKE_INSTALL_BINDIR}
52+
LIBRARY
53+
COMPONENT Runtime
54+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
55+
ARCHIVE
56+
COMPONENT Development
57+
DESTINATION ${CMAKE_INSTALL_LIBDIR}
58+
)
59+
endif()
60+
endif()

defines.h.in

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Required definitions for exporting static variables in windows builds.
2+
// This is only needed for static data variables since we use
3+
// the CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON automation when building with cmake.
4+
// That automation handles all member functions.
5+
// So, when making a static variable please add in the beginning of a variable
6+
// definition, like a keyword. It is very important to use the visibility relevant
7+
// to the library you are working in, see below for possibilities!
8+
// e.g.: Nsubjettiness_VISIBILITY static bool verbosity; // inside a SomeClass.h, for instance
9+
// Similarly for declarations you must prefix the appropriate VISIBILITY
10+
// e.g. Nsubjettiness_VISIBILITY static bool SomeClass::verbosity = true; // in SomeClass.cc
11+
#ifdef _WIN32
12+
#if defined(${FJCONTRIB_NAME_LOWER}_EXPORTS) || defined(fastjetcontrib_EXPORTS)
13+
#define ${FJCONTRIB_NAME_LOWER}_VISIBILITY __declspec(dllexport) // Export when building the DLL
14+
#else
15+
#define ${FJCONTRIB_NAME_LOWER}_VISIBILITY __declspec(dllimport) // Import when using the DLL
16+
#endif
17+
#else
18+
// For Linux/macOS
19+
#define ${FJCONTRIB_NAME_LOWER}_VISIBILITY
20+
#endif

inccontrib_CMakeLists.txt.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(contrib)
2+

incdir_CMakeLists.txt.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
install(FILES
2+
${${FJCONTRIB_NAME_LOWER}_INCLUDES}
3+
DESTINATION
4+
include/fastjet/contrib
5+
)

incfastjet_CMakeLists.txt.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(fastjet)
2+

0 commit comments

Comments
 (0)