code: def main(ctx, tmp_dir, cl_str, output=None, build_options=[]):
      device = ctx.devices[0]
      platform = device.platform
      if platform.name == "NVIDIA CUDA":
          supported_outputs = ["ptx", "sass"]
      elif platform.name == "Portable Computing Language":
          if device.name.startswith("NVIDIA"):
              supported_outputs = ["ptx", "sass"]
          elif device.name.startswith("pthread"):
              supported_outputs = ["asm"]
          else:
              raise NotImplementedError(
                  f"Unknown pocl device '{device.name}'"
              )
      else:
          raise NotImplementedError(f"Unknown opencl device '{device}'")
      if output is None:
          output = supported_outputs[0]
      else:
          assert output in supported_outputs
  
      prg = cl.Program(ctx, cl_str).build(
          options=build_options,
          cache_dir=os.path.join(tmp_dir, "cache"),
      )
  
      for binary in prg.binaries:
          if output in ["ptx", "sass"]:
              res = binary[binary.index(b"// Generated") :].decode(
                  "utf-8"
              )
              if output == "sass":
                  with open(os.path.join(tmp_dir, "cl.ptx"), "w") as f:
                      f.write(res)
                  tgt = re.findall(
                      ".target sm_[0-9]*", res, re.MULTILINE
                  )[0]
                  gpu_name = tgt[8:]
                  subprocess.check_call(
                      [
                          "ptxas",
                          "cl.ptx",
                          "--verbose",
                          f"--gpu-name={gpu_name}",
                          "--warn-on-spills",
                      ],
                      cwd=tmp_dir,
                  )
                  res = subprocess.check_output(
                      ["cuobjdump", "-sass", "elf.o"], cwd=tmp_dir
                  ).decode("utf-8")
  
          elif (
              output == "asm"
              and platform.name == "Portable Computing Language"
          ):
              so = glob.glob(f"{tmp_dir}/**/*.so", recursive=True)[0]
              res = subprocess.check_output(
                  ["objdump", "-d", so]
              ).decode("utf-8")
  
          print(res)
  
imports: import os
  import tempfile
  import subprocess
  import re
  import sys
  import glob
label_desc: Use image node_id 1 for calling a global function with example usage: main(ctx, tmp_dir, cl_str, output, build_options) without return types