diff --git a/SuperBuild/CMake/External_libsvm.cmake b/SuperBuild/CMake/External_libsvm.cmake new file mode 100644 index 0000000000000000000000000000000000000000..771b626795fcfc5e738cf8e2f8162036217458a9 --- /dev/null +++ b/SuperBuild/CMake/External_libsvm.cmake @@ -0,0 +1,42 @@ +set(proj LIBSVM) + +if(NOT __EXTERNAL_${proj}__) +set(__EXTERNAL_${proj}__ 1) + +message(STATUS "Setup LibSVM...") + +if(USE_SYSTEM_LibSVM) + find_package ( LibSVM ) + add_custom_target(${proj}) + message(STATUS " Using LibSVM system version") +else() + SETUP_SUPERBUILD(PROJECT ${proj}) + message(STATUS " Using LibSVM SuperBuild version") + + ExternalProject_Add(${proj} + PREFIX ${proj} + URL "http://www.csie.ntu.edu.tw/~cjlin/libsvm/libsvm-3.20.tar.gz" + URL_MD5 5f088e5f89da1c65b642300c9c5ea772 + BINARY_DIR ${LIBSVM_SB_BUILD_DIR} + INSTALL_DIR ${SB_INSTALL_PREFIX} + CMAKE_CACHE_ARGS + -DCMAKE_INSTALL_PREFIX:STRING=${SB_INSTALL_PREFIX} + -DCMAKE_BUILD_TYPE:STRING=Release + -DBUILD_SHARED_LIBS:BOOL=ON + ${LIBSVM_FLAGS} + CMAKE_COMMAND ${SB_CMAKE_COMMAND} + DEPENDS ${${proj}_DEPENDENCIES} + PATCH_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/patches/${proj}/CMakeLists.txt + ${LIBSVM_SB_SRC} + ) + + set(_SB_${proj}_INCLUDE_DIR ${SB_INSTALL_PREFIX}/include) + if(WIN32) + set(_SB_${proj}_LIBRARY ${SB_INSTALL_PREFIX}/lib/libsvm.lib) + elseif(UNIX) + set(_SB_${proj}_LIBRARY ${SB_INSTALL_PREFIX}/lib/liblibsvm${CMAKE_SHARED_LIBRARY_SUFFIX}) + endif() + +endif() +endif() diff --git a/SuperBuild/CMake/External_otb.cmake b/SuperBuild/CMake/External_otb.cmake index 4ea43429fb6170df01944795fc65c2e3d086f08f..3e2475de6a95d31a5c80142718395eca98a6019e 100644 --- a/SuperBuild/CMake/External_otb.cmake +++ b/SuperBuild/CMake/External_otb.cmake @@ -47,6 +47,10 @@ if(OTB_USE_OPENCV) list(APPEND ${proj}_DEPENDENCIES OPENCV) endif() +if(OTB_USE_LIBSVM) + list(APPEND ${proj}_DEPENDENCIES LIBSVM) +endif() + if(OTB_USE_MUPARSER) list(APPEND ${proj}_DEPENDENCIES MUPARSER) endif() @@ -104,6 +108,9 @@ ADD_SUPERBUILD_CMAKE_VAR(LIBKML_MINIZIP_LIBRARY) ADD_SUPERBUILD_CMAKE_VAR(OpenCV_DIR) +ADD_SUPERBUILD_CMAKE_VAR(LIBSVM_INCLUDE_DIR) +ADD_SUPERBUILD_CMAKE_VAR(LIBSVM_LIBRARY) + ADD_SUPERBUILD_CMAKE_VAR(CURL_INCLUDE_DIR) ADD_SUPERBUILD_CMAKE_VAR(CURL_LIBRARY) diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt index ca56ef88b6b5e9f1863a49a6acf179c5040fdb58..b374902fae92a2c7a0e045653cc9af502ab0f7f3 100644 --- a/SuperBuild/CMakeLists.txt +++ b/SuperBuild/CMakeLists.txt @@ -83,6 +83,7 @@ SETUP_SYSTEM_LIBRARY(PROJECT MUPARSER DEFAULT OFF) SETUP_SYSTEM_LIBRARY(PROJECT MUPARSERX DEFAULT OFF) SETUP_SYSTEM_LIBRARY(PROJECT TINYXML DEFAULT OFF) SETUP_SYSTEM_LIBRARY(PROJECT OPENCV DEFAULT OFF) +SETUP_SYSTEM_LIBRARY(PROJECT LIBSVM DEFAULT OFF) SETUP_SYSTEM_LIBRARY(PROJECT PCRE DEFAULT ON) SETUP_SYSTEM_LIBRARY(PROJECT SWIG DEFAULT ON) diff --git a/SuperBuild/patches/LIBSVM/CMakeLists.txt b/SuperBuild/patches/LIBSVM/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..7f233a22746fbc78965ee14cd343d202db461919 --- /dev/null +++ b/SuperBuild/patches/LIBSVM/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 2.8.3) + +project(libsvm) + +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +set(BUILD_SHARED_LIBS ON) +if(MSVC) +set(BUILD_SHARED_LIBS OFF) #force off +endif() + +set(LIBSVM_SRCS "svm.cpp" ) +set(LIBSVM_HEADERS "svm.h") + +add_library(libsvm ${LIBSVM_SRCS}) + +option(BUILD_SAMPLES "Build executables" ON) + +add_executable(svm-train svm-train.c) +target_link_libraries(svm-train libsvm) + +add_executable(svm-predict svm-predict.c) +target_link_libraries(svm-predict libsvm) + +add_executable(svm-scale svm-scale.c) +target_link_libraries(svm-scale libsvm) + +install(TARGETS libsvm + RUNTIME DESTINATION bin COMPONENT RuntimeLibraries + LIBRARY DESTINATION lib COMPONENT RuntimeLibraries + ARCHIVE DESTINATION lib COMPONENT Development) + +install(FILES ${LIBSVM_HEADERS} + DESTINATION include + COMPONENT Development)