11#=========================== begin_copyright_notice ============================ 
22# 
3- # Copyright (C) 2021-2023  Intel Corporation 
3+ # Copyright (C) 2021-2025  Intel Corporation 
44# 
55# SPDX-License-Identifier: MIT 
66# 
77#============================ end_copyright_notice ============================= 
88
9- set (OPT_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_DEFAULT_ARG_OPT} )
10- 
119# Args: 
1210#   RES_LIST - generated list 
1311#   REQUIRED_TARGET - target to link with 
@@ -31,8 +29,9 @@ endfunction()
3129# Args: 
3230#   RES_FILE - variable name to put generated file path into. 
3331#   CMCL_SRC_PATH - multivalue. path to CMCL sources. 
34- #   BIF_NAME  - name for all the generated files without extension. 
32+ #   MANGLED_BIF_NAME  - name for all the generated files without extension. 
3533#   PTR_BIT_SIZE - bit size of a pointer, 32 or 64 are allowed. 
34+ #   OPAQUE_PTRS - use opaque pointers during the generation. 
3635# 
3736# Optional arguments: 
3837#   CLANG_INCLUDES - Argument representing extra include directories passed to 
@@ -41,7 +40,7 @@ endfunction()
4140#   DEPENDS - multivalue. Can be used to establish file-level dependency. 
4241#             Useful if we want to have a dependency from auto-generated files 
4342#             that are created by some other target(s). 
44- function (vc_build_bif TARGET   RES_FILE CMCL_SRC_PATH BIF_NAME  PTR_BIT_SIZE)
43+ function (vc_build_bif RES_FILE CMCL_SRC_PATH MANGLED_BIF_NAME  PTR_BIT_SIZE OPAQUE_PTRS )
4544  cmake_parse_arguments (PARSE_ARGV 4
4645                        EXTRA
4746                        "" 
@@ -51,12 +50,22 @@ function(vc_build_bif TARGET RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE)
5150  if ((NOT  (${PTR_BIT_SIZE}  EQUAL  32)) AND  (NOT  (${PTR_BIT_SIZE}  EQUAL  64)))
5251    message (FATAL_ERROR "vc_build_bif: wrong argument: PTR_BIT_SIZE = ${PTR_BIT_SIZE} : ptr size can only be 32 or 64" )
5352  endif ()
54-   set (MANGLED_BIF_NAME ${BIF_NAME}${PTR_BIT_SIZE} )
55-   set (BIF_CLANG_BC_NAME_FINAL ${MANGLED_BIF_NAME} .clang.bc)
53+   if  (OPAQUE_PTRS)
54+     set (OPT_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_ENABLE_OPT} )
55+     set (CLANG_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_ENABLE_CLANG} )
56+     set (OPAQUE_SUFFIX "opaque" )
57+     set (TARGET_NAME "${MANGLED_BIF_NAME} OpaquePtrs-BC" )
58+   else ()
59+     set (OPT_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_DISABLE_OPT} )
60+     set (CLANG_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_DISABLE_CLANG} )
61+     set (OPAQUE_SUFFIX "typed" )
62+     set (TARGET_NAME "${MANGLED_BIF_NAME} TypedPtrs-BC" )
63+   endif ()
64+   set (BIF_CLANG_BC_NAME_FINAL ${MANGLED_BIF_NAME} .${OPAQUE_SUFFIX} .clang.bc)
5665  set (BIF_CLANG_BC_PATH_FINAL ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CLANG_BC_NAME_FINAL} )
57-   set (BIF_CMCL_BC_NAME ${MANGLED_BIF_NAME} .cmcl.bc)
66+   set (BIF_CMCL_BC_NAME ${MANGLED_BIF_NAME} .${OPAQUE_SUFFIX} . cmcl.bc)
5867  set (BIF_CMCL_BC_PATH ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CMCL_BC_NAME} )
59-   set (BIF_OPT_BC_NAME ${MANGLED_BIF_NAME} .opt.bc)
68+   set (BIF_OPT_BC_NAME ${MANGLED_BIF_NAME} .${OPAQUE_SUFFIX} . opt.bc)
6069  set (BIF_OPT_BC_PATH ${CMAKE_CURRENT_BINARY_DIR} /${BIF_OPT_BC_NAME} )
6170
6271  if (EXTRA_DEPENDS)
@@ -80,30 +89,24 @@ function(vc_build_bif TARGET RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE)
8089    endif ()
8190    file (RELATIVE_PATH SRC_NAME ${CMAKE_CURRENT_SOURCE_DIR}  ${CMCL_SRC} )
8291    if  (LENGTH_CMCL_SRC_PATH GREATER  1)
83-       set (BIF_CLANG_BC_NAME ${SRC_NAME} .${PTR_BIT_SIZE} .clang.bc)
92+       set (BIF_CLANG_BC_NAME ${SRC_NAME} .${PTR_BIT_SIZE} .${OPAQUE_SUFFIX} . clang.bc)
8493    else ()
8594      set (BIF_CLANG_BC_NAME ${BIF_CLANG_BC_NAME_FINAL} )
8695    endif ()
8796    set (BIF_CLANG_BC_PATH ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CLANG_BC_NAME} )
8897    get_filename_component (BIF_CLANG_BC_PATH_DIR ${BIF_CLANG_BC_PATH}  DIRECTORY )
8998
90-     set (SPECIAL_CLANG_ARG "" )
91-     if  (OPT_OPAQUE_ARG)
92-       set (SPECIAL_CLANG_ARG -mllvm ${OPT_OPAQUE_ARG}  )
93-     endif ()
94- 
9599    add_custom_command (OUTPUT  "${BIF_CLANG_BC_PATH} " 
96100      COMMAND  ${CMAKE_COMMAND}  -E make_directory ${BIF_CLANG_BC_PATH_DIR} 
97101      COMMAND  clang-tool -cc1 ${CMCL_INCLUDES}  ${VC_INCLUDES} 
98-                ${EXTRA_CLANG_INCLUDES}  ${SPECIAL_CLANG_ARG}    ${IGC_BUILD__OPAQUE_POINTERS_DEFAULT_ARG_CLANG }  ${EXTRA_CLANG_FLAGS} 
102+                ${EXTRA_CLANG_INCLUDES}  ${CLANG_OPAQUE_ARG }  ${EXTRA_CLANG_FLAGS} 
99103               -x cl -cl-std=clc++ -triple=${SPIR_TARGET} 
100104               -O2 -disable-llvm-passes -discard-value -names  -emit-llvm-bc -o "${BIF_CLANG_BC_PATH} "  ${CMCL_SRC} 
101105      COMMENT  "vc_build_bif: Compiling CMCL source ${CMCL_SRC}  to BC ${BIF_CLANG_BC_NAME} " 
102106      DEPENDS  clang-tool "${CMCL_SRC} "  ${EXTRA_DEPENDS} 
103107      COMMAND_EXPAND_LISTS )
104108    list (APPEND  BC_PATH_LIST ${BIF_CLANG_BC_PATH} )
105109  endforeach ()
106-   
107110  set (OPT_BC_DEPENDS ${BC_PATH_LIST} )
108111  if  (LENGTH_CMCL_SRC_PATH GREATER  1)
109112    add_custom_command (OUTPUT  ${BIF_CLANG_BC_PATH_FINAL} 
@@ -113,15 +116,14 @@ function(vc_build_bif TARGET RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE)
113116      COMMAND_EXPAND_LISTS )
114117    set (OPT_BC_DEPENDS ${BIF_CLANG_BC_PATH_FINAL} )
115118  endif ()
116-   
117119  add_custom_command (
118120    OUTPUT  ${BIF_OPT_BC_PATH} 
119121    COMMENT  "vc_build_bif: Translating CMCL builtins:  ${BIF_CLANG_BC_NAME_FINAL}  -> ${BIF_OPT_BC_NAME} " 
120122    COMMAND  CMCLTranslatorTool ${OPT_OPAQUE_ARG}  -o ${BIF_CMCL_BC_PATH}  ${BIF_CLANG_BC_PATH_FINAL} 
121123    COMMAND  ${LLVM_OPT_EXE}  ${OPT_OPAQUE_ARG}  --O2 -o ${BIF_OPT_BC_PATH}  ${BIF_CMCL_BC_PATH} 
122124    DEPENDS  CMCLTranslatorTool ${LLVM_OPT_EXE}  ${OPT_BC_DEPENDS} )
123125
124-   add_custom_target (${TARGET } 
126+   add_custom_target (${TARGET_NAME } 
125127    DEPENDS  ${BIF_OPT_BC_PATH} 
126128    SOURCES  ${CMCL_SRC_PATH} )
127129  set (${RES_FILE}  ${BIF_OPT_BC_PATH}  PARENT_SCOPE)
@@ -137,9 +139,16 @@ endfunction()
137139#   RES_FILE - variable name to put generated file path into. 
138140#   BIF_OPT_BC_PATH  - path to the binary data that needs to be embedded. 
139141#   MANGLED_BIF_NAME - the desired name for the embeddable source file. 
142+ #   OPAQUE_PTRS - use opaque pointers during the generation. 
140143# Path to resulting CPP source code is stored in the specified cmake variable. 
141- function (vc_generate_embeddable_source TARGET  RES_FILE BIF_OPT_BC_PATH MANGLED_BIF_NAME)
142-   set (BIF_CPP_NAME ${MANGLED_BIF_NAME} .cpp)
144+ function (vc_generate_embeddable_source RES_FILE BIF_OPT_BC_PATH MANGLED_BIF_NAME OPAQUE_PTRS)
145+   if  (OPAQUE_PTRS)
146+     set (BIF_CPP_NAME "${MANGLED_BIF_NAME} .opaque.cpp" )
147+     set (TARGET_NAME "${MANGLED_BIF_NAME} OpaquePtrs" )
148+   else ()
149+     set (BIF_CPP_NAME "${MANGLED_BIF_NAME} .typed.cpp" )
150+     set (TARGET_NAME "${MANGLED_BIF_NAME} TypedPtrs" )
151+   endif ()
143152  set (BIF_CPP_PATH ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CPP_NAME} )
144153  file (RELATIVE_PATH BIF_OPT_BC_NAME ${CMAKE_CURRENT_BINARY_DIR}  ${BIF_OPT_BC_PATH} )
145154  set (BIF_SYMBOL ${MANGLED_BIF_NAME} RawData)
@@ -150,7 +159,7 @@ function(vc_generate_embeddable_source TARGET RES_FILE BIF_OPT_BC_PATH MANGLED_B
150159    COMMAND  ${PYTHON_EXECUTABLE}  ${RESOURCE_EMBEDDER_SCRIPT}  ${BIF_OPT_BC_PATH}  ${BIF_CPP_PATH}  ${BIF_SYMBOL}  no_attr
151160    DEPENDS  ${PYTHON_EXECUTABLE}  ${RESOURCE_EMBEDDER_SCRIPT}  ${BIF_OPT_BC_PATH} )
152161
153-   add_custom_target (${TARGET } 
162+   add_custom_target (${TARGET_NAME } 
154163    DEPENDS  ${BIF_CPP_PATH} )
155164  set (${RES_FILE}  ${BIF_CPP_PATH}  PARENT_SCOPE)
156165endfunction ()
@@ -172,25 +181,34 @@ endfunction()
172181#   RES_FILE - variable name to put generated file path into. 
173182#   BIF_OPT_BC_PATH  - path to generic library (in a form of bitcode). 
174183#   MANGLED_BIF_NAME - the desired name for the generated source file. 
184+ #   OPAQUE_PTRS - use opaque pointers during the generation. 
175185# Path to resulting CPP source code is stored in the specified cmake variable. 
176- function (vc_generate_optimized_bif TARGET  RES_FILE BIF_OPT_BC_PATH MANGLED_BIF_NAME)
177-   set (BIF_CPP_NAME ${MANGLED_BIF_NAME} .cpp)
186+ function (vc_generate_optimized_bif RES_FILE BIF_OPT_BC_PATH MANGLED_BIF_NAME OPAQUE_PTRS)
187+   if  (OPAQUE_PTRS)
188+     set (OPT_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_ENABLE_OPT} )
189+     set (OPAQUE_SUFFIX "opaque" )
190+     set (TARGET_NAME "${MANGLED_BIF_NAME} OpaquePtrs" )
191+   else ()
192+     set (OPT_OPAQUE_ARG ${IGC_BUILD__OPAQUE_POINTERS_DISABLE_OPT} )
193+     set (OPAQUE_SUFFIX "typed" )
194+     set (TARGET_NAME "${MANGLED_BIF_NAME} TypedPtrs" )
195+   endif ()
196+   set (BIF_CPP_NAME ${MANGLED_BIF_NAME} .${OPAQUE_SUFFIX} .cpp)
178197  set (BIF_CPP_PATH ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CPP_NAME} )
179198  set (BIF_SYMBOL ${MANGLED_BIF_NAME} RawData)
180-   set (BIF_CONF_NAME "${MANGLED_BIF_NAME} .conf" )
199+   set (BIF_CONF_NAME "${MANGLED_BIF_NAME} .${OPAQUE_SUFFIX} . conf" )
181200  set (BIF_CONF_PATH  ${CMAKE_CURRENT_BINARY_DIR} /${BIF_CONF_NAME} )
182201  set (PLTF_BC_PATH_LIST "" )
183202
184- 
185203  foreach (PLTF IN LISTS SUPPORTED_VC_PLATFORMS)
186-     set (PLTF_BC_NAME "${MANGLED_BIF_NAME} _${PLTF} .vccg.bc" )
204+     set (PLTF_BC_NAME "${MANGLED_BIF_NAME} _${PLTF} .${OPAQUE_SUFFIX} . vccg.bc" )
187205    set (PLTF_BC_PATH ${CMAKE_CURRENT_BINARY_DIR} /${PLTF_BC_NAME} )
188206    add_custom_command (
189207      OUTPUT  ${PLTF_BC_PATH} 
190208      COMMENT  "vc_generate_optimized_bif: compile optimized BiF for ${PLTF} " 
191209      COMMAND  ${VCB_EXE}  ${OPT_OPAQUE_ARG}  -o ${PLTF_BC_PATH}  -cpu ${PLTF}  ${BIF_OPT_BC_PATH} 
192210      DEPENDS  ${VCB_EXE}  ${BIF_OPT_BC_PATH} )
193-     add_custom_target ("${TARGET } -${PLTF} -BC" 
211+     add_custom_target ("${TARGET_NAME } -${PLTF} -BC" 
194212        DEPENDS  ${PLTF_BC_PATH} )
195213    list (APPEND  PLTF_BC_PATH_LIST ${PLTF_BC_PATH} )
196214  endforeach ()
@@ -202,7 +220,7 @@ function(vc_generate_optimized_bif TARGET RES_FILE BIF_OPT_BC_PATH MANGLED_BIF_N
202220      COMMENT  "vc_generate_optimized_bif: create hashed version of optimized functions" 
203221      COMMAND  ${VCB_EXE}  -BiFUnique -symb ${BIF_SYMBOL}  -o ${BIF_CPP_PATH}  ${BIF_CONF_PATH} 
204222      DEPENDS  ${VCB_EXE}  ${BIF_CONF_PATH}  ${PLTF_BC_PATH_LIST} )
205-   add_custom_target (${TARGET } 
223+   add_custom_target (${TARGET_NAME } 
206224      DEPENDS  ${BIF_CPP_PATH} )
207225  set (${RES_FILE}  ${BIF_CPP_PATH}  PARENT_SCOPE)
208226endfunction ()
@@ -211,19 +229,18 @@ endfunction()
211229# containing the resulting LLVM bitcode (as a C array). 
212230# See vc_build_bif and vc_generate_embeddable_source for more details. 
213231# Path to resulting CPP source code is stored in the specified cmake variable. 
214- function (vc_embed_bif RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE)
215- 
216-     cmake_parse_arguments (PARSE_ARGV 4
232+ function (vc_embed_bif RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE OPAQUE_PTRS)
233+     cmake_parse_arguments (PARSE_ARGV 5
217234                          EXTRA
218235                          "" 
219236                          "CLANG_INCLUDES;CLANG_FLAGS" 
220237                          "DEPENDS" )
221238    set (MANGLED_BIF_NAME ${BIF_NAME}${PTR_BIT_SIZE} )
222-     vc_build_bif("${BIF_NAME}${PTR_BIT_SIZE}  -BC"   RES_FILE_VC_EMBED  "${CMCL_SRC_PATH } "  "${BIF_NAME } "  "${PTR_BIT_SIZE } " 
239+     vc_build_bif(RES_FILE_VC_EMBED  "${CMCL_SRC_PATH}  "    "${MANGLED_BIF_NAME } "  "${PTR_BIT_SIZE } "  "${OPAQUE_PTRS } " 
223240        CLANG_INCLUDES "${EXTRA_CLANG_INCLUDES} " 
224241        CLANG_FLAGS "${EXTRA_CLANG_FLAGS} " 
225242        DEPENDS  "${EXTRA_DEPENDS} " )
226-     vc_generate_embeddable_source("${BIF_NAME}${PTR_BIT_SIZE}  "   RES_FILE_EMBED_GEN  "${RES_FILE_VC_EMBED } "  "${MANGLED_BIF_NAME } " )
243+     vc_generate_embeddable_source(RES_FILE_EMBED_GEN  "${RES_FILE_VC_EMBED}  "    "${MANGLED_BIF_NAME } "  "${OPAQUE_PTRS } " )
227244    set (${RES_FILE}  ${RES_FILE_EMBED_GEN}  PARENT_SCOPE)
228245endfunction ()
229246
@@ -232,10 +249,9 @@ endfunction()
232249# platform-optimized version of the emulation library during the runtime. 
233250# See vc_build_bif and vc_generate_optimized_bif for details 
234251# Path to resulting CPP source code is stored in the specified cmake variable. 
235- function (vc_embed_optimized_bif RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE)
252+ function (vc_embed_optimized_bif RES_FILE CMCL_SRC_PATH BIF_NAME PTR_BIT_SIZE OPAQUE_PTRS )
236253    set (MANGLED_BIF_NAME ${BIF_NAME}${PTR_BIT_SIZE} )
237-     vc_build_bif("${BIF_NAME}${PTR_BIT_SIZE} -BC"  RES_FILE_VC_EMBED "${CMCL_SRC_PATH} "  "${BIF_NAME} "  "${PTR_BIT_SIZE} " )
238-     vc_generate_optimized_bif("${BIF_NAME}${PTR_BIT_SIZE} "  RES_FILE_EMBED_GEN "${RES_FILE_VC_EMBED} " 
239-         "${MANGLED_BIF_NAME} " )
254+     vc_build_bif(RES_FILE_VC_EMBED "${CMCL_SRC_PATH} "  "${BIF_NAME} "  "${PTR_BIT_SIZE} "  "${OPAQUE_PTRS} " )
255+     vc_generate_optimized_bif(RES_FILE_EMBED_GEN "${RES_FILE_VC_EMBED} "  "${MANGLED_BIF_NAME} "  "${OPAQUE_PTRS} " )
240256    set (${RES_FILE}  ${RES_FILE_EMBED_GEN}  PARENT_SCOPE)
241257endfunction ()
0 commit comments