CMakeLists.txt 5.73 KB
Newer Older
1
###########################################################################
2 3
# This file is part of LImA, a Library for Image Acquisition
#
4 5
#  Copyright (C) : 2009-2017
#  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
############################################################################
Aitor Henry's avatar
Aitor Henry committed
24

25
cmake_minimum_required(VERSION 3.1)
Julien Cristau's avatar
Julien Cristau committed
26

27
project(basler)
28

29 30 31 32 33 34 35 36 37
set(NAME "basler") # This is used by LimaTools

# 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")
38
endif()
Julien Cristau's avatar
Julien Cristau committed
39

40 41 42
# Set lower / upper case project names
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER)
string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER)
Julien Cristau's avatar
Julien Cristau committed
43

44 45 46
# Set targets export name (used by lima and dependencies)
set(TARGETS_EXPORT_NAME "${PROJECT_NAME_LOWER}-targets")
#set(namespace "${PROJECT_NAME}::")
Julien Cristau's avatar
Julien Cristau committed
47

48 49 50 51
# 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)
52
endif()
53

54 55
if (CAMERA_MASTER_PROJECT)
  find_package(Lima REQUIRED)
56
endif()
57

58
# 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 63 64

# Set version
include(project_version)

# 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
  # 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)
78
  endif()
79

80 81 82 83 84 85 86 87 88 89
  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)
90

91
  find_package(NumPy REQUIRED)
92
endif()
93 94 95

set(PYLON_VERSION "5" CACHE STRING "Pylon version 3 or 5")

96
if ("${PYLON_VERSION}" STREQUAL "3")
97 98 99
  find_package(Pylon3 REQUIRED)
elseif ("${PYLON_VERSION}" STREQUAL "5")
  find_package(Pylon5 REQUIRED)
100
endif()
101

102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
file(GLOB_RECURSE BASLER_INCS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")

# Library definition
add_library(basler SHARED
  src/BaslerCamera.cpp
  src/BaslerInterface.cpp
  src/BaslerDetInfoCtrlObj.cpp
  src/BaslerSyncCtrlObj.cpp
  src/BaslerRoiCtrlObj.cpp
  src/BaslerBinCtrlObj.cpp
  src/BaslerVideoCtrlObj.cpp
  ${BASLER_INCS}
)

# Generate export macros
generate_export_header(basler)

# Set version and output name
set_target_properties(basler PROPERTIES
  OUTPUT_NAME "lima${PROJECT_NAME_LOWER}"
Samuel Debionne's avatar
Samuel Debionne committed
122
  VERSION "${PROJECT_VERSION}"
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
  SOVERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}")

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

target_link_libraries(basler PUBLIC limacore)

target_compile_definitions(basler PUBLIC ${PYLON_DEFINITIONS})

target_include_directories(basler PUBLIC ${PYLON_INCLUDE_DIRS})

target_link_libraries(basler PUBLIC ${PYLON_LIBRARIES})

140
if(WIN32)
141 142 143 144
  target_compile_definitions(basler
    PRIVATE basler_EXPORTS
    PUBLIC NOMINMAX)
  set_target_properties(basler PROPERTIES PREFIX "lib" IMPORT_PREFIX "lib")
145
endif()
146 147

# Binding code for python
148
if(LIMA_ENABLE_PYTHON)
149 150 151 152 153 154 155 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 182 183 184 185 186
  include(LimaTools)
  limatools_run_sip_for_camera(basler)
endif()

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

## Installation

install(
  TARGETS basler
  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}/basler_export.h
  COMPONENT devel
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

187
if(LIMA_ENABLE_PYTHON)
188 189 190 191
  install(
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/
    DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/Lima/Basler"
  )
192
endif()
193

194 195 196 197
## Tests
if(CAMERA_ENABLE_TESTS)
    enable_testing()
    #add_subdirectory(test)
198
endif()