Initial commit as Claude developed it
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
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
This commit is contained in:
140
CMakeLists.txt
Normal file
140
CMakeLists.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
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
|
||||
)
|
Reference in New Issue
Block a user