<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }

                .term {
                        font: italic 16px verdana, sans-serif;
                        font-weight: normal;
                }

                .type {
                        font: normal 16px verdana, sans-serif !important;
                }

                .parameter {
                        font-style: italic;
                        }

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
                        padding-top: 10px;
                        padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }

                span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }

        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }

        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
                        margin-top: 10px;
            background-color: #FFF;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
                        font: normal 16px verdana, sans-serif;
        }

        div.refsect1 th {
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }

        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }

                  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }


        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
                        white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }

</style>
    <title>clCompileProgram</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clCompileProgram" />
  </head>
  <body>
    <div class="refentry">
      <a id="id-1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="clCompileProgram"></a>
        <h1>
            clCompileProgram
        </h1>
        <p>
            Compiles a program’s source for all the devices or a specific device(s) in the OpenCL context
                associated with <code xmlns="http://www.w3.org/1999/xhtml" class="varname">program</code>.
        </p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">
                    <a class="link" href="scalarDataTypes.html" target="pagedisplay">cl_int</a>
 <strong class="fsfunc">clCompileProgram</strong>
                (</code>
                <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_program</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">program</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">cl_uint</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">num_devices</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_device_id</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*device_list</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">char</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*options</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">cl_uint</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">num_input_headers</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">cl_program</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*input_headers</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">char</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">**header_include_names</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">(CL_CALLBACK *pfn_notify)(
    <a class="link" href="abstractDataTypes.html" target="pagedisplay">cl_program</a> program,
    <a class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> *user_data)</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*user_data</var><code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term"> <code class="varname"> program </code> </span>
            </dt>
            <dd>
              <p>
                       The program object that is the compilation target.
                    </p>
            </dd>
            <dt>
              <span class="term"> <code class="varname"> device_list </code> </span>
            </dt>
            <dd>
              <p>
                      A pointer to a list of devices associated with <code class="varname">program</code>. If
                      <code class="varname">device_list</code> is a NULL value, the compile is performed for
                      all devices associated with program.  If <code class="varname">device_list</code> is a
                      non-NULL value, the compile is performed for devices specified in this list.
                    </p>
            </dd>
            <dt>
              <span class="term"> <code class="varname"> num_devices </code> </span>
            </dt>
            <dd>
              <p>
                        The number of devices listed in <code class="varname">device_list</code>.
                    </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">options</code>
              </span>
            </dt>
            <dd>
              <p>
                      A pointer to a null-terminated string of characters that describes the
                      compilation options to be used for building the program executable. The
                      list of supported options is as described below.
                    </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">num_input_headers</code>
              </span>
            </dt>
            <dd>
              <p>
                      Specifies the number of programs that describe headers in the array
                      referenced by <code class="varname">input_headers</code>.
                    </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">input_headers</code>
              </span>
            </dt>
            <dd>
              <p>
                      An array of program embedded headers created with
                      <a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a>.
                    </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">header_include_names</code>
              </span>
            </dt>
            <dd>
              <p>
                      An array that has a one to one correspondence
                      with <code class="varname">input_headers</code>.  Each entry in
                      <code class="varname">header_include_names</code> specifies the include name used by
                      source in <code class="varname">program</code> that comes from an embedded header.
                      The corresponding entry in <code class="varname">input_headers</code> identifies the
                      program object which contains the header source to be used. The embedded
                      headers are first searched before the headers in the list of directories
                      specified by the –I compile option (as described in section 5.8.4.1).
                      If multiple entries in <code class="varname">header_include_names</code> refer to
                      the same header name, the first one encountered will be used.
                    </p>
            </dd>
            <dt>
              <span class="term"> <code class="varname"> pfn_notify </code> </span>
            </dt>
            <dd>
              <p>
                      A function pointer to a notification routine.  The notification routine
                      is a callback function that an application can register and which will
                      be called when the program executable has been built (successfully
                      or unsuccessfully).  If <code class="varname">pfn_notify</code> is not NULL,
                      <code class="function">clCompileProgram</code> does not need to wait for the
                      compiler to complete and can return immediately once the compilation
                      can begin.  The compilation can begin if the context, program whose
                      sources are being compiled, list of devices, input headers, programs
                      that describe input headers and compiler options specified are all
                      valid and appropriate host and device resources needed to perform
                      the compile are available.  If <code class="varname">pfn_notify</code> is NULL,
                      <code class="function">clCompileProgram</code> does not return until the compiler
                      has completed.  This callback function may be called asynchronously by
                      the OpenCL implementation.  It is the application’s responsibility to
                      ensure that the callback function is thread-safe.
                    </p>
            </dd>
            <dt>
              <span class="term"> <code class="varname"> user_data </code> </span>
            </dt>
            <dd>
              <p>
                      Passed as an argument when <code class="varname">pfn_notify</code> is
                      called. <code class="varname">user_data</code> can be NULL.
                    </p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1"><a id="notes"></a><h2>Notes</h2><p>
          Compiles a program’s source for all the devices or a specific device(s)
          in the OpenCL context associated with <code class="varname">program</code>.  The
          pre-processor runs before the program sources are compiled. The compiled
          binary is built for all devices associated with <code class="varname">program</code>
          or the list of devices specified. The compiled binary can be queried using
          <a class="citerefentry" href="clGetProgramInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetProgramInfo</span></span></a>(<code class="varname">program</code>,
          <code class="constant">CL_PROGRAM_BINARIES</code>, ...) and can be specified to
          <a class="citerefentry" href="clCreateProgramWithBinary.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithBinary</span></span></a>
          to create a new program object.
        </p><h4><a id="id-1.6.3"></a>Compiler Options</h4><p>
      The compiler options are categorized as pre-processor options, options for math intrinsics,
      options that control optimization and miscellaneous options. This specification defines
      a standard set of options that must be supported by the OpenCL C compiler when building
      program executables online or offline. These may be extended by a set of vendor- or
      platform specific options.
    </p><h4><a id="id-1.6.5"></a>Preprocessor Options</h4><p>
      These options control the OpenCL C preprocessor which is run on each program source before
      actual compilation.
    </p><p>
      -D options are processed in the order they are given in the 
      <code class="varname">options</code> argument to
      <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code>.
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">-D name</span></dt><dd><p>
                  Predefine <code class="varname">name</code> as a macro, with definition 1.
                </p></dd><dt><span class="term">-D name=definition</span></dt><dd><p>
                  The contents of <code class="varname">definition</code> are tokenized and processed as
                  if they appeared during translation phase three in a '#define' directive. In
                  particular, the definition will be truncated by embedded newline characters.
                </p></dd><dt><span class="term">-I dir</span></dt><dd><p>
                  Add the directory <code class="varname">dir</code> to the list of directories to be
                  searched for header files.
                </p></dd></dl></div><h4><a id="id-1.6.9"></a>Math Intrinsics Options</h4>

    These options control compiler behavior regarding floating-point arithmetic. These options trade
    off between speed and correctness.

    <div class="variablelist"><dl class="variablelist"><dt><span class="term">-cl-single-precision-constant</span></dt><dd><p>
                  Treat double precision floating-point constant as single precision constant.
                </p></dd><dt><span class="term">-cl-denorms-are-zero</span></dt><dd><p>
                  This option controls how single precision and double precision denormalized
                  numbers are handled. If specified as a build option, the single precision
                  denormalized numbers may be flushed to zero; double precision denormalized
                  numbers may also be flushed to zero if the optional extension for double
                  precsion is supported.  This is intended to be a performance hint and the
                  OpenCL compiler can choose not to flush denorms to zero if the device supports
                  single precision (or double precision) denormalized numbers.
                </p><p>
                  This option is ignored for single precision numbers if the
                  device does not support single precision denormalized numbers
                  i.e. <code class="constant">CL_FP_DENORM</code> bit is not set in
                  <code class="constant">CL_DEVICE_SINGLE_FP_CONFIG</code>.
                </p><p>
                  This option is ignored for double precision numbers if the device
                  does not support double precision or if it does support double
                  precison but not double precision denormalized 
                  numbers i.e. <code class="constant">CL_FP_DENORM</code> bit is not set in
                  <code class="constant">CL_DEVICE_DOUBLE_FP_CONFIG</code>.
                </p><p>
                  This flag only applies for scalar and vector single precision floating-point
                  variables and computations on these floating-point variables inside a
                  program. It does not apply to reading from or writing to image objects.
                </p></dd><dt><span class="term">-cl-fp32-correctly-rounded-divide-sqrt</span></dt><dd><p>
                  The <code class="code">-cl-fp32-correctly-rounded-divide-sqrt</code> build option to
                  <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code>
                  allows an application to specify that single precision floating-point divide
                  (x/y and 1/x) and sqrt used in the program source are correctly rounded.
                  If this build option is not specified, the minimum numerical accuracy of
                  single precision floating-point divide and sqrt are as defined in section
                  7.4 of the OpenCL specification.
                </p><p>
                  This build option can only be specified if the
                  <code class="constant">CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</code> is set
                  in <code class="constant">CL_DEVICE_SINGLE_FP_CONFIG</code> (as defined in
                  in the table of allowed values for <code class="varname">param_name</code> for
                  <a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>) for
                  devices that the program is being build.  <code class="function">clBuildProgram</code>
                  or <code class="function">clCompileProgram</code> will fail to compile the program for
                  a device if the <code class="code">-cl-fp32-correctly-rounded-divide-sqrt</code> option is specified
                  and <code class="constant">CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</code> is not set for
                  the device.
                </p></dd></dl></div><h4><a id="id-1.6.11"></a>Optimization Options</h4><p>
      These options control various sorts of optimizations. Turning on optimization flags
      makes the compiler attempt to improve the performance and/or code size at the expense of
      compilation time and possibly the ability to debug the program.
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">-cl-opt-disable</span></dt><dd><p>
                  This option disables all optimizations. The default is optimizations are enabled.
                </p></dd></dl></div><p>
      The following options control compiler behavior regarding floating-point arithmetic. These
      options trade off between performance and correctness and must be specifically enabled.
      These options are not turned on by default since it can result in incorrect output for
      programs which depend on an exact implementation of IEEE 754 rules/specifications for
      math functions.
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">-cl-mad-enable</span></dt><dd><p>
                  Allow <code class="code">a * b + c</code> to be replaced by a <code class="code">mad</code>. The
                  <code class="code">mad</code> computes <code class="code">a * b + c</code> with reduced accuracy. For
                  example, some OpenCL devices implement <code class="code">mad</code> as truncate the result
                  of <code class="code">a * b</code> before adding it to <code class="code">c</code>.
                </p></dd><dt><span class="term">-cl-no-signed-zeros</span></dt><dd><p>
                  Allow optimizations for floating-point arithmetic that ignore the signedness of
                  zero. IEEE 754 arithmetic specifies the distinct behavior of <code class="code">+0.0</code>
                  and <code class="code">-0.0</code> values, which then prohibits simplification of expressions
                  such as <code class="code">x+0.0</code> or <code class="code">0.0*x</code> (even with <code class="code">-clfinite-math</code>
                  only). This option implies that the sign of a zero result isn't significant.
                </p></dd><dt><span class="term">-cl-unsafe-math-optimizations</span></dt><dd><p>
                  Allow optimizations for floating-point arithmetic that (a) assume that
                  arguments and results are valid, (b) may violate IEEE 754 standard and (c)
                  may violate the OpenCL numerical compliance requirements as defined in section
                  7.4 for single precision and double precision floating-point, and edge case
                  behavior in section 7.5.  This option includes the <code class="code">-cl-no-signed-zeros</code> and
                  <code class="code">-cl-mad-enable</code> options.
                </p></dd><dt><span class="term">-cl-finite-math-only</span></dt><dd><p>
                  Allow optimizations for floating-point arithmetic that assume that arguments and
                  results are not NaNs or ±∞. This option may violate the OpenCL
                  numerical compliance requirements defined in section 7.4 for single precision
                  and double precision floating point, and edge case behavior in section 7.5.
                </p></dd><dt><span class="term">-cl-fast-relaxed-math</span></dt><dd><p>
                  Sets the optimization options <code class="code">-cl-finite-math-only</code> and
                  <code class="code">-cl-unsafe-math-optimizations</code>.  This allows optimizations for floating-point
                  arithmetic that may violate the IEEE 754 standard and the OpenCL numerical
                  compliance requirements defined in the specification in section 7.4 for
                  single-precision and double precision floating-point, and edge case
                  behavior in section 7.5. This option also relaxes the precision of commonly 
                    used math functions (refer to 
                    table 7.2 defined in section 7.4). 
                    This option causes the preprocessor macro
                  <code class="code">__FAST_RELAXED_MATH__</code> to be defined in the OpenCL program.
                </p></dd><dt><span class="term">-cl-uniform-work-group-size</span></dt><dd><p>
                    This requires that the global work-size be 
                    a multiple of the work-group size specified to 
                    <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>.
                    Allow optimizations that are made possible by this restriction.
                </p></dd></dl></div><h4><a id="id-1.6.16"></a>Options to Request or Suppress Warnings</h4>

    Warnings are diagnostic messages that report constructions which are not inherently erroneous
    but which are risky or suggest there may have been an error. The following language independent
    options do not enable specific warnings but control the kinds of diagnostics
    produced by the OpenCL compiler.

    <div class="variablelist"><dl class="variablelist"><dt><span class="term">-w</span></dt><dd><p>
                  Inhibit all warning messages.
                </p></dd><dt><span class="term">-Werror</span></dt><dd><p>
                  Make all warnings into errors.
                </p></dd></dl></div><h4><a id="id-1.6.18"></a>Options Controlling the OpenCL C Version</h4>

    The following option controls the version of OpenCL C that the compiler accepts.

    <div class="variablelist"><dl class="variablelist"><dt><span class="term">-cl-std=</span></dt><dd><p>
                  Determine the OpenCL C language version to use. A value for this option must
                  be provided. Valid values are:
                </p><p>
                  <code class="code">CL1.1</code> - Support all OpenCL C programs that use the OpenCL C language features
                  defined in section 6 of the OpenCL 1.1 specification.
                </p><p>
                  <code class="code">CL1.2</code> - Support all OpenCL C programs that use the OpenCL C language features
                  defined in section 6 of the OpenCL 1.2 specification.
                </p><p>
                  <code class="code">CL2.0</code> - Support all OpenCL C programs that use the OpenCL C language features
                  defined in section 6 of the OpenCL 2.0 specification.
                </p></dd></dl></div><p>
      Calls to <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code> with
      the <code class="code">-cl-std=CL1.1</code> option will fail to compile the program for any devices with
      <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code> = OpenCL C 1.0.  
    </p><p>
      Calls to <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code> with
      the <code class="code">-cl-std=CL1.2</code> option will fail to compile the program for any devices with
      <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code> = OpenCL C 1.0 or OpenCL C 1.1.
    </p><p>
      Calls to <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code> with
      the <code class="code">-cl-std=CL2.0</code> option will fail to compile the program for any devices with
      <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code> = OpenCL C 1.0, OpenCL C 1.1, or OpenCL C 1.2.
    </p><p>
        If the <code class="code">–cl-std</code> build option is not specified, the 
        highest OpenCL C 1.x language version supported 
        by each device is used when compiling the program 
        for each device. Applications are required 
        to specify the <code class="code">–cl-std=CL2.0</code> option if they want 
        to compile or build their programs with 
        OpenCL C 2.0.
    </p><h4><a id="id-1.6.24"></a>Options enabled by the cl_khr_spir extension</h4><div class="variablelist"><dl class="variablelist"><dt><span class="term">-x spir</span></dt><dd><p>
                    Indicates that the binary is in SPIR format.
                </p></dd></dl></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">-spir-std</span></dt><dd><p>
                    Specifies the version of the SPIR specification that 
                    describes the format and meaning of the binary. For 
                    example, if the binary is as described in 
                    SPIR version 1.2, then <code class="code">-spir-std=1.2</code> must 
                    be specified. Failing to specify these compile options 
                    may result in implementation defined behavior.
                </p></dd></dl></div><h4><a id="id-1.6.27"></a>Options for Querying Kernel Argument Information</h4><div class="variablelist"><dl class="variablelist"><dt><span class="term">-cl-kernel-arg-info</span></dt><dd><p>
                  This option allows the compiler to store information about the
                  arguments of a kernel(s) in the program executable.  The argument
                  information stored includes the argument name, its type,
                  the address and access qualifiers used.  Refer to description of
                  <a class="citerefentry" href="clGetKernelArgInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetKernelArgInfo</span></span></a>
                  on how to query this information.
                </p></dd></dl></div><h4><a id="id-1.6.29"></a>Options for debugging your program</h4><div class="variablelist"><dl class="variablelist"><dt><span class="term">-g</span></dt><dd><p>
                    This option can currently be used to generate 
                    additional errors for the built-in functions
                    that allow you to enqueue commands on a device 
                    (refer to section 6.13.17).
                </p></dd></dl></div><h4><a id="id-1.6.31"></a>Linker Options</h4>

    This specification defines a standard set of linker options that must be supported by the
    OpenCL C compiler when linking compiled programs online or offline. These linker options
    are categorized as library linking options and program linking options. These may be
    extended by a set of vendor- or platform-specific options.

    <h4><a id="id-1.6.32"></a>Library Linking Options</h4>

    The following options can be specified when creating a library of compiled binaries.

    <div class="variablelist"><dl class="variablelist"><dt><span class="term">-create-library</span></dt><dd><p>
                  Create a library of compiled binaries specified
                  in <code class="varname">input_programs</code> argument to
                  <a class="citerefentry" href="clLinkProgram.html"><span class="citerefentry"><span class="refentrytitle">clLinkProgram</span></span></a>.
                </p></dd><dt><span class="term">-enable-link-options</span></dt><dd><p>
                  Allows the linker to modify the library behavior based on one or more link
                  options (described in Program Linking Options, below) when this library is
                  linked with a program executable. This option must be specified with the
                  <code class="code">-create-library</code> option.
                </p></dd></dl></div><h4><a id="id-1.6.34"></a>Program Linking Options</h4>

    The following options can be specified when linking a program executable.

    <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="code">-cl-denorms-are-zero</code></li><li class="listitem" style="list-style-type: disc"><code class="code">-cl-no-signed-zeroes</code></li><li class="listitem" style="list-style-type: disc"><code class="code">-cl-unsafe-math-optimizations</code></li><li class="listitem" style="list-style-type: disc"><code class="code">-cl-finite-math-only</code></li><li class="listitem" style="list-style-type: disc"><code class="code">-cl-fast-relaxed-mat</code></li></ul></div>

    The linker may apply these options to all compiled program objects specified to
    <a class="citerefentry" href="clLinkProgram.html"><span class="citerefentry"><span class="refentrytitle">clLinkProgram</span></span></a>. The linker
    may apply these options only to libraries which were created with the 
    <code class="code">-enable-link-option</code>.

    <h4><a id="id-1.6.38"></a>Separate Compilation and Linking of Programs</h4><p>
      OpenCL programs are compiled and linked to support the following:
    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc">
          Separate compilation and link stages.  Program sources can be compiled to generate
          a compiled binary object and linked in a separate stage with other compiled program
          objects to the program exectuable.
        </li><li class="listitem" style="list-style-type: disc">
          Embedded headers.  In OpenCL 1.0 and 1.1, the <code class="code">-I</code> build option could be used to
          specify the list of directories to be searched for headers files that are included
          by a program source(s).  OpenCL 1.2 extends this by allowing the header sources to
          come from program objects instead of just header files.
        </li><li class="listitem" style="list-style-type: disc">
          Libraries.  The linker can be used to link compiled objects and libraries into a
          program executable or to create a library of compiled binaries.
        </li></ul></div></div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
          <code class="function">clCompileProgram</code> returns <span class="errorname">CL_SUCCESS</span> if
          the function is executed successfully. Otherwise, it returns one of the following errors:
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_PROGRAM</span> if <code class="varname">program</code> is not
              a valid program object.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">device_list</code>
              is NULL and <code class="varname">num_devices</code> is greater than zero, or if
              <code class="varname">device_list</code> is not NULL and <code class="varname">num_devices</code>
              is zero.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">num_input_headers</code> is
              zero and <code class="varname">header_include_names</code> or <code class="varname">input_headers</code>
              are not NULL or if <code class="varname">num_input_headers</code> is not zero and
              <code class="varname">header_include_names</code> or <code class="varname">input_headers</code> are NULL.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">pfn_notify</code> is NULL
              but <code class="varname">user_data</code> is not NULL.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DEVICE</span> if OpenCL devices listed in
              <code class="varname">device_list</code> are not in the list of devices associated with
              <code class="varname">program</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_COMPILER_OPTIONS</span> if the compiler options
              specified by <code class="varname">options</code> are invalid.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span> if the compilation or build of a program
              executable for any of the devices listed in <code class="varname">device_list</code>
              by a previous call to <code class="function">clCompileProgram</code> or
              <code class="function">clBuildProgram</code> for <code class="varname">program</code> has not completed.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_COMPILER_NOT_AVAILABLE</span> if a compiler is not
              available i.e.  <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code> specified
              in in the table of allowed values for <code class="varname">param_name</code> for
              <a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>
              is set to <code class="constant">CL_FALSE</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_COMPILE_PROGRAM_FAILURE</span> if there is a
              failure to compile the program source.  This error will be returned if
              <code class="function">clCompileProgram</code> does not return until the compile has
              completed.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span> if there are kernel objects attached
              to <code class="varname">program</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span> if <code class="varname">program</code>
              has no source i.e. it has not been created with
              <a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_RESOURCES</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the device.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_HOST_MEMORY</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the host.
            </li>
          </ul>
        </div>
      </div>
      <div class="refsect2">
        <a id="example1"></a>
        <h3>
            Example
        </h3>
        <p>
            For example, consider the following program source:
        </p>
        <div class="informaltable">
          <table border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
#include &lt;foo.h&gt;
#include &lt;mydir/myinc.h&gt;

__kernel void
image_filter (int n, int m,
            __constant float *filter_weights,
            __read_only image2d_t src_image,
            __write_only image2d_t dst_image)
{
...
}
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
          This kernel includes two headers foo.h and mydir/myinc.h. The following describes
          how these headers can be passed as embedded headers in program objects:
        </p>
        <div class="informaltable">
          <table border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
cl_program foo_pg = clCreateProgramWithSource(context,
                           1, &amp;foo_header_src, NULL, &amp;err);
cl_program myinc_pg = clCreateProgramWithSource(context,
                           1, &amp;myinc_header_src, NULL, &amp;err);

// let’s assume the program source described above is given
// by program_A and is loaded via clCreateProgramWithSource

cl_program input_headers[2] = { foo_pg, myinc_pg };
char * input_header_names[2] = { “foo.h”, “mydir/myinc.h” };
clCompileProgram(program_A,
                 0, NULL, // num_devices &amp; device_list
                 NULL,    // compile_options
                 2,       // num_input_headers
                 input_headers,
                 input_header_names,
                 NULL, NULL); // pfn_notify &amp; user_data
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />

            <a href="https://www.khronos.org/registry/cl/specs/opencl-2.0.pdf#page=189" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>,
            <a class="citerefentry" href="clLinkProgram.html"><span class="citerefentry"><span class="refentrytitle">clLinkProgram</span></span></a>,
            <a class="citerefentry" href="clBuildProgram.html"><span class="citerefentry"><span class="refentrytitle">clBuildProgram</span></span></a>,
            <a class="citerefentry" href="clCreateProgramWithBinary.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithBinary</span></span></a>,
            <a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2013 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.
</div>
    </div>
  </body>
</html>
