diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3dd5952 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,67 @@ +cmake_minimum_required(VERSION 3.0) +project(DTO VERSION 1.0 LANGUAGES C) + +include(GNUInstallDirs) +set(CMAKE_INSTALL_LIBDIR lib) + + +# Build the shared library +add_library(dto SHARED dto.c) +add_library(DTO::dto ALIAS dto) +target_include_directories(dto + PUBLIC + $ + $) + +# set gnu source everywhere +add_compile_definitions(_GNU_SOURCE) + +# Add the -DDTO_STATS_SUPPORT preprocessor definition +target_compile_definitions(dto PRIVATE DTO_STATS_SUPPORT) + +# Link libraries +target_link_libraries(dto accel-config dl numa) + +include(CheckCCompilerFlag) +check_c_compiler_flag("-mwaitpkg" HAS_WAITPKG) +if (HAS_WAITPKG) + target_compile_options(dto PRIVATE -mwaitpkg -march=native) +endif() + +# Build dto-test and dto-test-wodto +add_executable(dto-test dto-test.c) +target_link_libraries(dto-test PRIVATE DTO::dto pthread) + +add_executable(dto-test-wodto dto-test.c) +target_link_libraries(dto-test-wodto PRIVATE pthread) + +# Install and export the library +install(TARGETS dto + EXPORT DTOTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +install(FILES dto.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(EXPORT DTOTargets + FILE DTOTargets.cmake + NAMESPACE DTO:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DTO) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/DTOConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/DTOConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/DTOConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DTO) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/DTOConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/DTOConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DTO) + diff --git a/DTOConfig.cmake.in b/DTOConfig.cmake.in new file mode 100644 index 0000000..56e57bd --- /dev/null +++ b/DTOConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/DTOTargets.cmake") + +check_required_components(DTO) diff --git a/Makefile b/Makefile deleted file mode 100644 index 95af413..0000000 --- a/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2023 Intel Corporation -# -# SPDX-License-Identifier: MIT - -all: libdto dto-test-wodto - -DML_LIB_CXX=-D_GNU_SOURCE - -libdto: dto.c - gcc -shared -fPIC -Wl,-soname,libdto.so dto.c $(DML_LIB_CXX) -DDTO_STATS_SUPPORT -o libdto.so.1.0 -laccel-config -ldl -lnuma -mwaitpkg - -libdto_nostats: dto.c - gcc -shared -fPIC -Wl,-soname,libdto.so dto.c $(DML_LIB_CXX) -o libdto.so.1.0 -laccel-config -ldl -lnuma -mwaitpkg - -install: - cp libdto.so.1.0 /usr/lib64/ - ln -sf /usr/lib64/libdto.so.1.0 /usr/lib64/libdto.so.1 - ln -sf /usr/lib64/libdto.so.1.0 /usr/lib64/libdto.so - -install-local: - ln -sf ./libdto.so.1.0 ./libdto.so.1 - ln -sf ./libdto.so.1.0 ./libdto.so - -dto-test: dto-test.c - gcc -g dto-test.c $(DML_LIB_CXX) -o dto-test -ldto -lpthread - -dto-test-wodto: dto-test.c - gcc -g dto-test.c $(DML_LIB_CXX) -o dto-test-wodto -lpthread - -clean: - rm -rf *.o *.so dto-test diff --git a/README.md b/README.md index 1a746e2..b31654d 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,10 @@ On Fedora/CentOS/Rhel: kernel-headers, accel-config-devel, libuuid-devel, libnum On Ubuntu/Debian: linux-libc-dev, libaccel-config-dev, uuid-dev, libnuma-dev ```bash -make libdto +mkdir build +cd build +cmake .. +make make install ``` diff --git a/dto.h b/dto.h new file mode 100644 index 0000000..78e1890 --- /dev/null +++ b/dto.h @@ -0,0 +1,16 @@ + +#ifndef DTO_H +#define DTO_H + +#ifdef __cplusplus +extern "C" { +#endif + +//empty until we add the API + +#ifdef __cplusplus +} +#endif + +#endif +