Skip to content

Commit 9c4c5c7

Browse files
committed
Add UMF_BUILD_OS_MEMORY_PROVIDER option to disable OS memory provider
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 6c485a2 commit 9c4c5c7

File tree

7 files changed

+56
-25
lines changed

7 files changed

+56
-25
lines changed

.github/workflows/basic.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
compiler: [{c: gcc, cxx: g++}]
1717
pool_tracking: ['ON', 'OFF']
1818
shared_library: ['OFF']
19+
os_provider: ['ON']
1920
include:
2021
- os: 'ubuntu-20.04'
2122
build_type: Release
@@ -29,6 +30,11 @@ jobs:
2930
build_type: Release
3031
compiler: {c: gcc, cxx: g++}
3132
shared_library: 'ON'
33+
- os: 'ubuntu-22.04'
34+
build_type: Release
35+
compiler: {c: gcc, cxx: g++}
36+
shared_library: ['ON', 'OFF']
37+
os_provider: 'OFF'
3238
runs-on: ${{matrix.os}}
3339

3440
steps:
@@ -54,6 +60,7 @@ jobs:
5460
-DUMF_BUILD_SHARED_LIBRARY=${{matrix.shared_library}}
5561
-DCMAKE_C_COMPILER=${{matrix.compiler.c}}
5662
-DCMAKE_CXX_COMPILER=${{matrix.compiler.cxx}}
63+
-DUMF_BUILD_OS_MEMORY_PROVIDER=${{matrix.os_provider}}
5764
-DUMF_ENABLE_POOL_TRACKING=${{matrix.pool_tracking}}
5865
-DUMF_FORMAT_CODE_STYLE=OFF
5966
-DUMF_DEVELOPER_MODE=ON

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ include(helpers)
1717

1818
# Build Options
1919
option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF)
20+
option(UMF_BUILD_OS_MEMORY_PROVIDER "Build OS memory provider" ON)
2021
option(UMF_BUILD_LIBUMF_POOL_DISJOINT "Build the libumf_pool_disjoint static library" OFF)
2122
option(UMF_BUILD_LIBUMF_POOL_JEMALLOC "Build the libumf_pool_jemalloc static library" OFF)
2223
option(UMF_BUILD_LIBUMF_POOL_SCALABLE "Build the libumf_pool_scalable static library" OFF)

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ UMF comes with predefined pool allocators (see include/pool) and providers (see
2222

2323
A memory provider that provides memory from an operating system.
2424

25+
#### Requirements
26+
27+
To enable this feature, the `UMF_BUILD_OS_MEMORY_PROVIDER` option needs to be turned `ON` (default: `ON`).
28+
2529
## Memory pool managers
2630

2731
### libumf_pool_disjoint
@@ -115,6 +119,7 @@ List of options provided by CMake:
115119
| Name | Description | Values | Default |
116120
| - | - | - | - |
117121
| UMF_BUILD_SHARED_LIBRARY | Build UMF as shared library | ON/OFF | OFF |
122+
| UMF_BUILD_OS_MEMORY_PROVIDER | Build OS memory provider | ON/OFF | ON |
118123
| UMF_BUILD_LIBUMF_POOL_DISJOINT | Build the libumf_pool_disjoint static library | ON/OFF | OFF |
119124
| UMF_BUILD_LIBUMF_POOL_JEMALLOC | Build the libumf_pool_jemalloc static library | ON/OFF | OFF |
120125
| UMF_BUILD_LIBUMF_POOL_SCALABLE | Build the libumf_pool_scalable static library | ON/OFF | OFF |

benchmark/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ target_link_libraries(ubench
3232
pthread
3333
m)
3434

35+
if (UMF_BUILD_OS_MEMORY_PROVIDER)
36+
target_compile_definitions(ubench PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
37+
endif()
38+
3539
if (UMF_BUILD_LIBUMF_POOL_DISJOINT)
3640
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
3741
endif()

benchmark/ubench.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ UBENCH_EX(simple, glibc_malloc) {
9393
free(array);
9494
}
9595

96+
#ifdef UMF_BUILD_OS_MEMORY_PROVIDER
9697
////////////////// OS MEMORY PROVIDER
9798

9899
static umf_os_memory_provider_params_t UMF_OS_MEMORY_PROVIDER_PARAMS = {
@@ -156,10 +157,12 @@ UBENCH_EX(simple, os_memory_provider) {
156157
umfMemoryProviderDestroy(os_memory_provider);
157158
free(array);
158159
}
160+
#endif /* UMF_BUILD_OS_MEMORY_PROVIDER */
159161

160-
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || \
161-
(defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || \
162-
(defined UMF_BUILD_LIBUMF_POOL_SCALABLE)
162+
#if (defined UMF_BUILD_OS_MEMORY_PROVIDER) && \
163+
((defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || \
164+
(defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || \
165+
(defined UMF_BUILD_LIBUMF_POOL_SCALABLE))
163166

164167
static void *w_umfPoolMalloc(void *provider, size_t size, size_t alignment) {
165168
umf_memory_pool_handle_t hPool = (umf_memory_pool_handle_t)provider;
@@ -174,9 +177,10 @@ static void w_umfPoolFree(void *provider, void *ptr, size_t size) {
174177
exit(-1);
175178
}
176179
}
177-
#endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) */
180+
#endif /* (defined UMF_BUILD_OS_MEMORY_PROVIDER) && ((defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || (defined UMF_BUILD_LIBUMF_POOL_SCALABLE)) */
178181

179-
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
182+
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) && \
183+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
180184
////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
181185

182186
UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
@@ -218,9 +222,10 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
218222
umfMemoryProviderDestroy(os_memory_provider);
219223
free(array);
220224
}
221-
#endif /* UMF_BUILD_LIBUMF_POOL_DISJOINT */
225+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
222226

223-
#ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
227+
#if (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) && \
228+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
224229
////////////////// JEMALLOC POOL WITH OS MEMORY PROVIDER
225230

226231
UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
@@ -254,9 +259,10 @@ UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
254259
umfMemoryProviderDestroy(os_memory_provider);
255260
free(array);
256261
}
257-
#endif /* UMF_BUILD_LIBUMF_POOL_JEMALLOC */
262+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
258263

259-
#ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
264+
#if (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) && \
265+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
260266
////////////////// SCALABLE (TBB) POOL WITH OS MEMORY PROVIDER
261267

262268
UBENCH_EX(simple, scalable_pool_with_os_memory_provider) {
@@ -290,6 +296,6 @@ UBENCH_EX(simple, scalable_pool_with_os_memory_provider) {
290296
umfMemoryProviderDestroy(os_memory_provider);
291297
free(array);
292298
}
293-
#endif /* UMF_BUILD_LIBUMF_POOL_SCALABLE */
299+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
294300

295301
UBENCH_MAIN();

src/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ set(UMF_SOURCES
1010
memory_pool.c
1111
memory_provider.c
1212
memory_provider_get_last_failed.c
13-
provider/provider_os_memory.c
1413
provider/provider_tracking.c
1514
critnib/critnib.c
1615
)
1716

18-
set(UMF_SOURCES_LINUX
19-
provider/provider_os_memory_linux.c
20-
)
21-
2217
set(UMF_SOURCES_WINDOWS
23-
provider/provider_os_memory_windows.c
2418
provider/provider_tracking_windows.cpp
2519
)
2620

21+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
22+
set(UMF_SOURCES ${UMF_SOURCES} provider/provider_os_memory.c)
23+
set(UMF_SOURCES_LINUX ${UMF_SOURCES_LINUX} provider/provider_os_memory_linux.c)
24+
set(UMF_SOURCES_WINDOWS ${UMF_SOURCES_WINDOWS} provider/provider_os_memory_windows.c)
25+
endif()
26+
2727
if(LINUX)
2828
set(UMF_SOURCES ${UMF_SOURCES} ${UMF_SOURCES_LINUX})
2929
elseif(WINDOWS)

test/CMakeLists.txt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,27 @@ if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
7878
LIBS disjoint_pool)
7979
endif()
8080

81-
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
82-
add_umf_test(NAME jemalloc_pool
83-
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
84-
LIBS jemalloc_pool)
81+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
82+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
83+
add_umf_test(NAME jemalloc_pool
84+
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
85+
LIBS jemalloc_pool)
86+
endif()
87+
else()
88+
message(STATUS "The jemalloc_pool test is DISABLED, because UMF_BUILD_OS_MEMORY_PROVIDER is set to OFF")
8589
endif()
8690

87-
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
88-
add_umf_test(NAME scalable_pool
89-
SRCS pools/scalable_pool.cpp malloc_compliance_tests.cpp
90-
LIBS scalable_pool)
91+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
92+
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
93+
add_umf_test(NAME scalable_pool
94+
SRCS pools/scalable_pool.cpp malloc_compliance_tests.cpp
95+
LIBS scalable_pool)
96+
endif()
97+
else()
98+
message(STATUS "The scalable_pool test is DISABLED, because UMF_BUILD_OS_MEMORY_PROVIDER is set to OFF")
9199
endif()
92100

93-
if(LINUX) # OS-specific functions are implemented only for Linux now
101+
if(UMF_BUILD_OS_MEMORY_PROVIDER AND LINUX) # OS-specific functions are implemented only for Linux now
94102
add_umf_test(NAME provider_os_memory
95103
SRCS provider_os_memory.cpp
96104
LIBS umf_utils)

0 commit comments

Comments
 (0)