Some checks failed
CI/CD Pipeline / Code Linting (push) Failing after 22s
CI/CD Pipeline / Build and Test (Debug, clang, ubuntu-latest) (push) Failing after 5m44s
CI/CD Pipeline / Build and Test (Debug, gcc, ubuntu-latest) (push) Failing after 5m33s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-20.04) (push) Failing after 6m12s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-latest) (push) Failing after 5m13s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-20.04) (push) Failing after 5m30s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-latest) (push) Failing after 5m33s
CI/CD Pipeline / Docker Build Test (push) Failing after 13s
CI/CD Pipeline / Performance Benchmarks (push) Has been skipped
CI/CD Pipeline / Build Documentation (push) Successful in 31s
CI/CD Pipeline / Create Release Package (push) Has been skipped
140 lines
3.4 KiB
CMake
140 lines
3.4 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(SVMClassifier VERSION 1.0.0 LANGUAGES CXX)
|
|
|
|
# Set C++ standard
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# Set build type if not specified
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
|
|
# Compiler flags
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wextra -pedantic")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
|
|
# Find required packages
|
|
find_package(Torch REQUIRED)
|
|
find_package(PkgConfig REQUIRED)
|
|
|
|
# Set policy for FetchContent
|
|
if(POLICY CMP0135)
|
|
cmake_policy(SET CMP0135 NEW)
|
|
endif()
|
|
|
|
include(FetchContent)
|
|
|
|
# Fetch nlohmann/json
|
|
FetchContent_Declare(
|
|
nlohmann_json
|
|
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
|
GIT_TAG v3.11.3
|
|
)
|
|
FetchContent_MakeAvailable(nlohmann_json)
|
|
|
|
# Fetch Catch2 for testing
|
|
FetchContent_Declare(
|
|
Catch2
|
|
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
|
GIT_TAG v3.4.0
|
|
)
|
|
FetchContent_MakeAvailable(Catch2)
|
|
|
|
# Add external libraries
|
|
add_subdirectory(external)
|
|
|
|
# Include directories
|
|
include_directories(${CMAKE_SOURCE_DIR}/include)
|
|
include_directories(${CMAKE_SOURCE_DIR}/external/libsvm)
|
|
include_directories(${CMAKE_SOURCE_DIR}/external/liblinear)
|
|
|
|
# Create the main library
|
|
set(SOURCES
|
|
src/svm_classifier.cpp
|
|
src/data_converter.cpp
|
|
src/multiclass_strategy.cpp
|
|
src/kernel_parameters.cpp
|
|
)
|
|
|
|
set(HEADERS
|
|
include/svm_classifier/svm_classifier.hpp
|
|
include/svm_classifier/data_converter.hpp
|
|
include/svm_classifier/multiclass_strategy.hpp
|
|
include/svm_classifier/kernel_parameters.hpp
|
|
include/svm_classifier/types.hpp
|
|
)
|
|
|
|
# Create library
|
|
add_library(svm_classifier STATIC ${SOURCES} ${HEADERS})
|
|
|
|
# Link libraries
|
|
target_link_libraries(svm_classifier
|
|
PUBLIC
|
|
${TORCH_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
PRIVATE
|
|
libsvm_static
|
|
liblinear_static
|
|
)
|
|
|
|
# Set include directories
|
|
target_include_directories(svm_classifier
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>
|
|
PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/external/libsvm
|
|
${CMAKE_CURRENT_SOURCE_DIR}/external/liblinear
|
|
)
|
|
|
|
# Compiler-specific options
|
|
target_compile_features(svm_classifier PUBLIC cxx_std_17)
|
|
|
|
# Set torch CXX flags
|
|
set_property(TARGET svm_classifier PROPERTY CXX_STANDARD 17)
|
|
|
|
# Add examples
|
|
add_subdirectory(examples)
|
|
|
|
# Enable testing
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
|
|
# Installation
|
|
install(TARGETS svm_classifier
|
|
EXPORT SVMClassifierTargets
|
|
LIBRARY DESTINATION lib
|
|
ARCHIVE DESTINATION lib
|
|
RUNTIME DESTINATION bin
|
|
INCLUDES DESTINATION include
|
|
)
|
|
|
|
install(DIRECTORY include/ DESTINATION include)
|
|
|
|
install(EXPORT SVMClassifierTargets
|
|
FILE SVMClassifierTargets.cmake
|
|
NAMESPACE SVMClassifier::
|
|
DESTINATION lib/cmake/SVMClassifier
|
|
)
|
|
|
|
# Create config file
|
|
include(CMakePackageConfigHelpers)
|
|
write_basic_package_version_file(
|
|
SVMClassifierConfigVersion.cmake
|
|
VERSION ${PACKAGE_VERSION}
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
configure_package_config_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/SVMClassifierConfig.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/SVMClassifierConfig.cmake
|
|
INSTALL_DESTINATION lib/cmake/SVMClassifier
|
|
)
|
|
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/SVMClassifierConfig.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/SVMClassifierConfigVersion.cmake
|
|
DESTINATION lib/cmake/SVMClassifier
|
|
) |