cmake_minimum_required(VERSION 2.8.3)
project(homer_mapping)

find_package(
	catkin REQUIRED COMPONENTS
		roscpp
		homer_mapnav_msgs
		sensor_msgs
		nav_msgs
		homer_nav_libs
		tf
		roslib
)
find_package(OpenMP)
if (OPENMP_FOUND)
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
find_package(tf REQUIRED)
find_package(Eigen3 REQUIRED)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)


set(CMAKE_BUILD_TYPE Release)


include_directories(
	include
	${catkin_INCLUDE_DIRS}
	${EIGEN3_INCLUDE_DIRS}
	${Qt5Core_INCLUDE_DIRS}
	${Qt5Widgets_INCLUDE_DIRS}
)

catkin_package(
	INCLUDE_DIRS include
	CATKIN_DEPENDS
		roscpp
		homer_mapnav_msgs
		homer_nav_libs
		nav_msgs
		tf
		roslib
	LIBRARIES homerOccupancyMap homerParticleFilter
)

add_library(homerOccupancyMap
	src/OccupancyMap/OccupancyMap.cpp
	
)

target_link_libraries(
	homerOccupancyMap
		${catkin_LIBRARIES}
		${tf_LIBRARIES}
		${Qt5Core_LIBRARIES}
		${Qt5Widgets_LIBRARIES}
)
set(
	ParticleFilter_SRC
		src/ParticleFilter/HyperSlamFilter.cpp
		src/ParticleFilter/SlamParticle.cpp
		src/ParticleFilter/SlamFilter.cpp
		src/ParticleFilter/Particle.cpp
)

add_library(
	homerParticleFilter
		${ParticleFilter_SRC}
)

target_link_libraries(
	homerParticleFilter
		${catkin_LIBRARIES}
)

add_executable(homer_mapping src/slam_node.cpp)

target_link_libraries(
	homer_mapping
		${catkin_LIBRARIES}
		homerParticleFilter
		homerOccupancyMap
)

add_dependencies(
	homer_mapping
		${catkin_EXPORTED_TARGETS}
)

install(DIRECTORY include/${PROJECT_NAME}/
	DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

install(TARGETS homerOccupancyMap homerParticleFilter homer_mapping
	ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
	LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
	RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(DIRECTORY launch/
	  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
)

install(DIRECTORY config/
	  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config
)