From ebc0e1eeb4499f09d9f13f091caf9dc6b1820654 Mon Sep 17 00:00:00 2001 From: Phil Roberts Date: Fri, 27 Oct 2017 16:45:55 +1030 Subject: [PATCH] Add pybind11 submodule and cmake build --- .gitmodules | 3 + CMakeLists.txt | 49 ++++++++++++++++ cmake/FindNumPy.cmake | 131 ++++++++++++++++++++++++++++++++++++++++++ pybind11 | 1 + 4 files changed, 184 insertions(+) create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 cmake/FindNumPy.cmake create mode 160000 pybind11 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a90eb86 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pybind11"] + path = pybind11 + url = https://github.com/pybind/pybind11.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..57c2574 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,49 @@ +project(Matterport_Simulator CXX) +cmake_minimum_required(VERSION 2.8) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +include_directories("${PROJECT_SOURCE_DIR}/include") + +find_package(OpenCV REQUIRED) +find_package(PkgConfig REQUIRED) + +pkg_check_modules(JSONCPP REQUIRED jsoncpp) +pkg_check_modules(OSMESA REQUIRED osmesa) + +add_library(MatterSim SHARED src/lib/MatterSim.cpp) +target_include_directories(MatterSim PRIVATE ${JSONCPP_INCLUDE_DIRS}) +target_link_libraries(MatterSim ${JSONCPP_LIBRARIES} ${OpenCV_LIBS} ${OSMESA_LIBRARIES}) + +add_executable(mattersim_main src/driver/mattersim_main.cpp) +target_link_libraries(mattersim_main MatterSim) + +add_executable(random_agent src/driver/random_agent.cpp) +target_link_libraries(random_agent MatterSim) + +add_subdirectory(pybind11) + +find_package(PythonInterp) +message(${PYTHON_EXECUTABLE}) + +# Need to search for python executable again to pick up an activated +# virtualenv python, if any. +unset(PYTHON_EXECUTABLE CACHE) +find_program(PYTHON_EXECUTABLE python + PATHS ENV PATH # look in the PATH environment variable + NO_DEFAULT_PATH # do not look anywhere else... + ) +# Make FindNumPy available +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") +find_package(NumPy REQUIRED) + +pybind11_add_module(MatterSimPython src/lib_python/MatterSimPython.cpp) +target_include_directories(MatterSimPython PRIVATE ${NUMPY_INCLUDES}) +target_link_libraries(MatterSimPython PRIVATE MatterSim) +set_target_properties(MatterSimPython + PROPERTIES + OUTPUT_NAME MatterSim) diff --git a/cmake/FindNumPy.cmake b/cmake/FindNumPy.cmake new file mode 100644 index 0000000..2f97274 --- /dev/null +++ b/cmake/FindNumPy.cmake @@ -0,0 +1,131 @@ +#------------------------------------------------------------------------------- +# Copyright (c) 2013, Lars Baehren +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#------------------------------------------------------------------------------- + +# - Check for the presence of NumPy +# +# The following variables are set when NumPy is found: +# NUMPY_FOUND = Set to true, if all components of NUMPY have been found. +# NUMPY_INCLUDES = Include path for the header files of NUMPY +# NUMPY_LIBRARIES = Link these to use NUMPY +# NUMPY_LFLAGS = Linker flags (optional) + +if (NOT NUMPY_FOUND) + + if (NOT NUMPY_ROOT_DIR) + set (NUMPY_ROOT_DIR ${CMAKE_INSTALL_PREFIX}) + endif (NOT NUMPY_ROOT_DIR) + + if (NOT PYTHONINTERP_FOUND) + find_package (PythonInterp) + endif (NOT PYTHONINTERP_FOUND) + + ##__________________________________________________________________________ + ## Check for the header files + + ## Use Python to determine the include directory + execute_process ( + COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.get_include\(\)\)\; + ERROR_VARIABLE NUMPY_FIND_ERROR + RESULT_VARIABLE NUMPY_FIND_RESULT + OUTPUT_VARIABLE NUMPY_FIND_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + ## process the output from the execution of the command + if (NOT NUMPY_FIND_RESULT) + set (NUMPY_INCLUDES ${NUMPY_FIND_OUTPUT}) + endif (NOT NUMPY_FIND_RESULT) + + ##__________________________________________________________________________ + ## Check for the library + + unset (NUMPY_LIBRARIES) + + if (PYTHON_SITE_PACKAGES) + find_library (NUMPY_NPYMATH_LIBRARY npymath + HINTS ${PYTHON_SITE_PACKAGES}/numpy/core + PATH_SUFFIXES lib + ) + if (NUMPY_NPYMATH_LIBRARY) + list (APPEND NUMPY_LIBRARIES ${NUMPY_NPYMATH_LIBRARY}) + endif (NUMPY_NPYMATH_LIBRARY) + endif (PYTHON_SITE_PACKAGES) + + ##__________________________________________________________________________ + ## Get API version of NumPy from 'numpy/numpyconfig.h' + + if (PYTHON_EXECUTABLE) + execute_process ( + COMMAND ${PYTHON_EXECUTABLE} -c import\ numpy\;\ print\(numpy.__version__\)\; + ERROR_VARIABLE NUMPY_API_VERSION_ERROR + RESULT_VARIABLE NUMPY_API_VERSION_RESULT + OUTPUT_VARIABLE NUMPY_API_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + else () + ## Backup procedure: extract version number directly from the header file + if (NUMPY_INCLUDES) + find_file (HAVE_NUMPYCONFIG_H numpy/numpyconfig.h + HINTS ${NUMPY_INCLUDES} + ) + endif (NUMPY_INCLUDES) + endif () + + ## Dissect full version number into major, minor and patch version + if (NUMPY_API_VERSION) + string (REGEX REPLACE "\\." ";" _tmp ${NUMPY_API_VERSION}) + list (GET _tmp 0 NUMPY_API_VERSION_MAJOR) + list (GET _tmp 1 NUMPY_API_VERSION_MINOR) + list (GET _tmp 2 NUMPY_API_VERSION_PATCH) + endif (NUMPY_API_VERSION) + + ##__________________________________________________________________________ + ## Actions taken when all components have been found + + find_package_handle_standard_args (NUMPY DEFAULT_MSG NUMPY_INCLUDES) + + if (NUMPY_FOUND) + if (NOT NUMPY_FIND_QUIETLY) + message (STATUS "Found components for NumPy") + message (STATUS "NUMPY_ROOT_DIR = ${NUMPY_ROOT_DIR}") + message (STATUS "NUMPY_INCLUDES = ${NUMPY_INCLUDES}") + message (STATUS "NUMPY_LIBRARIES = ${NUMPY_LIBRARIES}") + message (STATUS "NUMPY_API_VERSION = ${NUMPY_API_VERSION}") + endif (NOT NUMPY_FIND_QUIETLY) + else (NUMPY_FOUND) + if (NUMPY_FIND_REQUIRED) + message (FATAL_ERROR "Could not find NUMPY!") + endif (NUMPY_FIND_REQUIRED) + endif (NUMPY_FOUND) + + ##__________________________________________________________________________ + ## Mark advanced variables + + mark_as_advanced ( + NUMPY_ROOT_DIR + NUMPY_INCLUDES + NUMPY_LIBRARIES + ) + +endif (NOT NUMPY_FOUND) diff --git a/pybind11 b/pybind11 new file mode 160000 index 0000000..86e2ad4 --- /dev/null +++ b/pybind11 @@ -0,0 +1 @@ +Subproject commit 86e2ad4f77442c3350f9a2476650da6bee253c52