Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,36 @@ jobs:
# doesn't work in case of CMake + VS (https://github.com/fortran-lang/setup-fortran/issues/45)
run: python buildall.py --force_bits 64 -ft ${{ matrix.optional_args }}

refcol_smoke:
name: Reference collector smoke test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
lib: build_linux/64/bin/libittnotify_refcol.so
exe: build_linux/64/bin/refcol_smoke_test
build_dir: build_linux/64
- os: windows-latest
lib: build_win/64/bin/libittnotify_refcol.dll
exe: build_win/64/bin/refcol_smoke_test.exe
build_dir: build_win/64
defaults:
run:
shell: bash
steps:
- name: Checkout sources
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build reference collector library
run: python buildall.py --force_bits 64 --refcol ${{ runner.os == 'Windows' && '--cmake_gen ninja' || '' }}
- name: Build smoke test
run: |
cmake ${{ matrix.build_dir }} -DITT_API_REFCOL_SMOKE_TESTS=ON
cmake --build ${{ matrix.build_dir }} --target refcol_smoke_test
- name: Run smoke test
run: python src/ittnotify_refcol/tests/run_smoke_test.py --lib ${{ matrix.lib }} --exe ${{ matrix.exe }}

cpp_wrapper:
name: Check C++ wrapper
runs-on: ${{ matrix.os }}
Expand Down
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ option(FORCE_32 "Force a 32-bit compile on 64-bit" OFF)
option(ITT_API_IPT_SUPPORT "ptmarks support" OFF)
option(ITT_API_FORTRAN_SUPPORT "fortran support" OFF)
option(ITT_API_CPP_SUPPORT "C++ wrapper support" OFF)
option(ITT_API_REFERENCE_COLLECTOR "Build reference collector shared library" OFF)
option(ITT_API_INSTALL "Enable ITT API installation rules" ON)

if(FORCE_32 AND UNIX)
Expand Down Expand Up @@ -141,6 +142,10 @@ add_library(ittapi::ittnotify ALIAS ittnotify)
set(JITPROFILING_SRC "src/ittnotify/jitprofiling.c")
add_library(jitprofiling STATIC ${JITPROFILING_SRC})

if(ITT_API_REFERENCE_COLLECTOR)
Comment thread
alexey-kireev marked this conversation as resolved.
add_subdirectory(src/ittnotify_refcol)
endif()

if(WIN32)
set_target_properties(ittnotify PROPERTIES OUTPUT_NAME libittnotify)
set_target_properties(jitprofiling PROPERTIES OUTPUT_NAME libjitprofiling)
Expand Down
5 changes: 4 additions & 1 deletion buildall.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ def main():
"-ft", "--fortran", help="enable fortran support", action="store_true")
parser.add_argument(
"-cpp", "--cpp", help="enable C++ wrapper support", action="store_true")
parser.add_argument(
"--refcol", help="enable reference collector build", action="store_true")
parser.add_argument(
"--force_bits", choices=["32", "64"], help="specify bit version for the target")
if sys.platform == 'win32' and vs_versions:
Expand Down Expand Up @@ -180,7 +182,8 @@ def main():
('-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON' if args.verbose else ''),
("-DITT_API_IPT_SUPPORT=1" if args.ptmark else ""),
("-DITT_API_FORTRAN_SUPPORT=1" if args.fortran else ""),
("-DITT_API_CPP_SUPPORT=ON" if args.cpp else "")
("-DITT_API_CPP_SUPPORT=ON" if args.cpp else ""),
("-DITT_API_REFERENCE_COLLECTOR=ON" if args.refcol else ""),
])))

if sys.platform == 'win32':
Expand Down
34 changes: 34 additions & 0 deletions src/ittnotify_refcol/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
add_library(ittnotify_refcol SHARED itt_refcol_impl.c)

target_include_directories(ittnotify_refcol
PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
PRIVATE ${CMAKE_SOURCE_DIR}/src/ittnotify
)

target_link_libraries(ittnotify_refcol PRIVATE ${CMAKE_DL_LIBS})
set_target_properties(ittnotify_refcol PROPERTIES
LINKER_LANGUAGE C
RUNTIME_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})

if(WIN32)
target_compile_definitions(ittnotify_refcol PRIVATE _CRT_SECURE_NO_WARNINGS)
set_target_properties(ittnotify_refcol PROPERTIES
OUTPUT_NAME libittnotify_refcol
PREFIX ""
WINDOWS_EXPORT_ALL_SYMBOLS ON)
else()
set_target_properties(ittnotify_refcol PROPERTIES OUTPUT_NAME ittnotify_refcol)
endif()

option(ITT_API_REFCOL_SMOKE_TESTS "Build reference collector smoke tests" OFF)
if(ITT_API_REFCOL_SMOKE_TESTS)
add_executable(refcol_smoke_test tests/smoke_test.c)
target_include_directories(refcol_smoke_test
PRIVATE ${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src/ittnotify
)
target_link_libraries(refcol_smoke_test PRIVATE ittnotify ${CMAKE_DL_LIBS})
set_target_properties(refcol_smoke_test PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH})
endif()
14 changes: 0 additions & 14 deletions src/ittnotify_refcol/Makefile

This file was deleted.

47 changes: 40 additions & 7 deletions src/ittnotify_refcol/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,52 @@ performs tracing data from ITT API function calls to log files.

To use this solution, build the collector as a shared library and point the
full library path to the `INTEL_LIBITTNOTIFY64` or `INTEL_LIBITTNOTIFY32`
environment variable:
environment variable.

**On Linux**
## Building

### CMake (all platforms, recommended)

```
cmake <repo_root> -DITT_API_REFERENCE_COLLECTOR=ON
cmake --build .
```

The shared library is placed in the `bin/` subdirectory of the CMake build
directory. Alternatively, use the provided `buildall.py` script:

```
python buildall.py --refcol
```

### Make (Linux / FreeBSD)

```
make
export INTEL_LIBITTNOTIFY64=<build_dir>/libittnotify_refcol.so
```
Comment on lines +26 to +30

## Usage

**On Linux**

```
export INTEL_LIBITTNOTIFY64=<build_dir>/bin/libittnotify_refcol.so
```

**On FreeBSD**

```
make
setenv INTEL_LIBITTNOTIFY64 <build_dir>/libittnotify_refcol.so
setenv INTEL_LIBITTNOTIFY64 <build_dir>/bin/libittnotify_refcol.so
```

**On Windows**

```
set INTEL_LIBITTNOTIFY64=<build_dir>\bin\libittnotify_refcol.dll
```

By default, log files save in the `tmp` directory. To change the location,
use the `INTEL_LIBITTNOTIFY_LOG_DIR` environment variable:
By default, log files are saved in the system temporary directory. To change
the location, use the `INTEL_LIBITTNOTIFY_LOG_DIR` environment variable:

**On Linux**

Expand All @@ -35,6 +63,11 @@ export INTEL_LIBITTNOTIFY_LOG_DIR=<log_dir>
setenv INTEL_LIBITTNOTIFY_LOG_DIR <log_dir>
```

**On Windows**
```
set INTEL_LIBITTNOTIFY_LOG_DIR=<log_dir>
```

This implementation adds logging of some of the ITT API function calls. Adding
logging of other ITT API function calls is welcome. The solution provides 4
functions with different log levels that take `printf` format for logging:
Expand Down
Loading
Loading