Skip to content

Commit 3dc3103

Browse files
committed
Refactor logging and remove dependency on clog
1 parent 6481e8b commit 3dc3103

File tree

4 files changed

+313
-44
lines changed

4 files changed

+313
-44
lines changed

BUILD.bazel

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ C99OPTS = [
1919
# Source code common to all platforms.
2020
COMMON_SRCS = [
2121
"src/api.c",
22-
"src/init.c",
2322
"src/cache.c",
23+
"src/init.c",
24+
"src/log.c",
2425
]
2526

2627
# Architecture-specific sources and headers.
@@ -139,6 +140,7 @@ cc_library(
139140
}) + [
140141
"-Iexternal/cpuinfo/include",
141142
"-Iexternal/cpuinfo/src",
143+
"-DCPUINFO_LOG_LEVEL=2",
142144
],
143145
includes = [
144146
"include",
@@ -167,9 +169,6 @@ cc_library(
167169
"src/arm/api.h",
168170
"src/arm/midr.h",
169171
],
170-
deps = [
171-
"@org_pytorch_cpuinfo//deps/clog",
172-
],
173172
)
174173

175174
cc_library(

CMakeLists.txt

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ SET(CPUINFO_RUNTIME_TYPE "default" CACHE STRING "Type of runtime library (shared
1313
SET_PROPERTY(CACHE CPUINFO_RUNTIME_TYPE PROPERTY STRINGS default static shared)
1414
SET(CPUINFO_LOG_LEVEL "default" CACHE STRING "Minimum logging level (info with lower severity will be ignored)")
1515
SET_PROPERTY(CACHE CPUINFO_LOG_LEVEL PROPERTY STRINGS default debug info warning error fatal none)
16+
IF(ANDROID)
17+
OPTION(CPUINFO_LOG_TO_STDIO "Log errors, warnings, and information to stdout/stderr" OFF)
18+
ELSE()
19+
OPTION(CPUINFO_LOG_TO_STDIO "Log errors, warnings, and information to stdout/stderr" ON)
20+
ENDIF()
1621
OPTION(CPUINFO_BUILD_TOOLS "Build command-line tools" ON)
1722
OPTION(CPUINFO_BUILD_UNIT_TESTS "Build cpuinfo unit tests" ON)
1823
OPTION(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" ON)
@@ -129,10 +134,7 @@ IF(CPUINFO_BUILD_BENCHMARKS)
129134
ENDIF()
130135

131136
# ---[ cpuinfo library
132-
SET(CPUINFO_SRCS
133-
src/init.c
134-
src/api.c
135-
src/cache.c)
137+
SET(CPUINFO_SRCS src/api.c src/cache.c src/init.c src/log.c)
136138

137139
IF(CPUINFO_SUPPORTED_PLATFORM)
138140
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten" AND (CPUINFO_TARGET_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$" OR IOS_ARCH MATCHES "^(i386|x86_64)$"))
@@ -233,29 +235,34 @@ IF(CMAKE_SYSTEM_NAME MATCHES "^(Windows|WindowsStore|CYGWIN|MSYS)$")
233235
TARGET_LINK_LIBRARIES(cpuinfo PUBLIC Kernel32)
234236
endif()
235237
ENDIF()
238+
IF(ANDROID AND NOT CPUINFO_LOG_TO_STDIO)
239+
TARGET_LINK_LIBRARIES(cpuinfo PRIVATE "log")
240+
ENDIF()
236241
SET_TARGET_PROPERTIES(cpuinfo PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
237242
TARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
238243
TARGET_INCLUDE_DIRECTORIES(cpuinfo BEFORE PRIVATE src)
239244
TARGET_INCLUDE_DIRECTORIES(cpuinfo_internals BEFORE PUBLIC include src)
245+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_TO_STDIO=$<BOOL:${CPUINFO_LOG_TO_STDIO}>")
240246
IF(CPUINFO_LOG_LEVEL STREQUAL "default")
241247
# default logging level: error (subject to change)
242-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2)
248+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=2")
243249
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "debug")
244-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=5)
250+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=5")
245251
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "info")
246-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=4)
252+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=4")
247253
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "warning")
248-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=3)
254+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=3")
249255
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "error")
250-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=2)
256+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=2")
251257
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "fatal")
252-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=1)
258+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=1")
253259
ELSEIF(CPUINFO_LOG_LEVEL STREQUAL "none")
254-
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE CPUINFO_LOG_LEVEL=0)
260+
TARGET_COMPILE_DEFINITIONS(cpuinfo PRIVATE "CPUINFO_LOG_LEVEL=0")
255261
ELSE()
256262
MESSAGE(FATAL_ERROR "Unsupported logging level ${CPUINFO_LOG_LEVEL}")
257263
ENDIF()
258-
TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE CPUINFO_LOG_LEVEL=0)
264+
TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE "CPUINFO_LOG_LEVEL=0")
265+
TARGET_COMPILE_DEFINITIONS(cpuinfo_internals PRIVATE "CPUINFO_LOG_TO_STDIO=1")
259266

260267
IF(CPUINFO_SUPPORTED_PLATFORM)
261268
TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=1)
@@ -269,21 +276,6 @@ ELSE()
269276
TARGET_COMPILE_DEFINITIONS(cpuinfo INTERFACE CPUINFO_SUPPORTED_PLATFORM=0)
270277
ENDIF()
271278

272-
# ---[ cpuinfo dependencies: clog
273-
IF(NOT DEFINED CLOG_SOURCE_DIR)
274-
SET(CLOG_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/clog")
275-
ENDIF()
276-
IF(NOT TARGET clog)
277-
SET(CLOG_BUILD_TESTS OFF CACHE BOOL "")
278-
SET(CLOG_RUNTIME_TYPE "${CPUINFO_RUNTIME_TYPE}" CACHE STRING "")
279-
ADD_SUBDIRECTORY(
280-
"${CLOG_SOURCE_DIR}")
281-
# We build static version of clog but a dynamic library may indirectly depend on it
282-
SET_PROPERTY(TARGET clog PROPERTY POSITION_INDEPENDENT_CODE ON)
283-
ENDIF()
284-
TARGET_LINK_LIBRARIES(cpuinfo PRIVATE clog)
285-
TARGET_LINK_LIBRARIES(cpuinfo_internals PRIVATE clog)
286-
287279
ADD_LIBRARY(${PROJECT_NAME}::cpuinfo ALIAS cpuinfo)
288280

289281
# support find_package(cpuinfo CONFIG)
@@ -302,7 +294,7 @@ INSTALL(TARGETS cpuinfo
302294
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
303295

304296
INSTALL(EXPORT cpuinfo-targets
305-
NAMESPACE ${PROJECT_NAME}:: # IMPORTED cpuinfo::cpuinfo, cpuinfo::clog
297+
NAMESPACE ${PROJECT_NAME}:: # IMPORTED cpuinfo::cpuinfo
306298
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME})
307299

308300
# ---[ cpuinfo micro-benchmarks
@@ -354,13 +346,13 @@ IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_MOCK_TESTS)
354346
SET_TARGET_PROPERTIES(cpuinfo_mock PROPERTIES PUBLIC_HEADER include/cpuinfo.h)
355347
TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PUBLIC include)
356348
TARGET_INCLUDE_DIRECTORIES(cpuinfo_mock BEFORE PRIVATE src)
357-
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PUBLIC CPUINFO_MOCK=1)
358-
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE CLOG_LOG_TO_STDIO=1)
349+
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PUBLIC "CPUINFO_MOCK=1")
350+
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE "CPUINFO_LOG_LEVEL=5")
351+
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE "CPUINFO_LOG_TO_STDIO=1")
359352
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
360353
TARGET_LINK_LIBRARIES(cpuinfo_mock PUBLIC ${CMAKE_THREAD_LIBS_INIT})
361354
TARGET_COMPILE_DEFINITIONS(cpuinfo_mock PRIVATE _GNU_SOURCE=1)
362355
ENDIF()
363-
TARGET_LINK_LIBRARIES(cpuinfo_mock PRIVATE clog)
364356

365357
IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7-a)$")
366358
ADD_EXECUTABLE(atm7029b-tablet-test test/mock/atm7029b-tablet.cc)

src/cpuinfo/log.h

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,103 @@
11
#pragma once
22

33
#include <inttypes.h>
4+
#include <stdarg.h>
5+
#include <stdlib.h>
46

5-
#include <clog.h>
7+
#ifndef CPUINFO_LOG_LEVEL
8+
#error "Undefined CPUINFO_LOG_LEVEL"
9+
#endif
610

7-
#define CPUINFO_LOG_DEBUG_PARSERS 0
11+
#define CPUINFO_LOG_NONE 0
12+
#define CPUINFO_LOG_FATAL 1
13+
#define CPUINFO_LOG_ERROR 2
14+
#define CPUINFO_LOG_WARNING 3
15+
#define CPUINFO_LOG_INFO 4
16+
#define CPUINFO_LOG_DEBUG 5
817

9-
#ifndef CPUINFO_LOG_LEVEL
10-
#define CPUINFO_LOG_LEVEL CLOG_ERROR
18+
#ifndef CPUINFO_LOG_DEBUG_PARSERS
19+
#define CPUINFO_LOG_DEBUG_PARSERS 0
20+
#endif
21+
22+
23+
#ifdef __cplusplus
24+
extern "C" {
25+
#endif
26+
27+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_DEBUG
28+
void cpuinfo_vlog_debug(const char* format, va_list args);
29+
#endif
30+
31+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_INFO
32+
void cpuinfo_vlog_info(const char* format, va_list args);
33+
#endif
34+
35+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_WARNING
36+
void cpuinfo_vlog_warning(const char* format, va_list args);
1137
#endif
1238

13-
CLOG_DEFINE_LOG_DEBUG(cpuinfo_log_debug, "cpuinfo", CPUINFO_LOG_LEVEL);
14-
CLOG_DEFINE_LOG_INFO(cpuinfo_log_info, "cpuinfo", CPUINFO_LOG_LEVEL);
15-
CLOG_DEFINE_LOG_WARNING(cpuinfo_log_warning, "cpuinfo", CPUINFO_LOG_LEVEL);
16-
CLOG_DEFINE_LOG_ERROR(cpuinfo_log_error, "cpuinfo", CPUINFO_LOG_LEVEL);
17-
CLOG_DEFINE_LOG_FATAL(cpuinfo_log_fatal, "cpuinfo", CPUINFO_LOG_LEVEL);
39+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_ERROR
40+
void cpuinfo_vlog_error(const char* format, va_list args);
41+
#endif
42+
43+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_FATAL
44+
void cpuinfo_vlog_fatal(const char* format, va_list args);
45+
#endif
46+
47+
#ifdef __cplusplus
48+
} // extern "C"
49+
#endif
50+
51+
#ifndef CPUINFO_LOG_ARGUMENTS_FORMAT
52+
#ifdef __GNUC__
53+
#define CPUINFO_LOG_ARGUMENTS_FORMAT __attribute__((__format__(__printf__, 1, 2)))
54+
#else
55+
#define CPUINFO_LOG_ARGUMENTS_FORMAT
56+
#endif
57+
#endif
58+
59+
CPUINFO_LOG_ARGUMENTS_FORMAT inline static void cpuinfo_log_debug(const char* format, ...) {
60+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_DEBUG
61+
va_list args;
62+
va_start(args, format);
63+
cpuinfo_vlog_debug(format, args);
64+
va_end(args);
65+
#endif
66+
}
67+
68+
CPUINFO_LOG_ARGUMENTS_FORMAT inline static void cpuinfo_log_info(const char* format, ...) {
69+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_INFO
70+
va_list args;
71+
va_start(args, format);
72+
cpuinfo_vlog_info(format, args);
73+
va_end(args);
74+
#endif
75+
}
76+
77+
CPUINFO_LOG_ARGUMENTS_FORMAT inline static void cpuinfo_log_warning(const char* format, ...) {
78+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_WARNING
79+
va_list args;
80+
va_start(args, format);
81+
cpuinfo_vlog_warning(format, args);
82+
va_end(args);
83+
#endif
84+
}
85+
86+
CPUINFO_LOG_ARGUMENTS_FORMAT inline static void cpuinfo_log_error(const char* format, ...) {
87+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_ERROR
88+
va_list args;
89+
va_start(args, format);
90+
cpuinfo_vlog_error(format, args);
91+
va_end(args);
92+
#endif
93+
}
94+
95+
CPUINFO_LOG_ARGUMENTS_FORMAT inline static void cpuinfo_log_fatal(const char* format, ...) {
96+
#if CPUINFO_LOG_LEVEL >= CPUINFO_LOG_FATAL
97+
va_list args;
98+
va_start(args, format);
99+
cpuinfo_vlog_fatal(format, args);
100+
va_end(args);
101+
#endif
102+
abort();
103+
}

0 commit comments

Comments
 (0)