diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e6aa957..353806fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ project(Scanner) option(BUILD_CUDA "" ON) option(BUILD_TESTS "" ON) option(ENABLE_PROFILING "" OFF) +option(BUILD_STATIC "" OFF) if (BUILD_TESTS) enable_testing() @@ -127,6 +128,10 @@ set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG") add_subdirectory(scanner) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic") + add_library(scanner SHARED $ $ diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index acea305e..32a49619 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -67,6 +67,8 @@ find_package(Storehouse REQUIRED CONFIG "${STOREHOUSE_DIR}") find_package(TinyToml REQUIRED) +get_filename_component(JPEG_PATH "${JPEG_LIBRARIES}" DIRECTORY) + set(PYBIND11_PYTHON_VERSION 3) find_package(pybind11 REQUIRED) @@ -94,11 +96,10 @@ set(SCANNER_LIBRARIES "${STOREHOUSE_LIBRARIES}" "${OPENSSL_LIBRARIES}" "${PYTHON_LIBRARIES}" - "${JPEG_LIBRARY}" "-lz" "-ldl" ) - +list(APPEND SCANNER_LIBRARIES "${JPEG_LIBRARIES}") include_directories( "." "${CMAKE_CURRENT_BINARY_DIR}" # for protobuf generated files diff --git a/cmake/Modules/FindFFmpeg.cmake b/cmake/Modules/FindFFmpeg.cmake index b2269196..02c2dbb9 100644 --- a/cmake/Modules/FindFFmpeg.cmake +++ b/cmake/Modules/FindFFmpeg.cmake @@ -34,27 +34,27 @@ PATHS ${_FFMPEG_AVCODEC_INCLUDE_DIRS} /usr/include /usr/local/include /opt/local PATH_SUFFIXES ffmpeg libav ) -find_library(FFMPEG_LIBAVCODEC +find_library(FFMPEG_LIBAVCODEC libavcodec.a NAMES avcodec PATHS ${_FFMPEG_AVCODEC_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) -find_library(FFMPEG_LIBAVFORMAT +find_library(FFMPEG_LIBAVFORMAT libavformat.a NAMES avformat PATHS ${_FFMPEG_AVFORMAT_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) -find_library(FFMPEG_LIBAVUTIL +find_library(FFMPEG_LIBAVUTIL libavutil.a NAMES avutil PATHS ${_FFMPEG_AVUTIL_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) -find_library(FFMPEG_LIBSWRESAMPLE +find_library(FFMPEG_LIBSWRESAMPLE libswresample.a NAMES swresample PATHS ${_FFMPEG_AVUTIL_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) -find_library(FFMPEG_LIBSWSCALE +find_library(FFMPEG_LIBSWSCALE libswscale.a NAMES swscale PATHS ${_FFMPEG_AVCODEC_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) diff --git a/cmake/Modules/FindGRPC.cmake b/cmake/Modules/FindGRPC.cmake index cb819711..3a8d3c3d 100644 --- a/cmake/Modules/FindGRPC.cmake +++ b/cmake/Modules/FindGRPC.cmake @@ -27,15 +27,15 @@ else() ${GRPC_DIR}/include) endif() -find_library(GRPCPP_UNSECURE_LIBRARY grpc++_unsecure +find_library(GRPCPP_UNSECURE_LIBRARY libgrpc++_unsecure.a grpc++_unsecure PATHS ${GRPC_DIR}/lib) -find_library(GRPC_LIBRARY grpc +find_library(GRPC_LIBRARY libgrpc.a grpc PATHS ${GRPC_DIR}/lib) -find_library(GPR_LIBRARY gpr +find_library(GPR_LIBRARY libgpr.a gpr PATHS ${GRPC_DIR}/lib) diff --git a/deps.sh b/deps.sh index 8a1c0731..a25e5c7f 100644 --- a/deps.sh +++ b/deps.sh @@ -310,6 +310,14 @@ if [[ $INSTALL_NONE == true ]]; then elif [[ $INSTALL_ALL == false ]]; then # Ask about each library + echo -n "Do you want to build statically? [y/N]: " + read yn + if [[ $yn == y ]] || [[ $yn == Y ]]; then + BUILD_STATIC=true + else + BUILD_STATIC=false + fi + echo "Required dependencies: " if [[ -z ${WITH_OPENCV+x} ]]; then if [[ $HAS_BREW == true ]] && brew ls --versions opencv > /dev/null; then @@ -581,28 +589,40 @@ if [[ $INSTALL_GRPC == true ]] && [[ ! -f $BUILD_DIR/grpc.done ]] ; then # gRPC 1.16.0 echo "Installing gRPC 1.16.0..." cd $BUILD_DIR - rm -fr grpc - git clone -b v1.16.0 https://github.com/grpc/grpc && \ + if [[ $BUILD_STATIC == true ]] ; then + rm -fr grpc + git clone -b v1.16.0 https://github.com/grpc/grpc && + cd grpc && git submodule update --init --recursive && \ + CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib make -j$cores && \ + CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib make install prefix=$INSTALL_PREFIX + find . -type f -name "*.a" -exec cp '{}' $DEFAULT_INSTALL_DIR/lib/ ';' + touch $BUILD_DIR/grpc.done \ + || { echo 'Installing gRPC failed!' ; exit 1; } + else + rm -fr grpc + git clone -b v1.16.0 https://github.com/grpc/grpc && \ cd grpc && git submodule update --init --recursive && \ CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib make -j$cores && \ CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib make install prefix=$INSTALL_PREFIX && \ touch $BUILD_DIR/grpc.done \ || { echo 'Installing gRPC failed!' ; exit 1; } - if [[ "$OSTYPE" == "linux-gnu" ]]; then - # Linux - ldconfig -n $INSTALL_PREFIX/lib - elif [[ "$OSTYPE" == "darwin"* ]]; then - # OS X - install_name_tool -id "@rpath/libgrpc++_unsecure.dylib" \ - $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib - install_name_tool -id "@rpath/libgrpc.dylib" \ - $INSTALL_PREFIX/lib/libgrpc.dylib - install_name_tool -id "@rpath/libgpr.dylib" \ - $INSTALL_PREFIX/lib/libgpr.dylib - install_name_tool -change libgpr.dylib @rpath/libgpr.dylib \ - $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib - install_name_tool -change libgrpc_unsecure.dylib @rpath/libgrpc_unsecure.dylib \ - $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib + + if [[ "$OSTYPE" == "linux-gnu" ]]; then + # Linux + ldconfig -n $INSTALL_PREFIX/lib + elif [[ "$OSTYPE" == "darwin"* ]]; then + OS X + install_name_tool -id "@rpath/libgrpc++_unsecure.dylib" \ + $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib + install_name_tool -id "@rpath/libgrpc.dylib" \ + $INSTALL_PREFIX/lib/libgrpc.dylib + install_name_tool -id "@rpath/libgpr.dylib" \ + $INSTALL_PREFIX/lib/libgpr.dylib + install_name_tool -change libgpr.dylib @rpath/libgpr.dylib \ + $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib + install_name_tool -change libgrpc_unsecure.dylib @rpath/libgrpc_unsecure.dylib \ + $INSTALL_PREFIX/lib/libgrpc++_unsecure.dylib + fi fi echo "Done installing gRPC 1.16.0" fi @@ -625,17 +645,38 @@ if [[ $INSTALL_FFMPEG == true ]] && [[ ! -f $BUILD_DIR/ffmpeg.done ]] ; then # FFMPEG cd $BUILD_DIR rm -fr ffmpeg - git clone -b n3.3.1 https://git.ffmpeg.org/ffmpeg.git && cd ffmpeg && \ - ./configure --prefix=$INSTALL_PREFIX \ - --enable-shared --disable-stripping \ - --disable-decoder=libschroedinger \ - --enable-avresample \ - --enable-libx264 \ - --enable-nonfree \ - --enable-gpl \ - --enable-gnutls \ - $(echo $CMDS) && \ - make -j${cores} && make install && touch $BUILD_DIR/ffmpeg.done \ + if [[ $BUILD_STATIC == true ]] ; then + git clone -b n3.3.1 https://git.ffmpeg.org/ffmpeg.git && cd ffmpeg && \ + ./configure --prefix=$INSTALL_PREFIX \ + --enable-shared --disable-stripping \ + --disable-decoder=libschroedinger \ + --enable-avresample \ + --enable-libx264 \ + --enable-nonfree \ + --enable-gpl \ + --enable-gnutls \ + --enable-pic \ + --extra-ldexeflags=-pie \ + $(echo $CMDS) && \ + make -j${cores} && make install + find . -type f -name "*.a" -exec cp '{}' $DEFAULT_INSTALL_DIR/lib/ ';' + else + git clone -b n3.3.1 https://git.ffmpeg.org/ffmpeg.git && cd ffmpeg && \ + ./configure --prefix=$INSTALL_PREFIX \ + --enable-shared --disable-stripping \ + --disable-decoder=libschroedinger \ + --enable-avresample \ + --enable-libx264 \ + --enable-nonfree \ + --enable-gpl \ + --enable-gnutls \ + --enable-pic \ + --extra-ldexeflags=-pie \ + $(echo $CMDS) && \ + make -j${cores} && make install + fi + + touch $BUILD_DIR/ffmpeg.done \ || { echo 'Installing ffmpeg failed!' ; exit 1; } echo "Done installing ffmpeg 3.3.1" fi