Skip to content

Commit 96508dd

Browse files
committed
Add standalone tests of examples
Fixes: #427 Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 64d18bd commit 96508dd

File tree

10 files changed

+575
-0
lines changed

10 files changed

+575
-0
lines changed

examples/basic/CMakeLists.txt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
6+
project(umf_example_basic LANGUAGES C)
7+
enable_testing()
8+
9+
set(UMF_EXAMPLE_DIR "${CMAKE_SOURCE_DIR}/..")
10+
list(APPEND CMAKE_MODULE_PATH "${UMF_EXAMPLE_DIR}/cmake")
11+
message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
12+
13+
find_package(PkgConfig)
14+
pkg_check_modules(LIBUMF libumf)
15+
if(NOT LIBUMF_FOUND)
16+
find_package(LIBUMF REQUIRED libumf)
17+
endif()
18+
19+
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
20+
if(NOT LIBHWLOC_FOUND)
21+
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
22+
endif()
23+
24+
pkg_check_modules(TBB tbb)
25+
if(NOT TBB_FOUND)
26+
find_package(TBB REQUIRED tbb)
27+
endif()
28+
29+
# build the example
30+
set(EXAMPLE_NAME umf_example_basic)
31+
add_executable(${EXAMPLE_NAME} basic.c)
32+
target_include_directories(${EXAMPLE_NAME} PRIVATE ${LIBUMF_INCLUDE_DIRS})
33+
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS})
34+
target_link_libraries(${EXAMPLE_NAME} PRIVATE ${LIBUMF_LIBRARIES} hwloc)
35+
36+
# an optional part - adds a test of this example
37+
add_test(
38+
NAME ${EXAMPLE_NAME}
39+
COMMAND ${EXAMPLE_NAME}
40+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
41+
42+
set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "example-standalone")
43+
44+
if(LINUX)
45+
# set LD_LIBRARY_PATH
46+
set_property(
47+
TEST ${EXAMPLE_NAME}
48+
PROPERTY
49+
ENVIRONMENT_MODIFICATION
50+
"LD_LIBRARY_PATH=path_list_append:${LIBUMF_LIBRARY_DIRS};LD_LIBRARY_PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}"
51+
)
52+
endif()

examples/cmake/FindLIBHWLOC.cmake

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'libhwloc' using find_library()")
6+
7+
find_library(LIBHWLOC_LIBRARY NAMES libhwloc hwloc)
8+
set(LIBHWLOC_LIBRARIES ${LIBHWLOC_LIBRARY})
9+
10+
get_filename_component(LIBHWLOC_LIB_DIR ${LIBHWLOC_LIBRARIES} DIRECTORY)
11+
set(LIBHWLOC_LIBRARY_DIRS ${LIBHWLOC_LIB_DIR})
12+
13+
find_file(LIBHWLOC_HEADER NAMES hwloc.h)
14+
get_filename_component(LIBHWLOC_INCLUDE_DIR ${LIBHWLOC_HEADER} DIRECTORY)
15+
set(LIBHWLOC_INCLUDE_DIRS ${LIBHWLOC_INCLUDE_DIR})
16+
17+
set(HWLOC_VERSION_CODE
18+
"
19+
#include <stdio.h>
20+
#include <stdlib.h>
21+
#include \"hwloc.h\"
22+
23+
void main(int argc, char** argv) {
24+
unsigned LIBHWLOC_API_PATCH = HWLOC_API_VERSION & 0xFF;
25+
unsigned LIBHWLOC_API_MINOR = (HWLOC_API_VERSION >> 8) & 0xFF;
26+
unsigned LIBHWLOC_API_MAJOR = (HWLOC_API_VERSION >> 16) & 0xFF;
27+
printf(\"%d.%d.%d\", LIBHWLOC_API_MAJOR, LIBHWLOC_API_MINOR, LIBHWLOC_API_PATCH);
28+
}")
29+
30+
set(HWLOC_VERSION_CODE_FILENAME "hwloc_get_version.c")
31+
file(WRITE "${CMAKE_BINARY_DIR}/${HWLOC_VERSION_CODE_FILENAME}"
32+
"${HWLOC_VERSION_CODE}")
33+
34+
try_run(
35+
HWLOC_RUN_RESULT HWLOC_COMPILE_RESULT ${CMAKE_BINARY_DIR}
36+
"${CMAKE_BINARY_DIR}/${HWLOC_VERSION_CODE_FILENAME}"
37+
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBHWLOC_INCLUDE_DIR}"
38+
RUN_OUTPUT_VARIABLE LIBHWLOC_API_VERSION)
39+
40+
if(WINDOWS)
41+
find_file(LIBHWLOC_DLL NAMES "bin/hwloc-15.dll" "bin/libhwloc-15.dll")
42+
get_filename_component(LIBHWLOC_DLL_DIR ${LIBHWLOC_DLL} DIRECTORY)
43+
set(LIBHWLOC_DLL_DIRS ${LIBHWLOC_DLL_DIR})
44+
endif()
45+
46+
if(LIBHWLOC_LIBRARY)
47+
message(STATUS " Found libhwloc using find_library()")
48+
message(STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES}")
49+
message(STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS}")
50+
message(STATUS " LIBHWLOC_LIBRARY_DIRS = ${LIBHWLOC_LIBRARY_DIRS}")
51+
message(STATUS " LIBHWLOC_API_VERSION = ${LIBHWLOC_API_VERSION}")
52+
if(WINDOWS)
53+
message(STATUS " LIBHWLOC_DLL_DIRS = ${LIBHWLOC_DLL_DIRS}")
54+
endif()
55+
56+
if(LIBHWLOC_FIND_VERSION)
57+
if(NOT LIBHWLOC_API_VERSION)
58+
message(FATAL_ERROR "Failed to retrieve libhwloc version")
59+
elseif(NOT LIBHWLOC_API_VERSION VERSION_GREATER_EQUAL
60+
LIBHWLOC_FIND_VERSION)
61+
message(
62+
FATAL_ERROR
63+
" Required version: ${LIBHWLOC_FIND_VERSION}, found ${LIBHWLOC_API_VERSION}"
64+
)
65+
endif()
66+
endif()
67+
else()
68+
set(MSG_NOT_FOUND
69+
"libhwloc NOT found (set CMAKE_PREFIX_PATH to point the location)")
70+
if(LIBHWLOC_FIND_REQUIRED)
71+
message(FATAL_ERROR ${MSG_NOT_FOUND})
72+
else()
73+
message(WARNING ${MSG_NOT_FOUND})
74+
endif()
75+
endif()

examples/cmake/FindLIBUMF.cmake

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'libumf' using find_library()")
6+
7+
find_library(LIBUMF_LIBRARY NAMES libumf umf)
8+
set(LIBUMF_LIBRARIES ${LIBUMF_LIBRARY})
9+
10+
get_filename_component(LIBUMF_LIB_DIR ${LIBUMF_LIBRARIES} DIRECTORY)
11+
set(LIBUMF_LIBRARY_DIRS ${LIBUMF_LIB_DIR})
12+
13+
find_file(LIBUMF_HEADER NAMES umf.h)
14+
get_filename_component(LIBUMF_INCLUDE_DIR ${LIBUMF_HEADER} DIRECTORY)
15+
set(LIBUMF_INCLUDE_DIRS ${LIBUMF_INCLUDE_DIR})
16+
17+
if(LIBUMF_LIBRARY)
18+
message(STATUS " Found libumf using find_library()")
19+
message(STATUS " LIBUMF_LIBRARIES = ${LIBUMF_LIBRARIES}")
20+
message(STATUS " LIBUMF_INCLUDE_DIRS = ${LIBUMF_INCLUDE_DIRS}")
21+
message(STATUS " LIBUMF_LIBRARY_DIRS = ${LIBUMF_LIBRARY_DIRS}")
22+
else()
23+
set(MSG_NOT_FOUND
24+
"libumf NOT found (set CMAKE_PREFIX_PATH to point the location)")
25+
if(LIBUMF_FIND_REQUIRED)
26+
message(FATAL_ERROR ${MSG_NOT_FOUND})
27+
else()
28+
message(WARNING ${MSG_NOT_FOUND})
29+
endif()
30+
endif()

examples/cmake/FindTBB.cmake

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'tbb' using find_library()")
6+
7+
find_library(TBB_LIBRARY NAMES libtbbmalloc tbbmalloc)
8+
set(TBB_LIBRARIES ${TBB_LIBRARY})
9+
10+
get_filename_component(TBB_LIB_DIR ${TBB_LIBRARIES} DIRECTORY)
11+
set(TBB_LIBRARY_DIRS ${TBB_LIB_DIR})
12+
13+
find_file(TBB_HEADER NAMES "tbb/scalable_allocator.h")
14+
if(TBB_HEADER)
15+
get_filename_component(TBB_INCLUDE_DIR_TBB ${TBB_HEADER} DIRECTORY)
16+
get_filename_component(TBB_INCLUDE_DIR ${TBB_INCLUDE_DIR_TBB} DIRECTORY)
17+
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
18+
else()
19+
set(MSG_NOT_FOUND "<tbb/scalable_allocator.h> header NOT found (set "
20+
"CMAKE_PREFIX_PATH to point the location)")
21+
if(TBB_FIND_REQUIRED)
22+
message(FATAL_ERROR ${MSG_NOT_FOUND})
23+
else()
24+
message(WARNING ${MSG_NOT_FOUND})
25+
endif()
26+
endif()
27+
28+
if(WINDOWS)
29+
find_file(TBB_DLL NAMES "bin/tbbmalloc.dll")
30+
get_filename_component(TBB_DLL_DIR ${TBB_DLL} DIRECTORY)
31+
set(TBB_DLL_DIRS ${TBB_DLL_DIR})
32+
endif()
33+
34+
if(TBB_LIBRARY)
35+
message(STATUS " Found tbb using find_library()")
36+
message(STATUS " TBB_LIBRARIES = ${TBB_LIBRARIES}")
37+
message(STATUS " TBB_INCLUDE_DIRS = ${TBB_INCLUDE_DIRS}")
38+
message(STATUS " TBB_LIBRARY_DIRS = ${TBB_LIBRARY_DIRS}")
39+
if(WINDOWS)
40+
message(STATUS " TBB_DLL_DIRS = ${TBB_DLL_DIRS}")
41+
endif()
42+
else()
43+
set(MSG_NOT_FOUND "tbb NOT found (set CMAKE_PREFIX_PATH to point the "
44+
"location)")
45+
if(TBB_FIND_REQUIRED)
46+
message(FATAL_ERROR ${MSG_NOT_FOUND})
47+
else()
48+
message(WARNING ${MSG_NOT_FOUND})
49+
endif()
50+
endif()
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
6+
project(umf_example_gpu_shared_memory LANGUAGES C)
7+
enable_testing()
8+
9+
set(UMF_EXAMPLE_DIR "${CMAKE_SOURCE_DIR}/..")
10+
list(APPEND CMAKE_MODULE_PATH "${UMF_EXAMPLE_DIR}/cmake")
11+
message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
12+
13+
find_package(PkgConfig)
14+
pkg_check_modules(LIBUMF libumf)
15+
if(NOT LIBUMF_FOUND)
16+
find_package(LIBUMF REQUIRED libumf)
17+
endif()
18+
19+
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
20+
if(NOT LIBHWLOC_FOUND)
21+
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
22+
endif()
23+
24+
include(FetchContent)
25+
26+
set(LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git")
27+
set(LEVEL_ZERO_LOADER_TAG v1.16.1)
28+
29+
message(
30+
STATUS
31+
"Installing level-zero ${LEVEL_ZERO_LOADER_TAG} from ${LEVEL_ZERO_LOADER_REPO} ..."
32+
)
33+
34+
FetchContent_Declare(
35+
level-zero-loader
36+
GIT_REPOSITORY ${LEVEL_ZERO_LOADER_REPO}
37+
GIT_TAG ${LEVEL_ZERO_LOADER_TAG}
38+
EXCLUDE_FROM_ALL)
39+
40+
FetchContent_GetProperties(level-zero-loader)
41+
if(NOT level-zero-loader_POPULATED)
42+
FetchContent_Populate(level-zero-loader)
43+
endif()
44+
45+
set(LEVEL_ZERO_INCLUDE_DIRS
46+
${level-zero-loader_SOURCE_DIR}/include
47+
CACHE PATH "Path to Level Zero Headers")
48+
message(STATUS "Level Zero include directory: ${LEVEL_ZERO_INCLUDE_DIRS}")
49+
50+
# build the example
51+
set(EXAMPLE_NAME umf_example_gpu_shared_memory)
52+
add_executable(${EXAMPLE_NAME} gpu_shared_memory.c)
53+
target_include_directories(${EXAMPLE_NAME} PRIVATE ${LIBUMF_INCLUDE_DIRS}
54+
${UMF_EXAMPLE_DIR}/common)
55+
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBUMF_LIBRARY_DIRS}
56+
${LIBHWLOC_LIBRARY_DIRS})
57+
target_link_options(${EXAMPLE_NAME} PRIVATE "-Wl,--start-group")
58+
target_link_libraries(${EXAMPLE_NAME} PRIVATE stdc++ libdisjoint_pool.a
59+
ze_loader ${LIBUMF_LIBRARIES})
60+
61+
# an optional part - adds a test of this example
62+
add_test(
63+
NAME ${EXAMPLE_NAME}
64+
COMMAND ${EXAMPLE_NAME}
65+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
66+
67+
set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "example-standalone")
68+
69+
if(LINUX)
70+
# set LD_LIBRARY_PATH
71+
set_property(
72+
TEST ${EXAMPLE_NAME}
73+
PROPERTY
74+
ENVIRONMENT_MODIFICATION
75+
"LD_LIBRARY_PATH=path_list_append:${LIBUMF_LIBRARY_DIRS};LD_LIBRARY_PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}"
76+
)
77+
endif()

examples/ipc_ipcapi/CMakeLists.txt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
6+
project(umf_example_ipc_ipcapi LANGUAGES C)
7+
enable_testing()
8+
9+
set(UMF_EXAMPLE_DIR "${CMAKE_SOURCE_DIR}/..")
10+
list(APPEND CMAKE_MODULE_PATH "${UMF_EXAMPLE_DIR}/cmake")
11+
message(STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}")
12+
13+
find_package(PkgConfig)
14+
pkg_check_modules(LIBUMF libumf)
15+
if(NOT LIBUMF_FOUND)
16+
find_package(LIBUMF REQUIRED libumf)
17+
endif()
18+
19+
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
20+
if(NOT LIBHWLOC_FOUND)
21+
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
22+
endif()
23+
24+
pkg_check_modules(TBB tbb)
25+
if(NOT TBB_FOUND)
26+
find_package(TBB REQUIRED tbb)
27+
endif()
28+
29+
# build the example
30+
function(build_umf_ipc_example name)
31+
set(BASE_NAME ${name})
32+
set(EXAMPLE_NAME umf_example_${BASE_NAME})
33+
34+
foreach(loop_var IN ITEMS "producer" "consumer")
35+
set(EX_NAME ${EXAMPLE_NAME}_${loop_var})
36+
add_executable(${EX_NAME} ${BASE_NAME}_${loop_var}.c)
37+
target_include_directories(${EX_NAME} PRIVATE ${LIBUMF_INCLUDE_DIRS})
38+
target_link_directories(${EX_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS})
39+
target_link_libraries(${EX_NAME} PRIVATE ${LIBUMF_LIBRARIES} hwloc)
40+
endforeach(loop_var)
41+
endfunction()
42+
43+
# an optional part - adds a test of this example
44+
function(add_test_for_umf_ipc_example script)
45+
set(EXAMPLE_NAME umf_example_${script})
46+
47+
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh
48+
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
49+
50+
add_test(
51+
NAME ${EXAMPLE_NAME}
52+
COMMAND ${script}.sh
53+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
54+
55+
if(LINUX)
56+
set_property(
57+
TEST ${EXAMPLE_NAME}
58+
PROPERTY
59+
ENVIRONMENT_MODIFICATION
60+
"LD_LIBRARY_PATH=path_list_append:${LIBUMF_LIBRARY_DIRS};LD_LIBRARY_PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}"
61+
)
62+
endif()
63+
64+
set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "example-standalone")
65+
if(NOT UMF_TESTS_FAIL_ON_SKIP)
66+
set_tests_properties(${EXAMPLE_NAME} PROPERTIES SKIP_RETURN_CODE 125)
67+
endif()
68+
endfunction()
69+
70+
# build the example
71+
build_umf_ipc_example(ipc_ipcapi)
72+
73+
# an optional part - adds a test of this example
74+
add_test_for_umf_ipc_example(ipc_ipcapi_anon_fd)
75+
add_test_for_umf_ipc_example(ipc_ipcapi_shm)

0 commit comments

Comments
 (0)