CMakeLists.txt 5.13 KB
Newer Older
1
###########################################################################
2 3
# This file is part of LImA, a Library for Image Acquisition
#
4
#  Copyright (C) : 2009-2019
5
#  European Synchrotron Radiation Facility
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
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, see <http://www.gnu.org/licenses/>.
23
############################################################################
24 25 26 27 28

cmake_minimum_required(VERSION 3.1)

project(frelon)

Aitor Henry's avatar
Aitor Henry committed
29
set(NAME "frelon")
30

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
# Include additional modules that are used inconditionnaly
include(GNUInstallDirs)
include(GenerateExportHeader)

# 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)
55
  find_package(Lima REQUIRED COMPONENTS devel tools)
56 57 58
endif()

# CMake additional macros
Samuel Debionne's avatar
Samuel Debionne committed
59
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${LIMA_CMAKE_INCLUDE_DIRS} ${CMAKE_MODULE_PATH})
60

61 62
include(LimaTools)

63 64
# Set version
include(project_version)
65

66
# Enable python binding code compilation using sip generator
67 68
if (CAMERA_MASTER_PROJECT)
  option(LIMA_ENABLE_PYTHON "compile python binding code?" OFF)
69
  option(LIMA_ENABLE_PYTANGO_SERVER "install python tango server?" OFF)
70

71 72
  if (LIMA_ENABLE_PYTHON)
    limatools_find_python_and_sip()
73 74 75
  endif()
endif()

76 77 78
if (CAMERA_MASTER_PROJECT)
  find_package(Espia REQUIRED)
endif()
79 80 81 82 83 84 85

file(GLOB_RECURSE FRELON_INCS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")

add_library(frelon SHARED
  src/Frelon.cpp
  src/FrelonSerialLine.cpp
  src/FrelonModel.cpp
86
  src/FrelonGeometry.cpp
87 88 89 90 91 92 93 94 95 96 97 98 99
  src/FrelonCamera.cpp
  src/FrelonTimingCtrl.cpp
  src/FrelonInterface.cpp
  src/FrelonCorrection.cpp
  ${FRELON_INCS}
)

# Generate export macros
generate_export_header(frelon)

# Set version and output name
set_target_properties(frelon PROPERTIES
  OUTPUT_NAME "lima${PROJECT_NAME_LOWER}"
Samuel Debionne's avatar
Samuel Debionne committed
100
  VERSION "${PROJECT_VERSION}"
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
  SOVERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}")

# Add dependencies
target_include_directories(frelon
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/tools/src>"
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"           # For export header
    PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)

target_link_libraries(frelon PUBLIC espia limacore)

if(WIN32)
  target_compile_definitions(frelon
    PRIVATE frelon_EXPORTS
    PUBLIC NOMINMAX)
  set_target_properties(frelon PROPERTIES PREFIX "lib" IMPORT_PREFIX "lib")
endif()

# Binding code for python
121
if(LIMA_ENABLE_PYTHON)
122
  set(IMPORTS "limaespia.sip")
123 124 125 126 127 128
  if(NOT CAMERA_MASTER_PROJECT)
    set(SIP_INCLUDE_DIRS
      "${CMAKE_CURRENT_BINARY_DIR}/../common/espia/sip"
      "${CMAKE_CURRENT_SOURCE_DIR}/../common/espia/sip"
    )
  endif()
129 130 131 132 133 134 135 136 137 138
  limatools_run_sip_for_camera(frelon)
endif()

# Generate and install package config file and version
if(CAMERA_MASTER_PROJECT)
  set(PROJECT_LIBRARIES frelon)
  set(SIP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/sip/lima)
  set(CMAKE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/cmake/lima)
  include(package_config)
endif()
139

140
## Installation
141

142 143 144 145 146 147 148 149
install(
  TARGETS frelon
  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)
)
150

151 152 153 154 155 156
install(
  DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  FILES_MATCHING PATTERN "*.h"
)
157

158 159 160 161 162 163 164
install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/project_version.h
    ${PROJECT_BINARY_DIR}/frelon_export.h
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
165

166
if(LIMA_ENABLE_PYTHON)
167 168 169
  install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/
    DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/Frelon"
170 171 172 173
    )
  if (LIMA_ENABLE_PYTANGO_SERVER)
    add_subdirectory(tango)
  endif()
174
endif()
175

176 177 178 179
## Tests
if(CAMERA_ENABLE_TESTS)
  enable_testing()
  #add_subdirectory(test)
180
endif()