Skip to content

Commit 2417fcf

Browse files
Merge pull request #1005 from omarahmed1111/merge-some-main-changes-into-adapters
Bump adapters branch
2 parents 036b9cf + 2f2aebe commit 2417fcf

File tree

19 files changed

+285
-337
lines changed

19 files changed

+285
-337
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55

66
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
7-
project(unified-runtime VERSION 0.7.0)
7+
project(unified-runtime VERSION 0.8.0)
88

99
include(GNUInstallDirs)
1010
include(CheckCXXSourceCompiles)

cmake/helpers.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ function(add_ur_target_compile_options name)
7878
endif()
7979
elseif(MSVC)
8080
target_compile_options(${name} PRIVATE
81-
/MP
81+
$<$<CXX_COMPILER_ID:MSVC>:/MP> # clang-cl.exe does not support /MP
8282
/W3
8383
/MD$<$<CONFIG:Debug>:d>
8484
/GS

include/ur.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
77
88
@file ur.py
9-
@version v0.7-r0
9+
@version v0.8-r0
1010
1111
"""
1212
import platform
@@ -570,7 +570,8 @@ def __str__(self):
570570
class ur_api_version_v(IntEnum):
571571
_0_6 = UR_MAKE_VERSION( 0, 6 ) ## version 0.6
572572
_0_7 = UR_MAKE_VERSION( 0, 7 ) ## version 0.7
573-
CURRENT = UR_MAKE_VERSION( 0, 7 ) ## latest known version
573+
_0_8 = UR_MAKE_VERSION( 0, 8 ) ## version 0.8
574+
CURRENT = UR_MAKE_VERSION( 0, 8 ) ## latest known version
574575

575576
class ur_api_version_t(c_int):
576577
def __str__(self):

include/ur_api.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
88
*
99
* @file ur_api.h
10-
* @version v0.7-r0
10+
* @version v0.8-r0
1111
*
1212
*/
1313
#ifndef UR_API_H_INCLUDED
@@ -1022,7 +1022,8 @@ urPlatformGetInfo(
10221022
typedef enum ur_api_version_t {
10231023
UR_API_VERSION_0_6 = UR_MAKE_VERSION(0, 6), ///< version 0.6
10241024
UR_API_VERSION_0_7 = UR_MAKE_VERSION(0, 7), ///< version 0.7
1025-
UR_API_VERSION_CURRENT = UR_MAKE_VERSION(0, 7), ///< latest known version
1025+
UR_API_VERSION_0_8 = UR_MAKE_VERSION(0, 8), ///< version 0.8
1026+
UR_API_VERSION_CURRENT = UR_MAKE_VERSION(0, 8), ///< latest known version
10261027
/// @cond
10271028
UR_API_VERSION_FORCE_UINT32 = 0x7fffffff
10281029
/// @endcond

include/ur_ddi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
88
*
99
* @file ur_ddi.h
10-
* @version v0.7-r0
10+
* @version v0.8-r0
1111
*
1212
*/
1313
#ifndef UR_DDI_H_INCLUDED

scripts/Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ PROJECT_NAME = "Intel One API Unified Runtime API"
3838
# could be handy for archiving the generated documentation or if some version
3939
# control system is used.
4040

41-
PROJECT_NUMBER = v0.7
41+
PROJECT_NUMBER = v0.8
4242

4343
# Using the PROJECT_BRIEF tag one can provide an optional one line description
4444
# for a project that appears at the top of each page and should give viewer a

scripts/ci.py

Lines changed: 0 additions & 80 deletions
This file was deleted.

scripts/core/INTRO.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,15 @@ Specific environment variables can be set to control the behavior of unified run
296296

297297
This environment variable is ignored when :envvar:`UR_ADAPTERS_FORCE_LOAD` environment variable is used.
298298

299+
.. envvar:: UR_ADAPTERS_DEEP_BIND
300+
301+
If set, the loader will use `RTLD_DEEPBIND` when opening adapter libraries. This might be useful if an adapter
302+
requires a different version of a shared library compared to the rest of the applcation.
303+
304+
.. note::
305+
306+
This environment variable is Linux-only.
307+
299308
.. envvar:: UR_ENABLE_LAYERS
300309

301310
Holds a comma-separated list of layers to enable in addition to any specified via ``urInit``.

scripts/core/platform.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ etors:
133133
- name: "0_7"
134134
value: "$X_MAKE_VERSION( 0, 7 )"
135135
desc: "version 0.7"
136+
- name: "0_8"
137+
value: "$X_MAKE_VERSION( 0, 8 )"
138+
desc: "version 0.8"
136139
--- #--------------------------------------------------------------------------
137140
type: function
138141
desc: "Returns the API version supported by the specified platform"

scripts/parse_specs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import ctypes
1919
import itertools
2020

21-
default_version = "0.7"
22-
all_versions = ["0.6", "0.7"]
21+
default_version = "0.8"
22+
all_versions = ["0.6", "0.7", "0.8"]
2323

2424
"""
2525
preprocess object

scripts/templates/params.hpp.mako

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ from templates import helper as th
3636
${x}_params::serializePtr(os, ${caller.body()});
3737
%elif th.type_traits.is_handle(itype):
3838
${x}_params::serializePtr(os, ${caller.body()});
39+
%elif iname and iname.startswith("pfn"):
40+
os << reinterpret_cast<void*>(${caller.body()});
3941
%else:
4042
os << ${caller.body()};
4143
%endif
@@ -104,7 +106,7 @@ template <> struct is_handle<${th.make_type_name(n, tags, obj)}> : std::true_typ
104106
%endfor
105107
template <typename T>
106108
inline constexpr bool is_handle_v = is_handle<T>::value;
107-
template <typename T> inline void serializePtr(std::ostream &os, T *ptr);
109+
template <typename T> inline void serializePtr(std::ostream &os, const T *ptr);
108110
template <typename T> inline void serializeFlag(std::ostream &os, uint32_t flag);
109111
template <typename T> inline void serializeTagged(std::ostream &os, const void *ptr, T value, size_t size);
110112

@@ -192,7 +194,11 @@ template <typename T> inline void serializeTagged(std::ostream &os, const void *
192194
case ${ename}: {
193195
%if th.value_traits.is_array(vtype):
194196
<% atype = th.value_traits.get_array_name(vtype) %>
197+
%if 'void' in atype:
198+
const ${atype} const *tptr = (const ${atype} const*)ptr;
199+
%else:
195200
const ${atype} *tptr = (const ${atype} *)ptr;
201+
%endif
196202
%if "char" in atype: ## print char* arrays as simple NULL-terminated strings
197203
serializePtr(os, tptr);
198204
%else:
@@ -209,12 +215,16 @@ template <typename T> inline void serializeTagged(std::ostream &os, const void *
209215
os << "}";
210216
%endif
211217
%else:
218+
%if 'void' in vtype:
219+
const ${vtype} const *tptr = (const ${vtype} const *)ptr;
220+
%else:
212221
const ${vtype} *tptr = (const ${vtype} *)ptr;
222+
%endif
213223
if (sizeof(${vtype}) > size) {
214224
os << "invalid size (is: " << size << ", expected: >=" << sizeof(${vtype}) << ")";
215225
return;
216226
}
217-
os << (void *)(tptr) << " (";
227+
os << (const void *)(tptr) << " (";
218228
<%call expr="member(tptr, vtype, False)">
219229
*tptr
220230
</%call>
@@ -237,7 +247,7 @@ template <typename T> inline void serializeTagged(std::ostream &os, const void *
237247
}
238248

239249
## structure type enum value must be first
240-
enum ${th.make_enum_name(n, tags, obj)} *value = (enum ${th.make_enum_name(n, tags, obj)} *)ptr;
250+
const enum ${th.make_enum_name(n, tags, obj)} *value = (const enum ${th.make_enum_name(n, tags, obj)} *)ptr;
241251
switch (*value) {
242252
%for n, item in enumerate(obj['etors']):
243253
<%
@@ -362,21 +372,21 @@ inline std::ostream &operator<<(std::ostream &os, const struct ${th.make_pfncb_p
362372

363373
namespace ${x}_params {
364374

365-
template <typename T> inline void serializePtr(std::ostream &os, T *ptr) {
375+
template <typename T> inline void serializePtr(std::ostream &os, const T *ptr) {
366376
if (ptr == nullptr) {
367377
os << "nullptr";
368378
} else if constexpr (std::is_pointer_v<T>) {
369-
os << (void *)(ptr) << " (";
379+
os << (const void *)(ptr) << " (";
370380
serializePtr(os, *ptr);
371381
os << ")";
372382
} else if constexpr (std::is_void_v<T> || is_handle_v<T *>) {
373-
os << (void *)ptr;
383+
os << (const void *)ptr;
374384
} else if constexpr (std::is_same_v<std::remove_cv_t< T >, char>) {
375-
os << (void *)(ptr) << " (";
385+
os << (const void *)(ptr) << " (";
376386
os << ptr;
377387
os << ")";
378388
} else {
379-
os << (void *)(ptr) << " (";
389+
os << (const void *)(ptr) << " (";
380390
os << *ptr;
381391
os << ")";
382392
}

source/common/CMakeLists.txt

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,25 @@
33
# See LICENSE.TXT
44
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55

6-
add_library(ur_common INTERFACE)
6+
add_subdirectory(unified_malloc_framework)
7+
add_subdirectory(umf_pools)
8+
9+
add_ur_library(ur_common STATIC
10+
umf_helpers.hpp
11+
ur_pool_manager.hpp
12+
$<$<PLATFORM_ID:Windows>:windows/ur_lib_loader.cpp>
13+
$<$<PLATFORM_ID:Linux,Darwin>:linux/ur_lib_loader.cpp>
14+
)
715
add_library(${PROJECT_NAME}::common ALIAS ur_common)
816

9-
target_include_directories(ur_common INTERFACE
17+
target_include_directories(ur_common PUBLIC
1018
${CMAKE_CURRENT_SOURCE_DIR}
1119
${CMAKE_SOURCE_DIR}/include
1220
)
1321

14-
add_subdirectory(unified_malloc_framework)
15-
add_subdirectory(umf_pools)
16-
target_link_libraries(ur_common INTERFACE unified_malloc_framework disjoint_pool ${CMAKE_DL_LIBS} ${PROJECT_NAME}::headers)
17-
18-
if(WIN32)
19-
target_sources(ur_common
20-
INTERFACE
21-
${CMAKE_CURRENT_SOURCE_DIR}/windows/ur_lib_loader.cpp
22-
umf_helpers.hpp ur_pool_manager.hpp
23-
)
24-
else()
25-
target_sources(ur_common
26-
INTERFACE
27-
${CMAKE_CURRENT_SOURCE_DIR}/linux/ur_lib_loader.cpp
28-
umf_helpers.hpp ur_pool_manager.hpp
29-
)
30-
endif()
22+
target_link_libraries(ur_common PUBLIC
23+
unified_malloc_framework
24+
disjoint_pool
25+
${CMAKE_DL_LIBS}
26+
${PROJECT_NAME}::headers
27+
)

source/common/linux/ur_lib_loader.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@
1212
#include "logger/ur_logger.hpp"
1313
#include "ur_lib_loader.hpp"
1414

15-
#if defined(SANITIZER_ANY) || defined(__APPLE__)
16-
#define LOAD_DRIVER_LIBRARY(NAME) dlopen(NAME, RTLD_LAZY | RTLD_LOCAL)
17-
#else
18-
#define LOAD_DRIVER_LIBRARY(NAME) \
19-
dlopen(NAME, RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND)
20-
#endif
15+
#define DEEP_BIND_ENV "UR_ADAPTERS_DEEP_BIND"
2116

2217
namespace ur_loader {
2318

@@ -34,8 +29,21 @@ void LibLoader::freeAdapterLibrary(HMODULE handle) {
3429

3530
std::unique_ptr<HMODULE, LibLoader::lib_dtor>
3631
LibLoader::loadAdapterLibrary(const char *name) {
37-
return std::unique_ptr<HMODULE, LibLoader::lib_dtor>(
38-
LOAD_DRIVER_LIBRARY(name));
32+
int mode = RTLD_LAZY | RTLD_LOCAL;
33+
#if !defined(__APPLE__)
34+
bool deepbind = getenv_tobool(DEEP_BIND_ENV);
35+
if (deepbind) {
36+
#if defined(SANITIZER_ANY)
37+
logger::warning(
38+
"Enabling RTLD_DEEPBIND while running under a sanitizer is likely "
39+
"to cause issues. Consider disabling {} environment variable.",
40+
DEEP_BIND_ENV);
41+
#endif
42+
mode |= RTLD_DEEPBIND;
43+
}
44+
#endif
45+
46+
return std::unique_ptr<HMODULE, LibLoader::lib_dtor>(dlopen(name, mode));
3947
}
4048

4149
void *LibLoader::getFunctionPtr(HMODULE handle, const char *func_name) {

0 commit comments

Comments
 (0)