<?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.6.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 options argument to
      <code class="function">clBuildProgram</code> or 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 <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 -cl-fp32-correctly-rounded-divide-sqrt 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 -cl-fp32-correctly-rounded-divide-sqrt 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 -clfinite-math
                  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 -cl-no-signed-zeros and
                  -cl-mad-enable 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 -cl-finite-math-only and
                  -cl-unsafe-math-optimizations.  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 causes the preprocessor macro
                  <code class="code">__FAST_RELAXED_MATH__</code> to be defined in the OpenCL program.
                </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 languageindependent
    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>
                  CL1.1 - Support all OpenCL C programs that use the OpenCL C language features
                  defined in section 6 of the OpenCL 1.1 specification.
                </p><p>
                  CL1.2 – Support all OpenCL C programs that use the OpenCL C language features
                  defined in section 6 of the OpenCL 1.2 specification.
                </p></dd></dl></div><p>
      Calls to <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code>
      with the -cl-std=CL1.1 option will fail to compile the program for any devices
      with <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code> = OpenCL C 1.0.  Calls to
      <code class="function">clBuildProgram</code> or <code class="function">clCompileProgram</code> with
      the -cl-std=CL1.2 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>
      If the -cl-std build option is not specified, the
      <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code> is used to select the version of OpenCL
      C to be used when compiling the program for each device.
    </p><h4><a id="id-1.6.22"></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.24"></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.25"></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
                  –create-library option.
                </p></dd></dl></div><h4><a id="id-1.6.27"></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"> -cl-denorms-are-zero </li><li class="listitem" style="list-style-type: disc"> -cl-no-signed-zeroes </li><li class="listitem" style="list-style-type: disc"> -cl-unsafe-math-optimizations </li><li class="listitem" style="list-style-type: disc"> -cl-finite-math-only </li><li class="listitem" style="list-style-type: disc"> -cl-fast-relaxed-mat </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 –enable-link-option.

    <h4><a id="id-1.6.30"></a>Separate Compilation and Linking of Programs</h4><p>
      OpenCL 1.2 extends how 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 –I 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 binarie
        </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  program
              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="http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf#page=139" 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>
        </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-2011 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>
