FindCUDAToolkit: Add CUDA::bin2c target

This commit is contained in:
Kyle Edwards 2026-01-12 11:46:28 -05:00
parent 538926c532
commit 2d2036c9e9
No known key found for this signature in database
6 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,5 @@
cudatoolkit-bin2c
-----------------
* The :module:`FindCUDAToolkit` module now creates a ``CUDA::bin2c`` imported
target for the :ref:`bin2c <FindCUDAToolkit_bin2c>` utility.

View File

@ -524,6 +524,19 @@ Target Created:
**Note**: direct usage of this target by consumers should not be necessary.
.. _`FindCUDAToolkit_bin2c`:
bin2c
"""""
.. versionadded:: 4.3
A utility that converts binary files to C files containing byte arrays.
Target Created:
- ``CUDA::bin2c``
Result Variables
^^^^^^^^^^^^^^^^
@ -1486,6 +1499,16 @@ if(CUDAToolkit_FOUND)
endif()
_CUDAToolkit_find_and_add_import_lib(OpenCL)
find_program(CUDA_bin2c_EXECUTABLE
NAMES bin2c
HINTS ${CUDAToolkit_BIN_DIR}
NO_DEFAULT_PATH
)
if(NOT TARGET CUDA::bin2c AND CUDA_bin2c_EXECUTABLE)
add_executable(CUDA::bin2c IMPORTED)
set_property(TARGET CUDA::bin2c PROPERTY IMPORTED_LOCATION "${CUDA_bin2c_EXECUTABLE}")
endif()
endif()
if(_CUDAToolkit_Pop_ROOT_PATH)

View File

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 4.2)
project(Bin2C CXX)
# Goal for this example:
# Validate that we can use CUDAToolkit bin2c
find_package(CUDAToolkit REQUIRED)
add_executable(generate generate.cpp)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/binary.bin
COMMAND generate ${CMAKE_CURRENT_BINARY_DIR}/binary.bin
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/binary.h
COMMAND CUDA::bin2c ${CMAKE_CURRENT_BINARY_DIR}/binary.bin > ${CMAKE_CURRENT_BINARY_DIR}/binary.h
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/binary.bin
)
add_executable(CudaBin2C verify.cpp ${CMAKE_CURRENT_BINARY_DIR}/binary.h)
target_include_directories(CudaBin2C PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

View File

@ -0,0 +1,18 @@
#include <fstream>
#include <ios>
static unsigned char const contents[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
};
int main(int argc, char** argv)
{
if (argc != 2) {
return 1;
}
std::ofstream fout(argv[1], std::ios::out | std::ios::binary);
fout.write(reinterpret_cast<char const*>(contents), sizeof(contents));
return 0;
}

View File

@ -0,0 +1,18 @@
#include <cstdlib>
#include "binary.h"
int main()
{
if (sizeof(imageBytes) != 8) {
return 1;
}
for (size_t i = 0; i < 8; i++) {
if (imageBytes[i] != i) {
return 1;
}
}
return 0;
}

View File

@ -31,3 +31,4 @@ if(CMake_TEST_CUDA AND NOT CMake_TEST_CUDA STREQUAL "Clang")
endif()
add_cuda_test_macro(Cuda.WithC CudaWithC)
add_cuda_test_macro(Cuda.Bin2C CudaBin2C)