From 74b780450f130ffd3eade80bb0bcb5b0a89ecff2 Mon Sep 17 00:00:00 2001 From: Mirota Date: Fri, 29 Apr 2016 13:12:29 -0700 Subject: [PATCH] Updates to HAL --- HAL/CMakeLists.txt | 185 ++++++++++++++---- HAL/Camera/Drivers/Convert/CMakeLists.txt | 9 + HAL/Camera/Drivers/FileReader/CMakeLists.txt | 23 ++- .../Drivers/FileReader/FileReaderDriver.cpp | 33 +++- .../Drivers/FileReader/FileReaderDriver.h | 1 + HAL/Camera/Drivers/FileReader/ReadImage.cpp | 1 + HAL/Camera/Drivers/FileReader/ReadImage.h | 2 +- HAL/Camera/Drivers/Rectify/RectifyDriver.cpp | 2 +- .../Drivers/Undistort/UndistortDriver.cpp | 2 +- HAL/Devices/CMakeLists.txt | 2 +- HAL/Devices/DeviceRegistry.h | 2 +- HAL/Devices/{SharedLoad.h => SharedLoad.h.in} | 2 +- HAL/IMU/Drivers/Csv/CsvDriver.cpp | 8 +- HAL/LIDAR/Drivers/Velodyne/CMakeLists.txt | 2 + HAL/Messages/Image.h | 4 +- HAL/Messages/Logger.h | 2 +- HAL/Messages/Reader.cpp | 1 + HAL/Utils/StringUtils.h | 2 + HAL/hal-config.cmake.in | 8 + cmake_modules/install_package.cmake | 11 +- 20 files changed, 240 insertions(+), 62 deletions(-) rename HAL/Devices/{SharedLoad.h => SharedLoad.h.in} (86%) create mode 100644 HAL/hal-config.cmake.in diff --git a/HAL/CMakeLists.txt b/HAL/CMakeLists.txt index 4927f3d6..1c9861be 100644 --- a/HAL/CMakeLists.txt +++ b/HAL/CMakeLists.txt @@ -17,27 +17,25 @@ include( install_package ) string(TOLOWER ${PROJECT_NAME} LIBRARY_NAME) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-inconsistent-missing-override -Wextra") +if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wno-inconsistent-missing-override -Wextra") +endif() ############################################################################# # Find required libraries find_package( Eigen3 REQUIRED ) -find_package( Protobuf REQUIRED ) -if(ANDROID) - # Override to use hosts protoc compiler - unset(PROTOBUF_PROTOC_EXECUTABLE CACHE) - find_host_package(Protobuf REQUIRED) -endif() +find_package( protobuf REQUIRED CONFIG) find_package( Sophus REQUIRED ) -find_package( GLog REQUIRED ) -find_package( TinyXML2 QUIET ) +find_package( gflags REQUIRED CONFIG) +find_package( glog REQUIRED CONFIG) +find_package( tinyxml2 QUIET CONFIG) -if(TinyXML2_FOUND) +if(tinyxml2_FOUND) add_definitions(-DHAVE_TINYXML2) - list(APPEND LINK_LIBS ${TinyXML2_LIBRARIES}) - list(APPEND USER_INC ${TinyXML2_INCLUDE_DIRS}) + list(APPEND LINK_LIBS tinyxml2) endif() + find_package(OpenCV QUIET COMPONENTS core) if(NOT OpenCV_FOUND) message(WARNING "No OpenCV found; camera drivers disabled.") @@ -49,14 +47,18 @@ elseif(OpenCV_VERSION_MAJOR EQUAL 3) find_package(OpenCV QUIET COMPONENTS core imgproc imgcodecs videoio) endif() +if(WIN32) + find_path(DIRENT_INCLUDE_DIR NAMES dirent.h) + find_package(dlfcn-win32 REQUIRED CONFIG) + list( APPEND LINK_LIBS dlfcn-win32::dl) + find_path(POSIX_shim_INCLUDE_DIR NAMES unistd.h) +endif() + list( APPEND USER_INC ${EIGEN3_INCLUDE_DIR} ) list( APPEND USER_INC ${Sophus_INCLUDE_DIRS} ) -list( APPEND USER_INC ${PROTOBUF_INCLUDE_DIR} ) -list( APPEND USER_INC ${GLog_INCLUDE_DIRS} ) -include_directories( ${LIB_INC_DIR} ${USER_INC} ) -list( APPEND LINK_LIBS ${PROTOBUF_LIBRARIES} ${GLog_LIBRARIES}) +list( APPEND LINK_LIBS protobuf::libprotobuf glog::glog gflags_shared) ############################################################################# # HAL macros for driver writers. @@ -80,7 +82,16 @@ macro( add_to_hal_libraries ) set_property( GLOBAL APPEND PROPERTY P_LIBRARIES "${lib}" ) else() # For imported targets, we just want to depend on the library directly - get_target_property(libpath ${lib} LOCATION) + if(NOT WIN32) + set(prop LOCATION) + else() + set(prop IMPORTED_IMPLIB_DEBUG) + get_target_property(libpath ${lib} ${prop}) + if(NOT libpath) + set(prop IMPORTED_IMPLIB_RELEASE) + endif() + endif() + get_target_property(libpath ${lib} ${prop}) if (libpath) set_property( GLOBAL APPEND PROPERTY P_LIBRARIES "${libpath}" ) # This shouldn't really happen, but let's cover our bases. @@ -140,6 +151,7 @@ endmacro() ############################################################################# # Add Devices + add_subdirectory( Devices ) add_subdirectory( ThirdParty ) add_subdirectory( IMU ) @@ -179,7 +191,9 @@ set( _PROTO_SRCS ${PROTO_DIR}/NodeCamMessage.proto ${PROTO_DIR}/Command.proto ) - +IF(WIN32) + set(PROTOBUF_GENERATE_CPP_EXPORT dllexport_decl=HAL_EXPORT:) +ENDIF() PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${_PROTO_SRCS}) add_to_hal_sources( ${PROTO_SRCS} ) @@ -205,13 +219,18 @@ foreach(val RANGE ${len_c_o_s} ) set_source_files_properties( ${source} PROPERTIES COMPILE_FLAGS ${flag} ) endforeach() -if(TinyXML2_FOUND) - include_directories( ${TinyXML2_INCLUDE_DIR} ) -endif() - ############################################################################# ## Protobuf +find_package(OpenCV QUIET COMPONENTS core) + +set(OpenCV_FOUND FALSE) +if(OpenCV_VERSION_MAJOR EQUAL 2) + find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui) +elseif(OpenCV_VERSION_MAJOR EQUAL 3) + find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs videoio highgui) +endif() + list(APPEND HAL_SOURCES ${PROTO_DIR}/Logger.cpp ${PROTO_DIR}/Reader.cpp @@ -243,49 +262,131 @@ endif() ########################################################################## include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) -include_directories( ${LIB_INC_DIR} ) +if(TinyXML2_FOUND) + include_directories( ${TinyXML2_INCLUDE_DIR} ) +endif() include_directories( ${INTERNAL_INC} ) +include_directories( ${USER_INC} ) include_directories( ${CMAKE_CURRENT_BINARY_DIR}/Messages ) +include_directories( ${CMAKE_BINARY_DIR} ) +include_directories( ${OpenCV_INCLUDE_DIRS} ) link_directories(/usr/local/lib) +link_directories(${CMAKE_INSTALL_PREFIX}/lib) set(HAL_LIBS ${INTERNAL_LIBS} - ${PROTOBUF_LIBRARIES} ${LINK_LIBS} - CACHE STRING "HAL required libraries" + ${OpenCV_LIBS} ) list( REMOVE_ITEM HAL_LIBS "debug" ) list( REMOVE_ITEM HAL_LIBS "optimized" ) set(HAL_INCLUDES - ${LIB_INC_DIR} - ${USER_INC} - CACHE STRING "HAL required includes" ) - + ${USER_INC} ) add_library( hal ${HAL_SOURCES} ) target_link_libraries( hal ${HAL_LIBS} ) +SET_TARGET_PROPERTIES(hal PROPERTIES PREFIX lib) + +if (BUILD_SHARED_LIBS) + + if (WIN32) + set (_EXPORT "__declspec(dllexport)") + set (_IMPORT "__declspec(dllimport)") + endif() + + target_compile_definitions (hal PRIVATE + "HAL_EXPORT=${_EXPORT}") + target_compile_definitions (hal INTERFACE + "HAL_EXPORT=${_IMPORT}") + +else() + target_compile_definitions (hal PUBLIC HAL_EXPORT=) +endif() + +if(WIN32) + target_include_directories(hal PUBLIC ${DIRENT_INCLUDE_DIR} ) + target_include_directories(hal PUBLIC ${POSIX_shim_INCLUDE_DIR} ) +endif() + +if(ANDROID) + set_target_properties(hal PROPERTIES LINK_FLAGS " -Wl,--build-id ") +endif() + + ######################################################## ## Create configure file for inclusion in library configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Devices/SharedLoad.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/Devices/SharedLoad.h" ) + set( GENERATED_HEADERS ${PROTO_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/config.h - ${CMAKE_CURRENT_BINARY_DIR}/ThirdParty/ThirdPartyConfig.h ) - -install_package( - PKG_NAME HAL - LIB_NAME hal - VERSION ${HAL_VERSION} - INSTALL_HEADERS ${HAL_HEADERS} - INSTALL_GENERATED_HEADERS ${GENERATED_HEADERS} - DESTINATION ${CMAKE_INSTALL_PREFIX}/include - INCLUDE_DIRS ${HAL_INCLUDES} - LINK_LIBS ${HAL_LIBS} - ) + ${CMAKE_CURRENT_BINARY_DIR}/ThirdParty/ThirdPartyConfig.h ${CMAKE_CURRENT_BINARY_DIR}/Devices/SharedLoad.h) -include_directories( ${CMAKE_BINARY_DIR} ) +IF(USB1_LIBRARY) + set(HAL_LIBS ${HAL_LIBS} ${USB1_LIBRARY}) +ENDIF() + +include (CMakePackageConfigHelpers) + + +install (TARGETS hal + EXPORT hal-targets + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION include/HAL + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) +set(LOAD_DEPENDENCY "find_package( protobuf CONFIG ) +find_dependency( gflags ) +find_dependency( glog )") + +if(tinyxml2_FOUND) + set(LOAD_DEPENDENCY "${LOAD_DEPENDENCY} +find_dependency(tinyxml2)") +endif() + +if(WIN32) + set(LOAD_DEPENDENCY "${LOAD_DEPENDENCY} +find_dependency(dlfcn-win32)") +endif() + + +configure_package_config_file (hal-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/hal-config.cmake + INSTALL_DESTINATION lib/cmake/hal + NO_CHECK_REQUIRED_COMPONENTS_MACRO) + +write_basic_package_version_file (hal-config-version.cmake VERSION + ${HAL_VERSION} COMPATIBILITY SameMajorVersion) + +export (TARGETS hal NAMESPACE hal:: FILE hal-targets.cmake) +export (PACKAGE HAL) + +install (FILES + ${CMAKE_CURRENT_BINARY_DIR}/hal-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hal-config-version.cmake + DESTINATION lib/cmake/hal) + +install (EXPORT hal-targets NAMESPACE hal:: DESTINATION lib/cmake/hal) + +foreach(hdr IN LISTS HAL_HEADERS ) + get_filename_component( _fp ${hdr} ABSOLUTE ) + file( RELATIVE_PATH _rpath ${CMAKE_SOURCE_DIR} ${_fp} ) + get_filename_component( _dir ${_rpath} DIRECTORY ) + install( FILES ${_fp} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_dir} ) +endforeach() + +foreach(hdr IN LISTS GENERATED_HEADERS ) + get_filename_component( _fp ${hdr} ABSOLUTE ) + file( RELATIVE_PATH _rpath ${CMAKE_BINARY_DIR} ${_fp} ) + get_filename_component( _dir ${_rpath} DIRECTORY ) + install( FILES ${_fp} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_dir} ) +endforeach() diff --git a/HAL/Camera/Drivers/Convert/CMakeLists.txt b/HAL/Camera/Drivers/Convert/CMakeLists.txt index 0ff78ded..c3e080f2 100644 --- a/HAL/Camera/Drivers/Convert/CMakeLists.txt +++ b/HAL/Camera/Drivers/Convert/CMakeLists.txt @@ -1,4 +1,13 @@ + message( STATUS "HAL: building 'Convert' abstract camera driver (using libopencv).") +find_package(OpenCV QUIET COMPONENTS core) + +set(OpenCV_FOUND FALSE) +if(OpenCV_VERSION_MAJOR EQUAL 2) + find_package(OpenCV QUIET COMPONENTS core imgproc highgui) +elseif(OpenCV_VERSION_MAJOR EQUAL 3) + find_package(OpenCV QUIET COMPONENTS core imgproc imgcodecs videoio) +endif() add_to_hal_libraries( ${OpenCV_LIBS} ) add_to_hal_include_dirs( ${OpenCV_INCLUDE_DIRS} ) diff --git a/HAL/Camera/Drivers/FileReader/CMakeLists.txt b/HAL/Camera/Drivers/FileReader/CMakeLists.txt index c4eefd79..ee7201bf 100644 --- a/HAL/Camera/Drivers/FileReader/CMakeLists.txt +++ b/HAL/Camera/Drivers/FileReader/CMakeLists.txt @@ -1,11 +1,24 @@ set( BUILD_FileReader true CACHE BOOL force ) -if( BUILD_FileReader ) +find_package(OpenCV QUIET COMPONENTS core) + +set(OpenCV_FOUND FALSE) +if(OpenCV_VERSION_MAJOR EQUAL 2) + find_package(OpenCV QUIET COMPONENTS core imgproc highgui) +elseif(OpenCV_VERSION_MAJOR EQUAL 3) + find_package(OpenCV QUIET COMPONENTS core imgproc imgcodecs videoio highgui) +endif() + + +if( BUILD_FileReader AND OpenCV_FOUND) message( STATUS "HAL: building 'FileReader' camera driver.") -add_to_hal_sources( - FileReaderDriver.cpp FileReaderFactory.cpp ReadImage.cpp - FileReaderDriver.h ReadImage.h -) + add_to_hal_libraries( ${OpenCV_LIBS} ) + add_to_hal_include_dirs( ${OpenCV_INCLUDE_DIRS} ) + add_to_hal_sources( + FileReaderDriver.cpp FileReaderFactory.cpp ReadImage.cpp + FileReaderDriver.h ReadImage.h + ) + endif() diff --git a/HAL/Camera/Drivers/FileReader/FileReaderDriver.cpp b/HAL/Camera/Drivers/FileReader/FileReaderDriver.cpp index ee8a11c4..f6d3964a 100644 --- a/HAL/Camera/Drivers/FileReader/FileReaderDriver.cpp +++ b/HAL/Camera/Drivers/FileReader/FileReaderDriver.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include "ReadImage.h" @@ -40,6 +40,8 @@ FileReaderDriver::FileReaderDriver(const std::vector& ChannelRegex, m_vFileList.resize(m_nNumChannels); + m_vOffsets.resize(m_nNumChannels); + for(unsigned int ii = 0; ii < m_nNumChannels; ii++) { // Now generate the list of files for each channel std::vector< std::string >& vFiles = m_vFileList[ii]; @@ -191,11 +193,30 @@ bool FileReaderDriver::_Read() { // now fetch the next set of images std::string sFileName; + //pre-read filenames and collect timestamps + std::vector timestamps(m_nNumChannels); + for (unsigned int ii = 0; ii < m_nNumChannels; ++ii) { + if (m_nCurrentImageIndex + m_vOffsets[ii] < m_vFileList[ii].size() && m_nCurrentImageIndex + m_vOffsets[ii] >= 0) { + sFileName = m_vFileList[ii][m_nCurrentImageIndex + m_vOffsets[ii]]; + timestamps[ii] = _GetTimestamp(sFileName); + } + } + + //if timestamps are different send blank image + + auto min_timestamp = *std::min_element(timestamps.begin(), timestamps.end()); + hal::CameraMsg vImages; double device_timestamp = -1; for(unsigned int ii = 0; ii < m_nNumChannels; ++ii) { hal::ImageMsg* pbImg = vImages.add_image(); - sFileName = m_vFileList[ii][m_nCurrentImageIndex]; + if (m_nCurrentImageIndex + m_vOffsets[ii] < m_vFileList[ii].size() && m_nCurrentImageIndex + m_vOffsets[ii] >= 0) { + sFileName = m_vFileList[ii][m_nCurrentImageIndex + m_vOffsets[ii]]; + } + else + { + sFileName = m_vFileList[ii][m_nCurrentImageIndex]; + } cv::Mat cvImg = _ReadFile(sFileName, m_iCvImageReadFlags); double timestamp = _GetTimestamp(sFileName); @@ -224,6 +245,14 @@ bool FileReaderDriver::_Read() { if(cvImg.channels() == 3) { pbImg->set_format(hal::PB_RGB); } + + + if (std::abs(timestamps[ii] - min_timestamp) > 0.001 /*seconds = 1 ms*/) { + m_vOffsets[ii]--; // this image is too far in the future, process it next time + cvImg.setTo(0); + } + + pbImg->set_data( (const char*)cvImg.data, cvImg.rows * cvImg.cols * cvImg.elemSize1() * cvImg.channels()); diff --git a/HAL/Camera/Drivers/FileReader/FileReaderDriver.h b/HAL/Camera/Drivers/FileReader/FileReaderDriver.h index 25329211..3072c3af 100644 --- a/HAL/Camera/Drivers/FileReader/FileReaderDriver.h +++ b/HAL/Camera/Drivers/FileReader/FileReaderDriver.h @@ -58,6 +58,7 @@ class FileReaderDriver : public CameraDriverInterface { std::string m_sBaseDir; unsigned int m_nNumChannels; unsigned int m_nCurrentImageIndex; + std::vector< int > m_vOffsets; // Vector of index offsets to align the timestamps bool m_bLoop; unsigned int m_nNumImages; unsigned int m_nBufferSize; diff --git a/HAL/Camera/Drivers/FileReader/ReadImage.cpp b/HAL/Camera/Drivers/FileReader/ReadImage.cpp index e7bbc2d2..2064d1a2 100644 --- a/HAL/Camera/Drivers/FileReader/ReadImage.cpp +++ b/HAL/Camera/Drivers/FileReader/ReadImage.cpp @@ -1,6 +1,7 @@ #include "ReadImage.h" #include +#include namespace hal { diff --git a/HAL/Camera/Drivers/FileReader/ReadImage.h b/HAL/Camera/Drivers/FileReader/ReadImage.h index 3ce57372..a8ba60b6 100644 --- a/HAL/Camera/Drivers/FileReader/ReadImage.h +++ b/HAL/Camera/Drivers/FileReader/ReadImage.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include namespace hal { diff --git a/HAL/Camera/Drivers/Rectify/RectifyDriver.cpp b/HAL/Camera/Drivers/Rectify/RectifyDriver.cpp index 44c0ce5a..5542c682 100644 --- a/HAL/Camera/Drivers/Rectify/RectifyDriver.cpp +++ b/HAL/Camera/Drivers/Rectify/RectifyDriver.cpp @@ -51,7 +51,7 @@ bool RectifyDriver::Capture( hal::CameraMsg& vImages ) vImages.set_device_time(vIn.device_time()); for(int k=0; k < 2; ++k) { - uint num_channels = 1; + unsigned int num_channels = 1; if (inimg[k].Format() == hal::Format::PB_BGR || inimg[k].Format() == hal::Format::PB_RGB) { num_channels = 3; diff --git a/HAL/Camera/Drivers/Undistort/UndistortDriver.cpp b/HAL/Camera/Drivers/Undistort/UndistortDriver.cpp index 57da973e..8ca53fee 100644 --- a/HAL/Camera/Drivers/Undistort/UndistortDriver.cpp +++ b/HAL/Camera/Drivers/Undistort/UndistortDriver.cpp @@ -64,7 +64,7 @@ bool UndistortDriver::Capture( hal::CameraMsg& vImages ) //Transfer the timestamps from the source to the destination pimg->set_timestamp(inimg.Timestamp()); - uint num_channels = 1; + unsigned int num_channels = 1; if (pimg->format() == hal::PB_LUMINANCE) { num_channels = 1; } else if (pimg->format() == hal::PB_BGRA || diff --git a/HAL/Devices/CMakeLists.txt b/HAL/Devices/CMakeLists.txt index ffe18a33..d24d5a93 100644 --- a/HAL/Devices/CMakeLists.txt +++ b/HAL/Devices/CMakeLists.txt @@ -4,7 +4,7 @@ set(HDRS DeviceRegistry.h DeviceTime.h DriverInterface.h - SharedLoad.h +# SharedLoad.h ) add_to_hal_sources( DeviceTime.cpp DeviceRegistry.cpp ) diff --git a/HAL/Devices/DeviceRegistry.h b/HAL/Devices/DeviceRegistry.h index 440bbc50..cfb20c1f 100644 --- a/HAL/Devices/DeviceRegistry.h +++ b/HAL/Devices/DeviceRegistry.h @@ -13,7 +13,7 @@ namespace hal template class DeviceFactory; template -class DeviceRegistry +class HAL_EXPORT DeviceRegistry { public: /// global device registery singleton diff --git a/HAL/Devices/SharedLoad.h b/HAL/Devices/SharedLoad.h.in similarity index 86% rename from HAL/Devices/SharedLoad.h rename to HAL/Devices/SharedLoad.h.in index 5837ba52..649dde17 100644 --- a/HAL/Devices/SharedLoad.h +++ b/HAL/Devices/SharedLoad.h.in @@ -21,7 +21,7 @@ struct StaticInitForceLoad{ #ifndef __APPLE__ // Trigger load of all symbols via this static variable -static StaticInitForceLoad g_StaticInitForceLoadHAL("libhal.so"); +static StaticInitForceLoad g_StaticInitForceLoadHAL("libhal@CMAKE_SHARED_LIBRARY_SUFFIX@"); #endif } diff --git a/HAL/IMU/Drivers/Csv/CsvDriver.cpp b/HAL/IMU/Drivers/Csv/CsvDriver.cpp index 4c821130..c43be5c0 100644 --- a/HAL/IMU/Drivers/Csv/CsvDriver.cpp +++ b/HAL/IMU/Drivers/Csv/CsvDriver.cpp @@ -5,6 +5,8 @@ #include #include +#include + #include "CsvDriver.h" namespace hal @@ -40,7 +42,7 @@ CsvDriver::CsvDriver( if( sFileAccel.empty() == false ) { m_pFileAccel.open( sFileAccel.c_str() ); if( m_pFileAccel.is_open() == false ) { - std::cerr << "IMULog: Couldn't open accel file '" << sFileAccel << "'" << std::endl; + LOG(ERROR) << "IMULog: Couldn't open accel file '" << sFileAccel << "'" << std::endl; } else { m_bHaveAccel = true; } @@ -49,7 +51,7 @@ CsvDriver::CsvDriver( if( sFileGyro.empty() == false ) { m_pFileGyro.open( sFileGyro.c_str() ); if( m_pFileGyro.is_open() == false ) { - std::cerr << "IMULog: Couldn't open gyro file '" << sFileGyro << "'" << std::endl; + LOG(ERROR) << "IMULog: Couldn't open gyro file '" << sFileGyro << "'" << std::endl; } else { m_bHaveGyro = true; } @@ -58,7 +60,7 @@ CsvDriver::CsvDriver( if( sFileMag.empty() == false ) { m_pFileMag.open( sFileMag.c_str() ); if( m_pFileMag.is_open() == false ) { - std::cerr << "IMULog: Couldn't open mag file '" << sFileMag << "'" << std::endl; + LOG(INFO) << "IMULog: Couldn't open mag file '" << sFileMag << "'" << std::endl; } else { m_bHaveMag = true; } diff --git a/HAL/LIDAR/Drivers/Velodyne/CMakeLists.txt b/HAL/LIDAR/Drivers/Velodyne/CMakeLists.txt index 195e31c1..2c8d12e7 100644 --- a/HAL/LIDAR/Drivers/Velodyne/CMakeLists.txt +++ b/HAL/LIDAR/Drivers/Velodyne/CMakeLists.txt @@ -1,3 +1,4 @@ +if(BUILD_Velodyne) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) find_package( TinyXML2 QUIET ) @@ -6,4 +7,5 @@ if( TinyXML2_FOUND ) add_to_hal_libraries(${TinyXML2_LIBRARIES}) add_to_hal_include_dirs(${TinyXML2_INCLUDE_DIRS}) endif() +endif() diff --git a/HAL/Messages/Image.h b/HAL/Messages/Image.h index df09fc11..87f4e25f 100644 --- a/HAL/Messages/Image.h +++ b/HAL/Messages/Image.h @@ -4,7 +4,7 @@ #include #pragma GCC system_header -#include +#include namespace hal { @@ -36,7 +36,7 @@ void ReadFile(const std::string& sFileName, hal::ImageMsg* pbImage); * deep copy. * */ -class Image { +class HAL_EXPORT Image { public: /// Construct with only an ImageMsg reference. Caller is responsible /// for ensuring the data outlasts this Image and its cv::Mat diff --git a/HAL/Messages/Logger.h b/HAL/Messages/Logger.h index 3131f1a3..f119d58b 100644 --- a/HAL/Messages/Logger.h +++ b/HAL/Messages/Logger.h @@ -12,7 +12,7 @@ namespace hal { -class Logger { +class HAL_EXPORT Logger { public: static Logger& GetInstance(); diff --git a/HAL/Messages/Reader.cpp b/HAL/Messages/Reader.cpp index 62b08f02..19df26e7 100644 --- a/HAL/Messages/Reader.cpp +++ b/HAL/Messages/Reader.cpp @@ -1,3 +1,4 @@ + #include #include #include diff --git a/HAL/Utils/StringUtils.h b/HAL/Utils/StringUtils.h index f762bfb2..5414d6ce 100644 --- a/HAL/Utils/StringUtils.h +++ b/HAL/Utils/StringUtils.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -8,6 +9,7 @@ #include #include #include +#include namespace hal { diff --git a/HAL/hal-config.cmake.in b/HAL/hal-config.cmake.in new file mode 100644 index 00000000..dec5dfad --- /dev/null +++ b/HAL/hal-config.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + + +include (CMakeFindDependencyMacro) + +@LOAD_DEPENDENCY@ + +include ("${CMAKE_CURRENT_LIST_DIR}/hal-targets.cmake") diff --git a/cmake_modules/install_package.cmake b/cmake_modules/install_package.cmake index 42b79242..ec80fce3 100644 --- a/cmake_modules/install_package.cmake +++ b/cmake_modules/install_package.cmake @@ -140,7 +140,16 @@ function(install_package) # install library itself if( PACKAGE_LIB_NAME ) - install( FILES ${_target_library} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib ) + + if(MSVC) + string(REPLACE "$(Configuration)" "\${BUILD_TYPE}" _target_library ${_target_library}) + endif() + + install( TARGETS ${PACKAGE_LIB_NAME} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + ) set( PACKAGE_LIB_LINK "-l${PACKAGE_LIB_NAME}" ) endif()