CMakeLists.txt 5.63 KB
Newer Older
1
###########################################################################
2 3
# This file is part of LImA, a Library for Image Acquisition
#
4 5 6 7
#  Copyright (C) : 2009-2017
#  European Synchrotron Radiation Facility
#  BP 220, Grenoble 38043
#  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 55 56 57 58
# 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)
  find_package(Lima REQUIRED)
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

# Set version
include(project_version)
63

64
# Enable python binding code compilation using sip generator
65 66 67
if (CAMERA_MASTER_PROJECT)
  option(LIMA_ENABLE_PYTHON "compile python binding code?" OFF)
endif()
68

69
if (LIMA_ENABLE_PYTHON)
70 71 72 73 74 75 76 77 78
  # Find python interpreter and libs
  find_package(PythonInterp)
  find_package(PythonLibs)
  if(${PYTHONINTERP_FOUND})
    # python site-packages folder
    execute_process(
      COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
      OUTPUT_VARIABLE _PYTHON_SITE_PACKAGES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
  endif()
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93
  set(PYTHON_SITE_PACKAGES_DIR ${_PYTHON_SITE_PACKAGES_DIR} CACHE PATH "where should python modules be installed?")

  find_package(SIP REQUIRED)
  include(SIPMacros)
  if(WIN32)
    set(SIP_TAGS WIN32_PLATFORM)
  elseif(UNIX)
    set(SIP_TAGS POSIX_PLATFORM)
  endif(WIN32)
  set(SIP_EXTRA_OPTIONS -e -g)

  find_package(NumPy REQUIRED)
endif()

94 95 96
if (CAMERA_MASTER_PROJECT)
  find_package(Espia REQUIRED)
endif()
97 98 99 100 101 102 103

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

add_library(frelon SHARED
  src/Frelon.cpp
  src/FrelonSerialLine.cpp
  src/FrelonModel.cpp
104
  src/FrelonGeometry.cpp
105 106 107 108 109 110 111 112 113 114 115 116 117
  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
118
  VERSION "${PROJECT_VERSION}"
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
  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
139
if(LIMA_ENABLE_PYTHON)
140 141
  include(LimaTools)
  set(IMPORTS "limaespia.sip")
142 143 144 145 146 147
  if(NOT CAMERA_MASTER_PROJECT)
    set(SIP_INCLUDE_DIRS
      "${CMAKE_CURRENT_BINARY_DIR}/../common/espia/sip"
      "${CMAKE_CURRENT_SOURCE_DIR}/../common/espia/sip"
    )
  endif()
148 149 150 151 152 153 154 155 156 157
  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()
158

159
## Installation
160

161 162 163 164 165 166 167 168
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)
)
169

170 171 172 173 174 175
install(
  DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  FILES_MATCHING PATTERN "*.h"
)
176

177 178 179 180 181 182 183
install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/project_version.h
    ${PROJECT_BINARY_DIR}/frelon_export.h
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
184

185
if(LIMA_ENABLE_PYTHON)
186 187 188 189
  install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/
    DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/Frelon"
  )
190
endif()
191

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