From 8437b9048635eb77c623e23732805a3e921216de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Stolarczuk?= Date: Wed, 15 Jan 2025 15:54:56 +0100 Subject: [PATCH 1/4] [CMake] Minor cleanups in top-level CMake mostly adding new "section" comments and a misspell fix. --- CMakeLists.txt | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 70ac087991..05f15d423f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,10 @@ list(APPEND CMAKE_MODULE_PATH "${UMF_CMAKE_SOURCE_DIR}/cmake") # Use full path of the helpers module (to omit potential conflicts with others) include(${UMF_CMAKE_SOURCE_DIR}/cmake/helpers.cmake) +# --------------------------------------------------------------------------- # +# Set UMF version variables, define project, and add basic modules +# --------------------------------------------------------------------------- # + # We use semver aligned version, set via git tags. We parse git output to # establish the version of UMF to be used in CMake, Win dll's, and within the # code (e.g. in logger). We have 3-component releases (e.g. 1.5.1) plus release @@ -33,6 +37,10 @@ include(CMakePackageConfigHelpers) include(GNUInstallDirs) find_package(PkgConfig) +# --------------------------------------------------------------------------- # +# Set UMF build options (and CACHE variables) +# --------------------------------------------------------------------------- # + # Define a list to store the names of all options set(UMF_OPTIONS_LIST "") list(APPEND UMF_OPTIONS_LIST CMAKE_BUILD_TYPE) @@ -43,7 +51,6 @@ macro(umf_option) option(${ARGV}) endmacro() -# Build Options umf_option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF) umf_option(UMF_BUILD_LEVEL_ZERO_PROVIDER "Build Level Zero memory provider" ON) umf_option(UMF_BUILD_CUDA_PROVIDER "Build CUDA memory provider" ON) @@ -56,9 +63,8 @@ umf_option(UMF_BUILD_GPU_TESTS "Build UMF GPU tests" OFF) umf_option(UMF_BUILD_BENCHMARKS "Build UMF benchmarks" OFF) umf_option(UMF_BUILD_BENCHMARKS_MT "Build UMF multithreaded benchmarks" OFF) umf_option(UMF_BUILD_EXAMPLES "Build UMF examples" ON) -umf_option(UMF_BUILD_FUZZTESTS "Build UMF fuzz tests" OFF) umf_option(UMF_BUILD_GPU_EXAMPLES "Build UMF GPU examples" OFF) -umf_option(UMF_DEVELOPER_MODE "Enable additional developer checks" OFF) +umf_option(UMF_BUILD_FUZZTESTS "Build UMF fuzz tests" OFF) umf_option( UMF_DISABLE_HWLOC "Disable hwloc and UMF features requiring it (OS provider, memtargets, topology discovery)" @@ -67,9 +73,6 @@ umf_option( UMF_LINK_HWLOC_STATICALLY "Link UMF with HWLOC library statically (proxy library will be disabled on Windows+Debug build)" OFF) -umf_option( - UMF_FORMAT_CODE_STYLE - "Add clang, cmake, and black -format-check and -format-apply targets" OFF) set(UMF_HWLOC_NAME "hwloc" CACHE STRING "Custom name for hwloc library w/o extension") @@ -81,6 +84,10 @@ set(UMF_INSTALL_RPATH "Set the runtime search path to the directory with dependencies (e.g. hwloc)" ) +umf_option(UMF_DEVELOPER_MODE "Enable additional developer checks" OFF) +umf_option( + UMF_FORMAT_CODE_STYLE + "Add clang, cmake, and black -format-check and -format-apply targets" OFF) # Only a part of skips is treated as a failure now. TODO: extend to all tests umf_option(UMF_TESTS_FAIL_ON_SKIP "Treat skips in tests as fail" OFF) umf_option(UMF_USE_ASAN "Enable AddressSanitizer checks" OFF) @@ -100,6 +107,11 @@ set_property(CACHE UMF_PROXY_LIB_BASED_ON_POOL PROPERTY STRINGS ${KNOWN_PROXY_LIB_POOLS}) list(APPEND UMF_OPTIONS_LIST UMF_PROXY_LIB_BASED_ON_POOL) +# --------------------------------------------------------------------------- # +# Setup required variables, definitions; fetch dependencies; include +# sub_directories based on build options; set flags; etc. +# --------------------------------------------------------------------------- # + if(UMF_BUILD_TESTS AND DEFINED ENV{CI} AND NOT UMF_TESTS_FAIL_ON_SKIP) @@ -711,7 +723,7 @@ if(UMF_FORMAT_CODE_STYLE) add_custom_target( cmake-format-apply COMMAND ${CMAKE_FORMAT} --in-place ${format_cmake_list} - COMMENT "Format Cmake files using cmake-format") + COMMENT "Format CMake files using cmake-format") endif() if(BLACK) From fd5a50ac17eded5f41a40fb6f523918740cd7702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Stolarczuk?= Date: Thu, 16 Jan 2025 15:44:02 +0100 Subject: [PATCH 2/4] Unify 'Level Zero' spelling It should be either 'L0' or 'Level Zero' --- benchmark/ubench.c | 4 ++-- examples/CMakeLists.txt | 4 ++-- examples/ipc_level_zero/ipc_level_zero.c | 4 ++-- examples/level_zero_shared_memory/level_zero_shared_memory.c | 4 ++-- test/CMakeLists.txt | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/benchmark/ubench.c b/benchmark/ubench.c index 845dc881db..dfd28ea1fc 100644 --- a/benchmark/ubench.c +++ b/benchmark/ubench.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2023-2024 Intel Corporation + * Copyright (C) 2023-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -452,7 +452,7 @@ static int create_level_zero_params(ze_context_handle_t *context, int ret = utils_ze_init_level_zero(); if (ret != 0) { - fprintf(stderr, "Failed to init Level 0!\n"); + fprintf(stderr, "Failed to init Level Zero!\n"); return ret; } diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 986ad56412..5911a073fa 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2024 Intel Corporation +# Copyright (C) 2024-2025 Intel Corporation # Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -154,7 +154,7 @@ if(UMF_BUILD_GPU_EXAMPLES else() message( STATUS - "IPC Level 0 example requires UMF_BUILD_GPU_EXAMPLES, UMF_BUILD_LEVEL_ZERO_PROVIDER and UMF_BUILD_LIBUMF_POOL_DISJOINT to be turned ON - skipping" + "IPC Level Zero example requires UMF_BUILD_GPU_EXAMPLES, UMF_BUILD_LEVEL_ZERO_PROVIDER and UMF_BUILD_LIBUMF_POOL_DISJOINT to be turned ON - skipping" ) endif() diff --git a/examples/ipc_level_zero/ipc_level_zero.c b/examples/ipc_level_zero/ipc_level_zero.c index 9579244abf..87dbbd0226 100644 --- a/examples/ipc_level_zero/ipc_level_zero.c +++ b/examples/ipc_level_zero/ipc_level_zero.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -104,7 +104,7 @@ int main(void) { const size_t BUFFER_PATTERN = 0x42; int ret = init_level_zero(); if (ret != 0) { - fprintf(stderr, "ERROR: Failed to init Level 0!\n"); + fprintf(stderr, "ERROR: Failed to init Level Zero!\n"); return ret; } diff --git a/examples/level_zero_shared_memory/level_zero_shared_memory.c b/examples/level_zero_shared_memory/level_zero_shared_memory.c index b0f646861d..d4c49b8a0f 100644 --- a/examples/level_zero_shared_memory/level_zero_shared_memory.c +++ b/examples/level_zero_shared_memory/level_zero_shared_memory.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -27,7 +27,7 @@ int main(void) { // Initialize Level Zero int ret = init_level_zero(); if (ret != 0) { - fprintf(stderr, "Failed to init Level 0!\n"); + fprintf(stderr, "Failed to init Level Zero!\n"); return ret; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7eed07e09e..64cbb339c5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -732,7 +732,7 @@ if(LINUX else() message( STATUS - "IPC Level 0 example requires UMF_BUILD_GPU_EXAMPLES, UMF_BUILD_LEVEL_ZERO_PROVIDER and UMF_BUILD_LIBUMF_POOL_DISJOINT to be turned ON - skipping" + "IPC Level Zero example requires UMF_BUILD_GPU_EXAMPLES, UMF_BUILD_LEVEL_ZERO_PROVIDER and UMF_BUILD_LIBUMF_POOL_DISJOINT to be turned ON - skipping" ) endif() From fac88da8cb5fde28234add321283f1d1f5a16edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Stolarczuk?= Date: Thu, 16 Jan 2025 15:25:08 +0100 Subject: [PATCH 3/4] [CMake] Add warning if UMF version is set to 0.0.0 Improper version set in CMake means, our lib will be wrongly configured and libumf.so.0.0.0 will be produced... which most likely is not expected (unless it's a developer's build). --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05f15d423f..ac7bcbf933 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,12 @@ project( umf VERSION ${UMF_CMAKE_VERSION} LANGUAGES C) +if(UMF_CMAKE_VERSION VERSION_EQUAL "0.0.0") + message( + WARNING + "UMF version is set to 0.0.0, which most likely is not expected! " + "Please checkout the git tags to get a proper version.") +endif() if(PROJECT_VERSION_PATCH GREATER 0) # set extra variable for Windows dll metadata From 079ecefa222c419747761c2f16ebceddc62d03d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Stolarczuk?= Date: Thu, 16 Jan 2025 15:40:20 +0100 Subject: [PATCH 4/4] [CMake] Add extra info in .cmake-format for 'build_umf_test' and 'add_umf_ipc_test'. It's for proper parsing of CMake files. --- .cmake-format | 35 ++++++---- test/CMakeLists.txt | 155 ++++++++++++++++---------------------------- 2 files changed, 80 insertions(+), 110 deletions(-) diff --git a/.cmake-format b/.cmake-format index 57ad821ef8..c1a8e85a83 100644 --- a/.cmake-format +++ b/.cmake-format @@ -9,31 +9,31 @@ with section("parse"): "pargs": 0, "flags": [], 'kwargs': { - 'NAME': '*', - 'SRCS': '*', - 'LIBS': '*' , + 'NAME': '*', + 'SRCS': '*', + 'LIBS': '*' , 'LIBDIRS': '*'}}, 'add_umf_executable': { "pargs": 0, "flags": [], 'kwargs': { - 'NAME': '*', - 'SRCS': '*', + 'NAME': '*', + 'SRCS': '*', 'LIBS': '*'}}, 'add_umf_test': { "pargs": 0, "flags": [], 'kwargs': { - 'NAME': '*', - 'SRCS': '*', + 'NAME': '*', + 'SRCS': '*', 'LIBS': '*'}}, 'add_umf_library': { "pargs": 0, "flags": [], 'kwargs': { - 'NAME': '*', - 'TYPE': '*', - 'SRCS': '*', + 'NAME': '*', + 'TYPE': '*', + 'SRCS': '*', 'LIBS': '*', 'LINUX_MAP_FILE': '*', 'WINDOWS_DEF_FILE': '*'}}, @@ -43,7 +43,20 @@ with section("parse"): 'kwargs': { 'LABELS': '*', 'PASS_REGULAR_EXPRESSION': '*'}}, - } + 'build_umf_test': { + "pargs": 0, + "flags": [], + 'kwargs': { + 'NAME': '*', + 'SRCS': '*', + 'LIBS': '*' }}, + 'add_umf_ipc_test': { + "pargs": 0, + "flags": [], + 'kwargs': { + 'TEST': '*', + 'SRC_DIR': '*'}}, + } # Override configurations per-command where available override_spec = {} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 64cbb339c5..918e874c65 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -31,8 +31,11 @@ set(UMF_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(UMF_UTILS_DIR ${UMF_CMAKE_SOURCE_DIR}/src/utils) function(build_umf_test) - # Parameters: * NAME - a name of the test * SRCS - source files * LIBS - - # libraries to be linked with + # Parameters: + # + # * NAME - a name of the test + # * SRCS - source files + # * LIBS - libraries to be linked with set(oneValueArgs NAME) set(multiValueArgs SRCS LIBS) cmake_parse_arguments( @@ -108,8 +111,11 @@ function(build_umf_test) endfunction() function(add_umf_test) - # Parameters: * NAME - a name of the test * SRCS - source files * LIBS - - # libraries to be linked with + # Parameters: + # + # * NAME - a name of the test + # * SRCS - source files + # * LIBS - libraries to be linked with set(oneValueArgs NAME) set(multiValueArgs SRCS LIBS) cmake_parse_arguments( @@ -120,12 +126,9 @@ function(add_umf_test) ${ARGN}) build_umf_test( - NAME - ${ARG_NAME} - SRCS - ${ARG_SRCS} - LIBS - ${ARG_LIBS}) + NAME ${ARG_NAME} + SRCS ${ARG_SRCS} + LIBS ${ARG_LIBS}) set(TEST_NAME umf-${ARG_NAME}) set(TEST_TARGET_NAME umf_test-${ARG_NAME}) @@ -491,8 +494,10 @@ add_umf_test( add_umf_test(NAME ipc_negative SRCS ipc_negative.cpp) function(add_umf_ipc_test) - # Parameters: * TEST - a name of the test * SRC_DIR - source files directory - # path + # Parameters: + # + # * TEST - a name of the test + # * SRC_DIR - source files directory path set(oneValueArgs TEST SRC_DIR) cmake_parse_arguments( ARG @@ -526,64 +531,42 @@ endfunction() if(LINUX) if(NOT UMF_DISABLE_HWLOC AND UMF_POOL_SCALABLE_ENABLED) build_umf_test( - NAME - ipc_os_prov_consumer - SRCS - ipc_os_prov_consumer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_os_prov_consumer + SRCS ipc_os_prov_consumer.c common/ipc_common.c + common/ipc_os_prov_common.c) build_umf_test( - NAME - ipc_os_prov_producer - SRCS - ipc_os_prov_producer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_os_prov_producer + SRCS ipc_os_prov_producer.c common/ipc_common.c + common/ipc_os_prov_common.c) add_umf_ipc_test(TEST ipc_os_prov_anon_fd) add_umf_ipc_test(TEST ipc_os_prov_shm) if(UMF_PROXY_LIB_ENABLED AND UMF_BUILD_SHARED_LIBRARY) build_umf_test( - NAME - ipc_os_prov_proxy - SRCS - ipc_os_prov_proxy.c - common/ipc_common.c - LIBS - ${UMF_UTILS_FOR_TEST}) + NAME ipc_os_prov_proxy + SRCS ipc_os_prov_proxy.c common/ipc_common.c + LIBS ${UMF_UTILS_FOR_TEST}) add_umf_ipc_test(TEST ipc_os_prov_proxy) endif() build_umf_test( - NAME - ipc_devdax_prov_consumer - SRCS - ipc_devdax_prov_consumer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_devdax_prov_consumer + SRCS ipc_devdax_prov_consumer.c common/ipc_common.c + common/ipc_os_prov_common.c) build_umf_test( - NAME - ipc_devdax_prov_producer - SRCS - ipc_devdax_prov_producer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_devdax_prov_producer + SRCS ipc_devdax_prov_producer.c common/ipc_common.c + common/ipc_os_prov_common.c) add_umf_ipc_test(TEST ipc_devdax_prov) build_umf_test( - NAME - ipc_file_prov_consumer - SRCS - ipc_file_prov_consumer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_file_prov_consumer + SRCS ipc_file_prov_consumer.c common/ipc_common.c + common/ipc_os_prov_common.c) build_umf_test( - NAME - ipc_file_prov_producer - SRCS - ipc_file_prov_producer.c - common/ipc_common.c - common/ipc_os_prov_common.c) + NAME ipc_file_prov_producer + SRCS ipc_file_prov_producer.c common/ipc_common.c + common/ipc_os_prov_common.c) add_umf_ipc_test(TEST ipc_file_prov) add_umf_ipc_test(TEST ipc_file_prov_fsdax) endif() @@ -594,29 +577,17 @@ if(LINUX) AND UMF_BUILD_LEVEL_ZERO_PROVIDER AND UMF_BUILD_LIBUMF_POOL_DISJOINT) build_umf_test( - NAME - ipc_level_zero_prov_consumer - SRCS - providers/ipc_level_zero_prov_consumer.c - common/ipc_common.c - providers/ipc_level_zero_prov_common.c - ${UMF_UTILS_DIR}/utils_level_zero.cpp - LIBS - ze_loader - disjoint_pool - ${UMF_UTILS_FOR_TEST}) + NAME ipc_level_zero_prov_consumer + SRCS providers/ipc_level_zero_prov_consumer.c common/ipc_common.c + providers/ipc_level_zero_prov_common.c + ${UMF_UTILS_DIR}/utils_level_zero.cpp + LIBS ze_loader disjoint_pool ${UMF_UTILS_FOR_TEST}) build_umf_test( - NAME - ipc_level_zero_prov_producer - SRCS - providers/ipc_level_zero_prov_producer.c - common/ipc_common.c - providers/ipc_level_zero_prov_common.c - ${UMF_UTILS_DIR}/utils_level_zero.cpp - LIBS - ze_loader - disjoint_pool - ${UMF_UTILS_FOR_TEST}) + NAME ipc_level_zero_prov_producer + SRCS providers/ipc_level_zero_prov_producer.c common/ipc_common.c + providers/ipc_level_zero_prov_common.c + ${UMF_UTILS_DIR}/utils_level_zero.cpp + LIBS ze_loader disjoint_pool ${UMF_UTILS_FOR_TEST}) add_umf_ipc_test(TEST ipc_level_zero_prov SRC_DIR providers) endif() @@ -624,29 +595,15 @@ if(LINUX) AND UMF_BUILD_CUDA_PROVIDER AND UMF_BUILD_LIBUMF_POOL_DISJOINT) build_umf_test( - NAME - ipc_cuda_prov_consumer - SRCS - providers/ipc_cuda_prov_consumer.c - common/ipc_common.c - providers/ipc_cuda_prov_common.c - providers/cuda_helpers.cpp - LIBS - cuda - disjoint_pool - ${UMF_UTILS_FOR_TEST}) + NAME ipc_cuda_prov_consumer + SRCS providers/ipc_cuda_prov_consumer.c common/ipc_common.c + providers/ipc_cuda_prov_common.c providers/cuda_helpers.cpp + LIBS cuda disjoint_pool ${UMF_UTILS_FOR_TEST}) build_umf_test( - NAME - ipc_cuda_prov_producer - SRCS - providers/ipc_cuda_prov_producer.c - common/ipc_common.c - providers/ipc_cuda_prov_common.c - providers/cuda_helpers.cpp - LIBS - cuda - disjoint_pool - ${UMF_UTILS_FOR_TEST}) + NAME ipc_cuda_prov_producer + SRCS providers/ipc_cuda_prov_producer.c common/ipc_common.c + providers/ipc_cuda_prov_common.c providers/cuda_helpers.cpp + LIBS cuda disjoint_pool ${UMF_UTILS_FOR_TEST}) add_umf_ipc_test(TEST ipc_cuda_prov SRC_DIR providers) endif() else()