diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..3cb3cd692 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "thirdparty/sse2neon"] + path = thirdparty/sse2neon + url = https://github.com/jratcliff63367/sse2neon.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 376457df1..c3ad81921 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,8 +22,6 @@ find_package(LibZip QUIET) find_package(Pangolin 0.2 QUIET) find_package(OpenCV QUIET) - - # flags add_definitions("-DENABLE_SSE") set(CMAKE_CXX_FLAGS @@ -62,6 +60,7 @@ set(dso_SOURCE_FILES include_directories( ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/thirdparty/Sophus + ${PROJECT_SOURCE_DIR}/thirdparty/sse2neon ${EIGEN3_INCLUDE_DIR} ) diff --git a/README.md b/README.md index 21eff8e3d..f754dc712 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,9 @@ to unzip the dataset image archives before loading them). sudo make install sudo cp lib/zipconf.h /usr/local/include/zipconf.h # (no idea why that is needed). +##### sse2neon (required for ARM builds). +After cloning, just run `git submodule update --init` to include this. It translates Intel-native SSE functions to ARM-native NEON functions during the compilation process. + #### 2.3 Build cd dso diff --git a/src/FullSystem/CoarseInitializer.cpp b/src/FullSystem/CoarseInitializer.cpp index e449a3d7e..cbf6c4556 100644 --- a/src/FullSystem/CoarseInitializer.cpp +++ b/src/FullSystem/CoarseInitializer.cpp @@ -37,6 +37,9 @@ #include "FullSystem/PixelSelector2.h" #include "util/nanoflann.h" +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif namespace dso { diff --git a/src/FullSystem/CoarseTracker.cpp b/src/FullSystem/CoarseTracker.cpp index bdaf31e5b..2eb5bf60b 100644 --- a/src/FullSystem/CoarseTracker.cpp +++ b/src/FullSystem/CoarseTracker.cpp @@ -37,6 +37,10 @@ #include "IOWrapper/ImageRW.h" #include +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif + namespace dso { diff --git a/src/OptimizationBackend/AccumulatedTopHessian.cpp b/src/OptimizationBackend/AccumulatedTopHessian.cpp index 3ba19c34a..8e5967d91 100644 --- a/src/OptimizationBackend/AccumulatedTopHessian.cpp +++ b/src/OptimizationBackend/AccumulatedTopHessian.cpp @@ -27,6 +27,10 @@ #include "OptimizationBackend/EnergyFunctionalStructs.h" #include +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif + namespace dso { diff --git a/src/OptimizationBackend/EnergyFunctional.cpp b/src/OptimizationBackend/EnergyFunctional.cpp index 0628306c9..b531bc244 100644 --- a/src/OptimizationBackend/EnergyFunctional.cpp +++ b/src/OptimizationBackend/EnergyFunctional.cpp @@ -30,7 +30,9 @@ #include "OptimizationBackend/AccumulatedSCHessian.h" #include "OptimizationBackend/AccumulatedTopHessian.h" - +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif namespace dso { diff --git a/src/OptimizationBackend/EnergyFunctionalStructs.cpp b/src/OptimizationBackend/EnergyFunctionalStructs.cpp index 0accf6b1f..b708e552f 100644 --- a/src/OptimizationBackend/EnergyFunctionalStructs.cpp +++ b/src/OptimizationBackend/EnergyFunctionalStructs.cpp @@ -28,7 +28,9 @@ #include "FullSystem/HessianBlocks.h" #include "FullSystem/Residuals.h" - +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif namespace dso { diff --git a/src/OptimizationBackend/MatrixAccumulators.h b/src/OptimizationBackend/MatrixAccumulators.h index 08b18f800..366789583 100644 --- a/src/OptimizationBackend/MatrixAccumulators.h +++ b/src/OptimizationBackend/MatrixAccumulators.h @@ -25,6 +25,9 @@ #pragma once #include "util/NumType.h" +#ifndef __SSE3__ +#include "SSE2NEON.h" +#endif namespace dso { diff --git a/thirdparty/sse2neon b/thirdparty/sse2neon new file mode 160000 index 000000000..824a6306e --- /dev/null +++ b/thirdparty/sse2neon @@ -0,0 +1 @@ +Subproject commit 824a6306ecc30d1479ebf6de3a7828ded0852682