CMakeLists.txt 6.03 KB
Newer Older
1
2
3
###########################################################################
# This file is part of LImA, a Library for Image Acquisition
#
Laurent Claustre's avatar
Laurent Claustre committed
4
#  Copyright (C) : 2009-2019
5
#  European Synchrotron Radiation Facility
Laurent Claustre's avatar
Laurent Claustre committed
6
#  CS40220 38043 Grenoble Cedex 9
7
#  FRANCE
8
#
9
#  Contact: lima@esrf.fr
10
#
11
12
13
14
#  This is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
15
#
16
17
18
19
#  This software is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
20
#
21
22
23
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, see <http://www.gnu.org/licenses/>.
############################################################################
24
25
26
27
28
29
30
31
32

cmake_minimum_required(VERSION 3.1)

project(slsdetector)

# Include additional modules that are used inconditionnaly
include(GNUInstallDirs)
include(GenerateExportHeader)

33
34
35
36
37
38
# If conda build, always set lib dir to 'lib'
if(NOT LIMA_ENABLE_NUMA)
  message(FATAL_ERROR
          "slsdetector requires NUMA control in Lima: set LIMA_ENABLE_NUMA ON")
endif()

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# If conda build, always set lib dir to 'lib'
if($ENV{CONDA_BUILD})
  set(CMAKE_INSTALL_LIBDIR "lib")
endif()

# Set lower / upper case project names
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER)
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)

# Set targets export name (used by lima and dependencies)
set(TARGETS_EXPORT_NAME "${PROJECT_NAME_LOWER}-targets")
#set(namespace "${PROJECT_NAME}::")

# Check if project is being used directly or via add_subdirectory
set(CAMERA_MASTER_PROJECT OFF)
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
  set(CAMERA_MASTER_PROJECT ON)
endif()

if (CAMERA_MASTER_PROJECT)
Laurent Claustre's avatar
Laurent Claustre committed
59
  find_package(Lima REQUIRED COMPONENTS devel tools)
60
61
62
endif()

# CMake additional macros
Laurent Claustre's avatar
Laurent Claustre committed
63
64
65
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${LIMA_CMAKE_INCLUDE_DIRS} ${CMAKE_MODULE_PATH})

include(LimaTools)
66
67
68
69
70

# Set version
include(project_version)

# Enable python binding code compilation using sip generator
71
72
if (CAMERA_MASTER_PROJECT)
  option(LIMA_ENABLE_PYTHON "compile python binding code?" OFF)
Laurent Claustre's avatar
Laurent Claustre committed
73
  option(LIMA_ENABLE_PYTANGO_SERVER "install python tango server?" OFF)
74

Laurent Claustre's avatar
Laurent Claustre committed
75
76
  if (LIMA_ENABLE_PYTHON)
    limatools_find_python_and_sip()
77
78
79
80
  endif()
endif()

# Additional packages
81
82
find_package(Numa REQUIRED)

83
84
# slsDetectorPackage
set(SLS_DETECTOR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/slsDetectorPackage)
85
86
set(SLS_DETECTOR_SW ${SLS_DETECTOR_DIR}/slsDetectorSoftware)
set(SLS_DETECTOR_RECV ${SLS_DETECTOR_DIR}/slsReceiverSoftware)
87

88
89
90
set(SLS_USE_TEXTCLIENT ON CACHE BOOL "Text Client")
set(SLS_USE_RECEIVER ON CACHE BOOL "Receiver")
set(SLS_USE_GUI OFF CACHE BOOL "GUI")
91

92
93
add_subdirectory(${SLS_DETECTOR_DIR})

94
95
96
97
file(GLOB_RECURSE SLSDETECTOR_INCS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")

add_library(slsdetector SHARED
  src/SlsDetectorDefs.cpp
98
  src/SlsDetectorFrameMap.cpp
99
100
  src/SlsDetectorArgs.cpp
  src/SlsDetectorCPUAffinity.cpp
101
  src/SlsDetectorBebTools.cpp
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  src/SlsDetectorModel.cpp
  src/SlsDetectorReceiver.cpp
  src/SlsDetectorCamera.cpp
  src/SlsDetectorEiger.cpp
  src/SlsDetectorInterface.cpp
  ${SLSDETECTOR_INCS}
)

# Generate export macros
generate_export_header(slsdetector)

# Set version and output name
set_target_properties(slsdetector PROPERTIES
  OUTPUT_NAME "lima${PROJECT_NAME_LOWER}"
Samuel Debionne's avatar
Samuel Debionne committed
116
  VERSION "${PROJECT_VERSION}"
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
  SOVERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}")

# Add dependencies
target_include_directories(slsdetector
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/include>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/commonFiles>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/slsDetector>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/multiSlsDetector>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/slsDetectorServer>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/slsDetectorAnalysis>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_SW}/slsReceiverInterface>"
    PUBLIC "$<BUILD_INTERFACE:${SLS_DETECTOR_RECV}/include>"
    PUBLIC "$<BUILD_INTERFACE:${NUMA_INCLUDE_DIR}>"
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"           # For export header
    PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
134
135

message("NUMA_LIBRARY=" ${NUMA_LIBRARY})
136

137
138
target_link_libraries(slsdetector
  PUBLIC limacore
139
  PUBLIC slsDetectorShared slsReceiverShared
140
141
  PUBLIC ${NUMA_LIBRARY}
)
142

143
# Binding code for python
144
if(LIMA_ENABLE_PYTHON)
145
146
  limatools_run_sip_for_camera(slsdetector)
endif()
147

148
149
150
151
152
153
# Generate and install package config file and version
if(CAMERA_MASTER_PROJECT)
  set (PROJECT_LIBRARIES slsdetector)
  set(SIP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/sip/lima)
  set(CMAKE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/cmake/lima)
  include(package_config)
154
155
endif()

156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
## Installation

install(
  TARGETS slsdetector
  EXPORT "${TARGETS_EXPORT_NAME}"
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}   # import library
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}   # .so files are libraries
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}   # .dll files are binaries
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}  # this does not actually install anything (but used by downstream projects)
)

install(
  DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  FILES_MATCHING PATTERN "*.h"
)

install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/project_version.h
    ${PROJECT_BINARY_DIR}/slsdetector_export.h
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

182
if(LIMA_ENABLE_PYTHON)
183
184
185
  install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/
    DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/SlsDetector"
Laurent Claustre's avatar
Laurent Claustre committed
186
187
188
189
    )
  if (LIMA_ENABLE_PYTANGO_SERVER)
    add_subdirectory(tango)
  endif()
190
endif()
191

192
193
194
## Tests
if(CAMERA_ENABLE_TESTS)
    enable_testing()
195
    add_subdirectory(test)
196
endif()