Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ repos:
args: [--fix, --spdx]
files: |
(?x)
[.](cmake|c|cpp|cu|cuh|h|hpp|sh|pxd|py|pyx|rs|java)$|
[.](cmake|c|cpp([.]in)?|cu([.]in)?|cuh([.]in)?|h|hpp([.]in)?|sh|pxd|py|pyx|rs|java)$|
CMakeLists[.]txt$|
CMakeLists_standalone[.]txt$|
meta[.]yaml$|
Expand Down
547 changes: 317 additions & 230 deletions cpp/CMakeLists.txt

Large diffs are not rendered by default.

23 changes: 22 additions & 1 deletion cpp/cmake/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"LINK_LIBRARIES": "*"
}
},
"process_matrix_entry": {
"process_jit_lto_matrix_entry": {
"pargs": {
"nargs": 1
},
Expand All @@ -56,6 +56,27 @@
"OUTPUT_DIRECTORY": 1,
"KERNEL_LINK_LIBRARIES": "*"
}
},
"generate_inst_matrix": {
"pargs": {
"nargs": 1
},
"kwargs": {
"MATRIX_JSON_FILE": "?",
"MATRIX_JSON_STRING": "?",
"INPUT_FILE": 1,
"OUTPUT_FILE_FORMAT": 1
}
},
"process_inst_matrix_entry": {
"pargs": {
"nargs": 1
},
"kwargs": {
"INPUT_FILE": 1,
"OUTPUT_FILE_FORMAT": 1,
"MATRIX_JSON_ENTRY": 1
}
}
}
},
Expand Down
53 changes: 53 additions & 0 deletions cpp/cmake/modules/compute_matrix_product.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# =============================================================================
# cmake-format: off
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: Apache-2.0
# cmake-format: on
# =============================================================================

include_guard(GLOBAL)

function(compute_matrix_product output_var)
set(options)
set(one_value MATRIX_JSON_FILE MATRIX_JSON_STRING)
set(multi_value)

cmake_parse_arguments(_JIT_LTO "${options}" "${one_value}" "${multi_value}" ${ARGN})

find_package(Python3 REQUIRED COMPONENTS Interpreter)

if(_JIT_LTO_MATRIX_JSON_FILE)
execute_process(
COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/compute_matrix_product.py"
"${_JIT_LTO_MATRIX_JSON_FILE}" #
OUTPUT_VARIABLE output COMMAND_ERROR_IS_FATAL ANY
)
else()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E echo "${_JIT_LTO_MATRIX_JSON_STRING}"
COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/compute_matrix_product.py"
-
OUTPUT_VARIABLE output COMMAND_ERROR_IS_FATAL ANY
)
endif()

set(${output_var}
"${output}"
PARENT_SCOPE
)
endfunction()

function(populate_matrix_variables matrix_json_entry)
string(JSON len LENGTH "${matrix_json_entry}")
math(EXPR last "${len} - 1")

# cmake-lint: disable=C0103,E1120
foreach(i RANGE "${last}")
string(JSON key MEMBER "${matrix_json_entry}" "${i}")
string(JSON value GET "${matrix_json_entry}" "${key}")
set(${key}
"${value}"
PARENT_SCOPE
)
endforeach()
endfunction()
67 changes: 67 additions & 0 deletions cpp/cmake/modules/generate_inst_matrix.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# =============================================================================
# cmake-format: off
# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: Apache-2.0
# cmake-format: on
# =============================================================================

include_guard(GLOBAL)

include(${CMAKE_CURRENT_LIST_DIR}/compute_matrix_product.cmake)

function(process_inst_matrix_entry source_list_var)
set(options)
set(one_value INPUT_FILE OUTPUT_FILE_FORMAT MATRIX_JSON_ENTRY)
set(multi_value)

cmake_parse_arguments(_GIM "${options}" "${one_value}" "${multi_value}" ${ARGN})

populate_matrix_variables("${_GIM_MATRIX_JSON_ENTRY}")
string(CONFIGURE "${_GIM_OUTPUT_FILE_FORMAT}" output_file @ONLY)

configure_file("${_GIM_INPUT_FILE}" "${output_file}" @ONLY)

list(APPEND ${source_list_var} "${output_file}")
set(${source_list_var}
"${${source_list_var}}"
PARENT_SCOPE
)
endfunction()

function(generate_inst_matrix source_list_var)
set(options)
set(one_value MATRIX_JSON_FILE MATRIX_JSON_STRING INPUT_FILE OUTPUT_FILE_FORMAT)
set(multi_value)

cmake_parse_arguments(_GIM "${options}" "${one_value}" "${multi_value}" ${ARGN})

if(_GIM_MATRIX_JSON_FILE)
set_property(
DIRECTORY
PROPERTY CMAKE_CONFIGURE_DEPENDS "${_GIM_MATRIX_JSON_FILE}"
APPEND
)
compute_matrix_product(matrix_product MATRIX_JSON_FILE "${_GIM_MATRIX_JSON_FILE}")
else()
compute_matrix_product(matrix_product MATRIX_JSON_STRING "${_GIM_MATRIX_JSON_STRING}")
endif()

string(JSON len LENGTH "${matrix_product}")
math(EXPR last "${len} - 1")

# cmake-lint: disable=C0103,E1120
foreach(i RANGE "${last}")
string(JSON matrix_json_entry GET "${matrix_product}" "${i}")
process_inst_matrix_entry(
"${source_list_var}"
INPUT_FILE "${_GIM_INPUT_FILE}"
OUTPUT_FILE_FORMAT "${_GIM_OUTPUT_FILE_FORMAT}"
MATRIX_JSON_ENTRY "${matrix_json_entry}"
)
endforeach()

set(${source_list_var}
"${${source_list_var}}"
PARENT_SCOPE
)
endfunction()
48 changes: 3 additions & 45 deletions cpp/cmake/modules/generate_jit_lto_kernels.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,48 +7,7 @@

include_guard(GLOBAL)

function(compute_matrix_product output_var)
set(options)
set(one_value MATRIX_JSON_FILE MATRIX_JSON_STRING)
set(multi_value)

cmake_parse_arguments(_JIT_LTO "${options}" "${one_value}" "${multi_value}" ${ARGN})

if(_JIT_LTO_MATRIX_JSON_FILE)
execute_process(
COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/compute_matrix_product.py"
"${_JIT_LTO_MATRIX_JSON_FILE}" #
OUTPUT_VARIABLE output COMMAND_ERROR_IS_FATAL ANY
)
else()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E echo "${_JIT_LTO_MATRIX_JSON_STRING}"
COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/compute_matrix_product.py"
-
OUTPUT_VARIABLE output COMMAND_ERROR_IS_FATAL ANY
)
endif()

set(${output_var}
"${output}"
PARENT_SCOPE
)
endfunction()

function(populate_matrix_variables matrix_json_entry)
string(JSON len LENGTH "${matrix_json_entry}")
math(EXPR last "${len} - 1")

# cmake-lint: disable=C0103,E1120
foreach(i RANGE "${last}")
string(JSON key MEMBER "${matrix_json_entry}" "${i}")
string(JSON value GET "${matrix_json_entry}" "${key}")
set(${key}
"${value}"
PARENT_SCOPE
)
endforeach()
endfunction()
include(${CMAKE_CURRENT_LIST_DIR}/compute_matrix_product.cmake)

function(add_jit_lto_kernel kernel_target)
set(options)
Expand Down Expand Up @@ -79,7 +38,7 @@ function(add_jit_lto_kernel kernel_target)
)
endfunction()

function(process_matrix_entry source_list_var)
function(process_jit_lto_matrix_entry source_list_var)
set(options)
set(one_value NAME_FORMAT KERNEL_INPUT_FILE EMBEDDED_INPUT_FILE OUTPUT_DIRECTORY
MATRIX_JSON_ENTRY
Expand Down Expand Up @@ -126,7 +85,6 @@ function(generate_jit_lto_kernels source_list_var)
NAMES bin2c
PATHS ${CUDAToolkit_BIN_DIR}
)
find_package(Python3 REQUIRED COMPONENTS Interpreter)

if(_JIT_LTO_MATRIX_JSON_FILE)
set_property(
Expand All @@ -145,7 +103,7 @@ function(generate_jit_lto_kernels source_list_var)
# cmake-lint: disable=C0103,E1120
foreach(i RANGE "${last}")
string(JSON matrix_json_entry GET "${matrix_product}" "${i}")
process_matrix_entry(
process_jit_lto_matrix_entry(
"${source_list_var}"
NAME_FORMAT "${_JIT_LTO_NAME_FORMAT}"
KERNEL_INPUT_FILE "${_JIT_LTO_KERNEL_INPUT_FILE}"
Expand Down
68 changes: 68 additions & 0 deletions cpp/cmake/modules/generate_string_matrix.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# =============================================================================
# cmake-format: off
# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: Apache-2.0
# cmake-format: on
# =============================================================================

include_guard(GLOBAL)

include(${CMAKE_CURRENT_LIST_DIR}/compute_matrix_product.cmake)

function(process_string_matrix_entry string_var)
set(options)
set(one_value ITEM_FORMAT GLUE MATRIX_JSON_ENTRY)
set(multi_value)

cmake_parse_arguments(_GSM "${options}" "${one_value}" "${multi_value}" ${ARGN})

populate_matrix_variables("${_GSM_MATRIX_JSON_ENTRY}")
# It's impossible to pass a semicolon inside `ITEM_FORMAT` due to how CMake divides up arguments,
# so provide a constant placeholder to insert it into code
set(semicolon ";")
Comment thread
KyleFromNVIDIA marked this conversation as resolved.
string(CONFIGURE "${_GSM_ITEM_FORMAT}" item @ONLY)

string(APPEND ${string_var} "${_GSM_GLUE}${item}")
set(${string_var}
"${${string_var}}"
PARENT_SCOPE
)
endfunction()

function(generate_string_matrix string_var)
set(options)
set(one_value ITEM_FORMAT GLUE MATRIX_JSON_FILE MATRIX_JSON_STRING)
set(multi_value)

cmake_parse_arguments(_GSM "${options}" "${one_value}" "${multi_value}" ${ARGN})

if(_GSM_MATRIX_JSON_FILE)
set_property(
DIRECTORY
PROPERTY CMAKE_CONFIGURE_DEPENDS "${_GSM_MATRIX_JSON_FILE}"
APPEND
)
compute_matrix_product(matrix_product MATRIX_JSON_FILE "${_GSM_MATRIX_JSON_FILE}")
else()
compute_matrix_product(matrix_product MATRIX_JSON_STRING "${_GSM_MATRIX_JSON_STRING}")
endif()

string(JSON len LENGTH "${matrix_product}")
math(EXPR last "${len} - 1")

# cmake-lint: disable=C0103,E1120
set(glue)
foreach(i RANGE "${last}")
string(JSON matrix_json_entry GET "${matrix_product}" "${i}")
process_string_matrix_entry(
"${string_var}" ITEM_FORMAT "${_GSM_ITEM_FORMAT}" GLUE "${glue}" MATRIX_JSON_ENTRY
"${matrix_json_entry}"
)
set(glue "${_GSM_GLUE}")
endforeach()

set(${string_var}
"${${string_var}}"
PARENT_SCOPE
)
endfunction()
Loading
Loading