Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions CMake/External_libsvm.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# libsvm external project
# Uses CMake wrapper patch for cross-platform builds

# Set up patch command - always applies CMakeLists.txt, optionally applies HIK patch
set(libsvm_PATCH_COMMAND ${CMAKE_COMMAND}
-Dlibsvm_patch:PATH=${fletch_SOURCE_DIR}/Patches/libsvm
-Dlibsvm_source:PATH=${fletch_BUILD_PREFIX}/src/libsvm
-Dlibsvm_apply_hik_patch:BOOL=${libsvm_apply_patch}
-P ${fletch_SOURCE_DIR}/Patches/libsvm/Patch.cmake
)

ExternalProject_Add(libsvm
URL ${libsvm_url}
URL_MD5 ${libsvm_md5}
${COMMON_EP_ARGS}
PATCH_COMMAND ${libsvm_PATCH_COMMAND}
CMAKE_GENERATOR ${gen}
CMAKE_ARGS
${COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX:PATH=${fletch_BUILD_INSTALL_PREFIX}
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
)

# Install Python bindings if Python support is enabled
if(fletch_BUILD_WITH_PYTHON)
ExternalProject_Add_Step(libsvm install_python
COMMAND ${CMAKE_COMMAND} -E make_directory ${fletch_PYTHON_PACKAGES_DIR}
COMMAND ${CMAKE_COMMAND} -E copy
${fletch_BUILD_PREFIX}/src/libsvm/python/svm.py
${fletch_PYTHON_PACKAGES_DIR}
COMMAND ${CMAKE_COMMAND} -E copy
${fletch_BUILD_PREFIX}/src/libsvm/python/svmutil.py
${fletch_PYTHON_PACKAGES_DIR}
DEPENDEES install
)
endif()

fletch_external_project_force_install(PACKAGE libsvm)

set(libsvm_ROOT ${fletch_BUILD_INSTALL_PREFIX} CACHE STRING "")

file(APPEND ${fletch_CONFIG_INPUT} "
########################################
# libsvm
########################################
set(libsvm_ROOT \${fletch_ROOT})
set(fletch_ENABLED_libsvm TRUE)
")
22 changes: 22 additions & 0 deletions CMake/fletch-tarballs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,28 @@ if(NOT WIN32)
list(APPEND fletch_external_sources LMDB)
endif()

# libsvm
if (fletch_ENABLE_libsvm OR fletch_ENABLE_ALL_PACKAGES)
set(libsvm_SELECT_VERSION 3.35 CACHE STRING "Select the version of libsvm to build.")
set_property(CACHE libsvm_SELECT_VERSION PROPERTY STRINGS "3.11" "3.35")
endif()

set(libsvm_version ${libsvm_SELECT_VERSION})

if (libsvm_version VERSION_EQUAL 3.11)
# Version 3.11 with custom HIK (Histogram Intersection Kernel) patch
set(libsvm_url "https://data.kitware.com/api/v1/file/695b3d132129216e86207cdd/download/libsvm.${libsvm_version}.tar.gz")
set(libsvm_md5 "495a2177c45f0415b056aecf099d3700")
set(libsvm_apply_patch TRUE)
elseif (libsvm_version VERSION_EQUAL 3.35)
set(libsvm_url "https://data.kitware.com/api/v1/file/695b3d142129216e86207ce0/download/libsvm.${libsvm_version}.tar.gz")
set(libsvm_md5 "93228a1542099b7d19d64290b8a5f571")
set(libsvm_apply_patch FALSE)
elseif(libsvm_version)
message(ERROR "libsvm version ${libsvm_version} not supported")
endif()
list(APPEND fletch_external_sources libsvm)

# HDF5
if (fletch_ENABLE_HDF5 OR fletch_ENABLE_ALL_PACKAGES)
set(HDF5_SELECT_VERSION 1.12.0 CACHE STRING "Select the major version of HDF5 to build.")
Expand Down
32 changes: 32 additions & 0 deletions Patches/libsvm/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
cmake_minimum_required(VERSION 3.3)
project(libsvm VERSION 3.11 LANGUAGES CXX)

# Build shared library from svm.cpp
add_library(svm SHARED svm.cpp)

# Set library properties
set_target_properties(svm PROPERTIES
PUBLIC_HEADER svm.h
VERSION ${PROJECT_VERSION}
SOVERSION 2
)

# Platform-specific settings
if(MSVC)
# Export all symbols on Windows
set_target_properties(svm PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_compile_definitions(svm PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()

# Link math library on Unix
if(UNIX)
target_link_libraries(svm PRIVATE m)
endif()

# Install targets
install(TARGETS svm
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
PUBLIC_HEADER DESTINATION include
)
23 changes: 23 additions & 0 deletions Patches/libsvm/Patch.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#+
# This file is called as CMake -P script for the patch step of
# External_libsvm.cmake.
# libsvm_patch and libsvm_source are defined on the command line along with the
# call.
#
# This patch adds:
# - CMakeLists.txt for cross-platform CMake builds
# - Custom kernel types (HISTOGRAM and NMI) for Histogram Intersection Kernel
# support, matching the smqtk custom libsvm (when libsvm_apply_hik_patch is set)
#-

message("Patching libsvm with CMake build support")

# Always copy CMakeLists.txt for cross-platform build support
file(COPY ${libsvm_patch}/CMakeLists.txt DESTINATION ${libsvm_source})

# Copy HIK-patched source files if requested
if(libsvm_apply_hik_patch)
message("Patching libsvm with HIK (Histogram Intersection Kernel) support")
file(COPY ${libsvm_patch}/svm.h DESTINATION ${libsvm_source})
file(COPY ${libsvm_patch}/svm.cpp DESTINATION ${libsvm_source})
endif()
Loading