1 /*
2     Copyright (c) 2005-2021 Intel Corporation
3 
4     Licensed under the Apache License, Version 2.0 (the "License");
5     you may not use this file except in compliance with the License.
6     You may obtain a copy of the License at
7 
8         http://www.apache.org/licenses/LICENSE-2.0
9 
10     Unless required by applicable law or agreed to in writing, software
11     distributed under the License is distributed on an "AS IS" BASIS,
12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13     See the License for the specific language governing permissions and
14     limitations under the License.
15 */
16 
17 #if __TBB_USE_ITT_NOTIFY
18 
19 #if _WIN32||_WIN64
20     #ifndef UNICODE
21         #define UNICODE
22     #endif
23 #else
24     #pragma weak dlopen
25     #pragma weak dlsym
26     #pragma weak dlerror
27 #endif /* WIN */
28 
29 #if __TBB_BUILD
30 
31 extern "C" void ITT_DoOneTimeInitialization();
32 #define __itt_init_ittlib_name(x,y) (ITT_DoOneTimeInitialization(), true)
33 
34 #elif __TBBMALLOC_BUILD
35 
36 extern "C" void MallocInitializeITT();
37 #define __itt_init_ittlib_name(x,y) (MallocInitializeITT(), true)
38 
39 #else
40 #error This file is expected to be used for either TBB or TBB allocator build.
41 #endif // __TBB_BUILD
42 
43 #include "tools_api/ittnotify_static.c"
44 
45 namespace tbb {
46 namespace detail {
47 namespace r1 {
48 
49 /** This extra proxy method is necessary since __itt_init_lib is declared as static **/
__TBB_load_ittnotify()50 int __TBB_load_ittnotify() {
51 #if !(_WIN32||_WIN64)
52     // tool_api crashes without dlopen, check that it's present. Common case
53     // for lack of dlopen is static binaries, i.e. ones build with -static.
54     if (dlopen == NULL)
55         return 0;
56 #endif
57     return __itt_init_ittlib(NULL,          // groups for:
58       (__itt_group_id)(__itt_group_sync     // prepare/cancel/acquired/releasing
59                        | __itt_group_thread // name threads
60                        | __itt_group_stitch // stack stitching
61                        | __itt_group_structure
62                            ));
63 }
64 
65 } //namespace r1
66 } //namespace detail
67 } // namespace tbb
68 
69 #endif /* __TBB_USE_ITT_NOTIFY */
70