Files
gx 655649f4d8
build / cmake build (CUDA 12.4, Ubuntu 22.04) (pull_request) Failing after 5m19s
build / ffmpeg filter patch (out-of-tree) (pull_request) Has been skipped
build / cmake build (CUDA 12.4, Ubuntu 22.04) (push) Failing after 4m14s
build / ffmpeg filter patch (out-of-tree) (push) Has been skipped
cmake: использовать PROJECT_SOURCE_DIR вместо CMAKE_SOURCE_DIR
При сборке cuframes как подпроекта родительского CMake-проекта
(add_subdirectory) CMAKE_SOURCE_DIR указывает на корень родителя,
а не cuframes. Из-за этого target_include_directories cuframes
получал неверный путь и компиляция падала с

  fatal error: cuframes/cuframes.h: No such file or directory

PROJECT_SOURCE_DIR резолвится в каталог project(), то есть всегда
указывает на корень cuframes независимо от способа подключения.

Standalone-сборка ведёт себя как раньше — оба пути одинаковы.
2026-06-03 04:27:24 +01:00

81 lines
2.7 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.20)
# libcuframes — главная shared library
find_package(CUDAToolkit REQUIRED)
find_package(Threads REQUIRED)
set(CUFRAMES_SOURCES
src/utils.c
src/protocol.c
src/producer.c
src/consumer.c
src/consumer_async.c
src/packet_ring.c
)
add_library(cuframes SHARED ${CUFRAMES_SOURCES})
add_library(cuframes_static STATIC ${CUFRAMES_SOURCES})
foreach(target cuframes cuframes_static)
target_include_directories(${target}
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_compile_features(${target} PRIVATE c_std_11)
target_compile_options(${target} PRIVATE
-Wall -Wextra -Wpedantic
-Wno-address-of-packed-member # известная проблема atomics на packed structs (x86_64 ok)
$<$<CONFIG:Debug>:-O0 -g>
$<$<CONFIG:Release>:-O2 -g>
)
target_link_libraries(${target}
PUBLIC
CUDA::cudart
CUDA::cuda_driver # v0.4 — cuMemCreate/cuMemMap/cuMemExportToShareableHandle
Threads::Threads
rt # для shm_open
)
endforeach()
# Set SOVERSION на shared lib для ABI tracking
set_target_properties(cuframes PROPERTIES
VERSION 0.4.0
SOVERSION 0
)
# Optionally — explicit visibility для exports. C-linkage уже handled extern "C"
# в header'е. Используем -fvisibility=hidden + указываем default для public symbols
# через __attribute__((visibility("default"))). Но мы это сделаем в v0.2 — пока
# default visibility внутри source files.
target_compile_definitions(cuframes PRIVATE CUFRAMES_BUILDING_DLL)
target_compile_definitions(cuframes_static PRIVATE CUFRAMES_STATIC_LIB)
# Override default fvisibility (на текущем этапе экспортируем всё)
foreach(target cuframes cuframes_static)
set_target_properties(${target} PROPERTIES
C_VISIBILITY_PRESET default
)
endforeach()
# Install rules — нужны для downstream проектов которые используют cmake --install
# (FFmpeg-cuframes Dockerfile builders, deb-пакетирование).
include(GNUInstallDirs)
install(TARGETS cuframes cuframes_static
EXPORT cuframesTargets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/cuframes
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)
# Tests
if(BUILD_TESTING)
add_subdirectory(tests)
endif()