67 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			CMake
		
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			CMake
		
	
	
|  | #Setup cache options
 | ||
|  | option(GTSAM_BUILD_PYTHON "Build Python wrapper statically (increases build time)" OFF)
 | ||
|  | set(GTSAM_BUILD_PYTHON_FLAGS "" CACHE STRING "Extra flags for running Matlab PYTHON compilation")
 | ||
|  | set(GTSAM_PYTHON_INSTALL_PATH "" CACHE PATH "Python toolbox destination, blank defaults to CMAKE_INSTALL_PREFIX/borg/python")
 | ||
|  | if(NOT GTSAM_PYTHON_INSTALL_PATH)
 | ||
|  |   set(GTSAM_PYTHON_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/borg/python")
 | ||
|  | endif() 
 | ||
|  | 
 | ||
|  | #Author: Paul Furgale Modified by Andrew Melim
 | ||
|  | function(wrap_python TARGET_NAME PYTHON_MODULE_DIRECTORY)
 | ||
|  |   # Boost
 | ||
|  |   find_package(Boost COMPONENTS python filesystem system REQUIRED)
 | ||
|  |   include_directories(${Boost_INCLUDE_DIRS})
 | ||
|  | 
 | ||
|  |   # Find Python
 | ||
|  |   FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
 | ||
|  |   INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
 | ||
|  | 
 | ||
|  |   IF(APPLE)
 | ||
|  |     # The apple framework headers don't include the numpy headers for some reason.
 | ||
|  |     GET_FILENAME_COMPONENT(REAL_PYTHON_INCLUDE ${PYTHON_INCLUDE_DIRS} REALPATH)
 | ||
|  |     IF( ${REAL_PYTHON_INCLUDE} MATCHES Python.framework)
 | ||
|  |       message("Trying to find extra headers for numpy from ${REAL_PYTHON_INCLUDE}.")
 | ||
|  |       message("Looking in ${REAL_PYTHON_INCLUDE}/../../Extras/lib/python/numpy/core/include/numpy")
 | ||
|  |       FIND_PATH(NUMPY_INCLUDE_DIR arrayobject.h | ||
|  |   ${REAL_PYTHON_INCLUDE}/../../Extras/lib/python/numpy/core/include/numpy
 | ||
|  |   ${REAL_PYTHON_INCLUDE}/numpy
 | ||
|  |   )
 | ||
|  |       IF(${NUMPY_INCLUDE_DIR} MATCHES NOTFOUND)
 | ||
|  |   message("Unable to find numpy include directories: ${NUMPY_INCLUDE_DIR}")
 | ||
|  |       ELSE()
 | ||
|  |   message("Found headers at ${NUMPY_INCLUDE_DIR}")
 | ||
|  |   INCLUDE_DIRECTORIES(${NUMPY_INCLUDE_DIR})
 | ||
|  |   INCLUDE_DIRECTORIES(${NUMPY_INCLUDE_DIR}/..)
 | ||
|  |       ENDIF()
 | ||
|  |     ENDIF()
 | ||
|  |   ENDIF(APPLE)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   # Create a static library version
 | ||
|  |   add_library(${TARGET_NAME} SHARED ${ARGN})
 | ||
|  | 
 | ||
|  |   target_link_libraries(${TARGET_NAME} ${Boost_PYTHON_LIBRARY} ${PYTHON_LIBRARY} gtsam-shared)
 | ||
|  |       set_target_properties(${TARGET_NAME} PROPERTIES  | ||
|  |           OUTPUT_NAME         ${TARGET_NAME}
 | ||
|  |           CLEAN_DIRECT_OUTPUT 1
 | ||
|  |           VERSION             1
 | ||
|  |           SOVERSION           0)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   # On OSX and Linux, the python library must end in the extension .so. Build this
 | ||
|  |   # filename here.
 | ||
|  |   get_property(PYLIB_OUTPUT_FILE TARGET ${TARGET_NAME} PROPERTY LOCATION)
 | ||
|  |   get_filename_component(PYLIB_OUTPUT_NAME ${PYLIB_OUTPUT_FILE} NAME_WE)
 | ||
|  |   set(PYLIB_SO_NAME ${PYLIB_OUTPUT_NAME}.so)
 | ||
|  | 
 | ||
|  |   # Cause the library to be output in the correct directory.
 | ||
|  |   add_custom_command(TARGET ${TARGET_NAME} | ||
|  |     POST_BUILD
 | ||
|  |     COMMAND cp -v ${PYLIB_OUTPUT_FILE} ${PYTHON_MODULE_DIRECTORY}/${PYLIB_SO_NAME}
 | ||
|  |     WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
 | ||
|  |     COMMENT "Copying library files to python directory" )
 | ||
|  | 
 | ||
|  |   get_directory_property(AMCF ADDITIONAL_MAKE_CLEAN_FILES)
 | ||
|  |   list(APPEND AMCF ${PYTHON_MODULE_DIRECTORY}/${PYLIB_SO_NAME})
 | ||
|  |   set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${AMCF}") 
 | ||
|  | endfunction(wrap_python)
 |