Merge pull request #570 from borglab/feature/system-metis-lib
commit
30ac64accf
|
@ -68,6 +68,8 @@ function configure()
|
||||||
-DGTSAM_USE_QUATERNIONS=${GTSAM_USE_QUATERNIONS:-OFF} \
|
-DGTSAM_USE_QUATERNIONS=${GTSAM_USE_QUATERNIONS:-OFF} \
|
||||||
-DGTSAM_ROT3_EXPMAP=${GTSAM_ROT3_EXPMAP:-ON} \
|
-DGTSAM_ROT3_EXPMAP=${GTSAM_ROT3_EXPMAP:-ON} \
|
||||||
-DGTSAM_POSE3_EXPMAP=${GTSAM_POSE3_EXPMAP:-ON} \
|
-DGTSAM_POSE3_EXPMAP=${GTSAM_POSE3_EXPMAP:-ON} \
|
||||||
|
-DGTSAM_USE_SYSTEM_EIGEN=${GTSAM_USE_SYSTEM_EIGEN:-OFF} \
|
||||||
|
-DGTSAM_USE_SYSTEM_METIS=${GTSAM_USE_SYSTEM_METIS:-OFF} \
|
||||||
-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF \
|
-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF \
|
||||||
-DBOOST_ROOT=$BOOST_ROOT \
|
-DBOOST_ROOT=$BOOST_ROOT \
|
||||||
-DBoost_NO_SYSTEM_PATHS=ON \
|
-DBoost_NO_SYSTEM_PATHS=ON \
|
||||||
|
|
|
@ -55,6 +55,12 @@ jobs:
|
||||||
version: "9"
|
version: "9"
|
||||||
flag: cayley
|
flag: cayley
|
||||||
|
|
||||||
|
- name: ubuntu-system-libs
|
||||||
|
os: ubuntu-18.04
|
||||||
|
compiler: gcc
|
||||||
|
version: "9"
|
||||||
|
flag: system-libs
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
@ -126,6 +132,12 @@ jobs:
|
||||||
echo "GTSAM_ROT3_EXPMAP=OFF" >> $GITHUB_ENV
|
echo "GTSAM_ROT3_EXPMAP=OFF" >> $GITHUB_ENV
|
||||||
echo "GTSAM Uses Cayley map for Rot3"
|
echo "GTSAM Uses Cayley map for Rot3"
|
||||||
|
|
||||||
|
- name: Use system versions of 3rd party libraries
|
||||||
|
if: matrix.flag == 'system'
|
||||||
|
run: |
|
||||||
|
echo "GTSAM_USE_SYSTEM_EIGEN=ON" >> $GITHUB_ENV
|
||||||
|
echo "GTSAM_USE_SYSTEM_METIS=ON" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Build & Test
|
- name: Build & Test
|
||||||
run: |
|
run: |
|
||||||
bash .github/scripts/unix.sh -t
|
bash .github/scripts/unix.sh -t
|
||||||
|
|
|
@ -38,11 +38,14 @@ if(${GTSAM_SOURCE_DIR} STREQUAL ${GTSAM_BINARY_DIR})
|
||||||
message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
|
message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include(cmake/HandleGeneralOptions.cmake) # CMake build options
|
||||||
|
|
||||||
|
# Libraries:
|
||||||
include(cmake/HandleBoost.cmake) # Boost
|
include(cmake/HandleBoost.cmake) # Boost
|
||||||
include(cmake/HandleCCache.cmake) # ccache
|
include(cmake/HandleCCache.cmake) # ccache
|
||||||
include(cmake/HandleCPack.cmake) # CPack
|
include(cmake/HandleCPack.cmake) # CPack
|
||||||
include(cmake/HandleEigen.cmake) # Eigen3
|
include(cmake/HandleEigen.cmake) # Eigen3
|
||||||
include(cmake/HandleGeneralOptions.cmake) # CMake build options
|
include(cmake/HandleMetis.cmake) # metis
|
||||||
include(cmake/HandleMKL.cmake) # MKL
|
include(cmake/HandleMKL.cmake) # MKL
|
||||||
include(cmake/HandleOpenMP.cmake) # OpenMP
|
include(cmake/HandleOpenMP.cmake) # OpenMP
|
||||||
include(cmake/HandlePerfTools.cmake) # Google perftools
|
include(cmake/HandlePerfTools.cmake) # Google perftools
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
###############################################################################
|
||||||
|
# Metis library
|
||||||
|
|
||||||
|
# For both system or bundle version, a cmake target "metis-gtsam-if" is defined (interface library)
|
||||||
|
|
||||||
|
# Dont try to use metis if GTSAM_SUPPORT_NESTED_DISSECTION is disabled:
|
||||||
|
if (NOT GTSAM_SUPPORT_NESTED_DISSECTION)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(GTSAM_USE_SYSTEM_METIS "Find and use system-installed libmetis. If 'off', use the one bundled with GTSAM" OFF)
|
||||||
|
|
||||||
|
if(GTSAM_USE_SYSTEM_METIS)
|
||||||
|
# Debian package: libmetis-dev
|
||||||
|
|
||||||
|
find_path(METIS_INCLUDE_DIR metis.h REQUIRED)
|
||||||
|
find_library(METIS_LIBRARY metis REQUIRED)
|
||||||
|
|
||||||
|
if(METIS_INCLUDE_DIR AND METIS_LIBRARY)
|
||||||
|
mark_as_advanced(METIS_INCLUDE_DIR)
|
||||||
|
mark_as_advanced(METIS_LIBRARY)
|
||||||
|
|
||||||
|
add_library(metis-gtsam-if INTERFACE)
|
||||||
|
target_include_directories(metis-gtsam-if BEFORE INTERFACE ${METIS_INCLUDE_DIR})
|
||||||
|
target_link_libraries(metis-gtsam-if INTERFACE ${METIS_LIBRARY})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# Bundled version:
|
||||||
|
option(GTSAM_BUILD_METIS_EXECUTABLES "Build metis library executables" OFF)
|
||||||
|
add_subdirectory(${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis)
|
||||||
|
|
||||||
|
target_include_directories(metis-gtsam BEFORE PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/include>
|
||||||
|
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/libmetis>
|
||||||
|
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/GKlib>
|
||||||
|
$<INSTALL_INTERFACE:include/gtsam/3rdparty/metis/>
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(metis-gtsam-if INTERFACE)
|
||||||
|
target_link_libraries(metis-gtsam-if INTERFACE metis-gtsam)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND GTSAM_EXPORTED_TARGETS metis-gtsam-if)
|
||||||
|
install(TARGETS metis-gtsam-if EXPORT GTSAM-exports ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
@ -32,6 +32,7 @@ endif()
|
||||||
print_build_options_for_target(gtsam)
|
print_build_options_for_target(gtsam)
|
||||||
|
|
||||||
print_config("Use System Eigen" "${GTSAM_USE_SYSTEM_EIGEN} (Using version: ${GTSAM_EIGEN_VERSION})")
|
print_config("Use System Eigen" "${GTSAM_USE_SYSTEM_EIGEN} (Using version: ${GTSAM_EIGEN_VERSION})")
|
||||||
|
print_config("Use System Metis" "${GTSAM_USE_SYSTEM_METIS}")
|
||||||
|
|
||||||
if(GTSAM_USE_TBB)
|
if(GTSAM_USE_TBB)
|
||||||
print_config("Use Intel TBB" "Yes (Version: ${TBB_VERSION})")
|
print_config("Use Intel TBB" "Yes (Version: ${TBB_VERSION})")
|
||||||
|
|
|
@ -49,10 +49,7 @@ if(NOT GTSAM_USE_SYSTEM_EIGEN)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(GTSAM_BUILD_METIS_EXECUTABLES "Build metis library executables" OFF)
|
# metis: already handled in ROOT/cmake/HandleMetis.cmake
|
||||||
if(GTSAM_SUPPORT_NESTED_DISSECTION)
|
|
||||||
add_subdirectory(metis)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(ceres)
|
add_subdirectory(ceres)
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,8 @@ list(APPEND gtsam_srcs "${PROJECT_BINARY_DIR}/config.h" "${PROJECT_BINARY_DIR}/d
|
||||||
install(FILES "${PROJECT_BINARY_DIR}/config.h" "${PROJECT_BINARY_DIR}/dllexport.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gtsam)
|
install(FILES "${PROJECT_BINARY_DIR}/config.h" "${PROJECT_BINARY_DIR}/dllexport.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gtsam)
|
||||||
|
|
||||||
if(GTSAM_SUPPORT_NESTED_DISSECTION)
|
if(GTSAM_SUPPORT_NESTED_DISSECTION)
|
||||||
list(APPEND GTSAM_ADDITIONAL_LIBRARIES metis-gtsam)
|
# target metis-gtsam-if is defined in both cases: embedded metis or system version:
|
||||||
|
list(APPEND GTSAM_ADDITIONAL_LIBRARIES metis-gtsam-if)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Versions
|
# Versions
|
||||||
|
@ -155,16 +156,6 @@ target_include_directories(gtsam SYSTEM BEFORE PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/CCOLAMD/Include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/CCOLAMD/Include>
|
||||||
$<INSTALL_INTERFACE:include/gtsam/3rdparty/CCOLAMD>
|
$<INSTALL_INTERFACE:include/gtsam/3rdparty/CCOLAMD>
|
||||||
)
|
)
|
||||||
if(GTSAM_SUPPORT_NESTED_DISSECTION)
|
|
||||||
target_include_directories(gtsam BEFORE PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/include>
|
|
||||||
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/libmetis>
|
|
||||||
$<BUILD_INTERFACE:${GTSAM_SOURCE_DIR}/gtsam/3rdparty/metis/GKlib>
|
|
||||||
$<INSTALL_INTERFACE:include/gtsam/3rdparty/metis/>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(WIN32) # Add 'lib' prefix to static library to avoid filename collision with shared library
|
if(WIN32) # Add 'lib' prefix to static library to avoid filename collision with shared library
|
||||||
if (NOT BUILD_SHARED_LIBS)
|
if (NOT BUILD_SHARED_LIBS)
|
||||||
|
|
|
@ -77,3 +77,6 @@
|
||||||
|
|
||||||
// Support Metis-based nested dissection
|
// Support Metis-based nested dissection
|
||||||
#cmakedefine GTSAM_TANGENT_PREINTEGRATION
|
#cmakedefine GTSAM_TANGENT_PREINTEGRATION
|
||||||
|
|
||||||
|
// Whether to use the system installed Metis instead of the provided one
|
||||||
|
#cmakedefine GTSAM_USE_SYSTEM_METIS
|
||||||
|
|
|
@ -25,8 +25,12 @@
|
||||||
#include <gtsam/3rdparty/CCOLAMD/Include/ccolamd.h>
|
#include <gtsam/3rdparty/CCOLAMD/Include/ccolamd.h>
|
||||||
|
|
||||||
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
#ifdef GTSAM_SUPPORT_NESTED_DISSECTION
|
||||||
|
#ifdef GTSAM_USE_SYSTEM_METIS
|
||||||
|
#include <metis.h>
|
||||||
|
#else
|
||||||
#include <gtsam/3rdparty/metis/include/metis.h>
|
#include <gtsam/3rdparty/metis/include/metis.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
#include "FindSeparator.h"
|
#include "FindSeparator.h"
|
||||||
|
|
||||||
|
#ifndef GTSAM_USE_SYSTEM_METIS
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <metis.h>
|
#include <metis.h>
|
||||||
#include "metislib.h"
|
#include "metislib.h"
|
||||||
|
@ -564,3 +566,5 @@ namespace gtsam { namespace partition {
|
||||||
}
|
}
|
||||||
|
|
||||||
}} //namespace
|
}} //namespace
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -20,6 +20,8 @@ using namespace std;
|
||||||
using namespace gtsam;
|
using namespace gtsam;
|
||||||
using namespace gtsam::partition;
|
using namespace gtsam::partition;
|
||||||
|
|
||||||
|
#ifndef GTSAM_USE_SYSTEM_METIS
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
// x0 - x1 - x2
|
// x0 - x1 - x2
|
||||||
// l3 l4
|
// l3 l4
|
||||||
|
@ -227,6 +229,8 @@ TEST ( Partition, findSeparator3_with_reduced_camera )
|
||||||
LONGS_EQUAL(2, partitionTable[28]);
|
LONGS_EQUAL(2, partitionTable[28]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
int main() { TestResult tr; return TestRegistry::runAllTests(tr);}
|
int main() { TestResult tr; return TestRegistry::runAllTests(tr);}
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
Loading…
Reference in New Issue