Upgrade macos

This commit is contained in:
Bassem Girgis
2025-03-19 08:52:56 -05:00
parent 53580cb51f
commit d29ef955f5
8041 changed files with 1936720 additions and 130842 deletions

View File

@@ -0,0 +1,301 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.5. Building fully-static PMIx applications &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="12. Developer’s guide" href="../developers/index.html" />
<link rel="prev" title="11.4. Deprecated Definitions" href="deprecation-warnings.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Building PMIx applications</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l2"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.5. Building fully-static PMIx applications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#is-fully-static-really-what-you-need">11.5.1. Is fully-static really what you need?</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#finding-dependent-shared-libraries-at-run-time">11.5.1.1. Finding dependent shared libraries at run-time</a></li>
<li class="toctree-l4"><a class="reference internal" href="#improving-filesystem-performance-at-scale">11.5.1.2. Improving filesystem performance at scale</a></li>
<li class="toctree-l4"><a class="reference internal" href="#other-reasons-fully-static-applications-are-bad">11.5.1.3. Other reasons fully-static applications are bad</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#building-fully-static-pmix-based-applications">11.5.2. Building fully-static PMIx-based applications</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#including-whole-archives">11.5.2.1. Including whole archives</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Building PMIx applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.5. </span>Building fully-static PMIx applications</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/building-static-apps.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="building-fully-static-pmix-applications">
<span id="label-building-fully-static-apps"></span><h1><span class="section-number">11.5. </span>Building fully-static PMIx applications<a class="headerlink" href="#building-fully-static-pmix-applications" title="Permalink to this heading"></a></h1>
<div class="section" id="is-fully-static-really-what-you-need">
<h2><span class="section-number">11.5.1. </span>Is fully-static really what you need?<a class="headerlink" href="#is-fully-static-really-what-you-need" title="Permalink to this heading"></a></h2>
<p>No one ends up in this documentation section by accident.</p>
<p>If you are reading this text, it is likely because you are looking to
solve a problem, and fully-static applications sound like the
right answer. There are two common problems that people think that
fully-static applications will solve:</p>
<ol class="arabic simple">
<li><p>Applications fail to launch because dependent shared libraries
are not found at run-time.</p></li>
<li><p>Filesystem performance when launching at scale is terrible.</p></li>
</ol>
<p>If either of these are your problems, the PMIx community <em>strongly
encourages you to use other mechanisms to fix the problem</em>:
fully-static applications are <em>possible</em>, but are sub-optimal for
other reasons.</p>
<p>The following sections discuss the above problems.</p>
<div class="section" id="finding-dependent-shared-libraries-at-run-time">
<h3><span class="section-number">11.5.1.1. </span>Finding dependent shared libraries at run-time<a class="headerlink" href="#finding-dependent-shared-libraries-at-run-time" title="Permalink to this heading"></a></h3>
<p>If you are running into problems finding shared libraries at run time
— particularly on nodes that are remote from where you have invoked
your launcher — your best bet is to set <code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> (or
equivalent mechanism) properly on <em>all</em> nodes (including remote
nodes).</p>
<p>This is an involved topic, but even so, it is generally simpler to
solve this problem than creating and maintaining static builds.</p>
</div>
<div class="section" id="improving-filesystem-performance-at-scale">
<h3><span class="section-number">11.5.1.2. </span>Improving filesystem performance at scale<a class="headerlink" href="#improving-filesystem-performance-at-scale" title="Permalink to this heading"></a></h3>
<p>Prior to v4.2.0, PMIx compiled a large number of plugins as
individual dynamic shared objects (DSOs) — i.e., individual
files in the filesystem. Many of these DSOs would be opened by each
application process at run time.</p>
<p>This could cause filesystem congestion, particularly when the application is
installed on a network filesystem and a large job is launched: many
nodes will simultaneously communicate with the file server(s), and
potentially need to transfer a large number of small(ish) files.</p>
<p>Starting with v4.2.0, by default, PMIx’s plugins are no longer
built as DSOs. As such, PMIx typically only opens a small number
of shared libraries at launch time. Even if PMIx is installed on
a network filesystem, these libraries are likely to be cached on nodes
over time, and therefore generate a fairly small amount network
filesystem traffic when PMIx-based jobs are launched.</p>
<p>In short: PMIx v5.0.5’s impact on network filesystems is
greatly diminished compared to prior versions. Compiling fully-static
applications to eliminate the open-every-DSO-file-at-launch-time
behavior is no longer necessary.</p>
</div>
<div class="section" id="other-reasons-fully-static-applications-are-bad">
<h3><span class="section-number">11.5.1.3. </span>Other reasons fully-static applications are bad<a class="headerlink" href="#other-reasons-fully-static-applications-are-bad" title="Permalink to this heading"></a></h3>
<p>Here are a few other reasons that fully-static applications are
sub-optimal:</p>
<ol class="arabic">
<li><p>When applications link all of their dependencies statically, the
operating system cannot share code between multiple copies of the
process.</p>
<p>For example, if you launch N copies of your fully-statically-linked
application on a node, it will consume (N *
size_of_the_application) bytes of RAM. Alternately, launching N
copies of a dynamically-linked MPI application — where each
of the copies have the same dependent libraries — will only
load each shared dependent library into RAM once.</p>
<p>In other words: <em>using dynamic linking saves memory.</em></p>
</li>
<li><p>If you disable PMIx’s <code class="docutils literal notranslate"><span class="pre">dlopen</span></code> functionality (which is
necessary to create <em>fully</em>-static MPI applications), you may
lose access to functionality that is dependent on third-party
libraries that cannot operate (or are not provided) as static
libraries. Note that your application also cannot use a
memory manager (such as most MPI libraries do by default).</p></li>
</ol>
<p>Are you convinced yet? <em>Please try to avoid building fully-static
applications if at all possible.</em></p>
</div>
</div>
<div class="section" id="building-fully-static-pmix-based-applications">
<h2><span class="section-number">11.5.2. </span>Building fully-static PMIx-based applications<a class="headerlink" href="#building-fully-static-pmix-based-applications" title="Permalink to this heading"></a></h2>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>If, after reading all of the above, you are still of the
mind that you want to build fully-static
applications, be aware that fully static linking is not
for the meek, and it is not recommended. But it is
possible, with some caveats.</p>
</div>
<ol class="arabic">
<li><p>You must have static libraries available for <em>everything</em> to which
your program links. This includes PMIx; you must have used the
<code class="docutils literal notranslate"><span class="pre">--enable-static</span></code> option to PMIx’s <code class="docutils literal notranslate"><span class="pre">configure</span></code> or otherwise
have available the static versions of the PMIx library.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Some Linux distributions may not have static versions of
popular Linux libraries by default (e.g., libnuma), or
require additional RPMs to be installed to get the
equivalent static libraries.</p>
</div>
</li>
<li><p>Your application must have been built without a memory manager.
For example, this means that Open MPI must have been configured with the
<code class="docutils literal notranslate"><span class="pre">--without-memory-manager</span></code> flag.</p>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Not including memory manager support can lead to
lower performance when using
OS-bypass networks.</p>
</div>
</li>
</ol>
<p>This is how to configure PMIx to build fully-static libraries on
Linux:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>./configure<span class="w"> </span>--disable-dlopen<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--enable-static<span class="w"> </span>--disable-shared<span class="w"> </span>...
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">--disable-shared</span></code> flag is optional; it will prevent PMIx
from <em>also</em> building shared libraries.</p>
<p>Alternatively, you could build PMIx with as many static libraries
as possible, but still preserve <code class="docutils literal notranslate"><span class="pre">dlopen</span></code> functionality by omitting
the <code class="docutils literal notranslate"><span class="pre">--disable-dlopen</span></code> flag:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>./configure<span class="w"> </span>--enable-static<span class="w"> </span>--disable-shared<span class="w"> </span>...
</pre></div>
</div>
<p>This gives you a <em>mostly</em> static build of PMIx, but has the
advantage of preserving at least some dynamic libraries.</p>
<div class="section" id="including-whole-archives">
<h3><span class="section-number">11.5.2.1. </span>Including whole archives<a class="headerlink" href="#including-whole-archives" title="Permalink to this heading"></a></h3>
<p>Some systems may have additional constraints about their support
libraries that require additional steps to produce working
fully-static PMIx-based applications. For example, any library that has its
own run-time plugin system (i.e., that opens dynamically shared
objects (“DSOs”) at run time) will have additional complications in
producing fully-static builds.</p>
<p>In such cases, you generally want to run <code class="docutils literal notranslate"><span class="pre">pmixcc</span> <span class="pre">...</span> <span class="pre">--showme</span></code> to see
the compiler / linker commands that PMIx’s wrapper commands will
use, and then augment those commands with linker arguments for the
static versions of the DSO plugins that you will need at run time.</p>
<p>For example, if you have <code class="docutils literal notranslate"><span class="pre">libfoo.a</span></code> that dynamically loads
<code class="docutils literal notranslate"><span class="pre">plugin.so</span></code> at run time, you’ll need to have a <code class="docutils literal notranslate"><span class="pre">plugin.a</span></code> and
— assuming the GNU linker — add arguments similar to the
following:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">-static</span></code>: Tell the linker to generate a static executable.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">-Wl,--whole-archive</span> <span class="pre">-lfoo</span> <span class="pre">/path/to/plugin.a</span> <span class="pre">-Wl,--no-whole-archive</span></code>:
Tell the linker to include the entire <code class="docutils literal notranslate"><span class="pre">foo</span></code> library and the entire
<code class="docutils literal notranslate"><span class="pre">plugin.a</span></code> archive in the executable.</p></li>
</ul>
<p>You can either add these arguments on the command line manually, or
you can <a class="reference internal" href="customizing-wrappers.html#label-customizing-wrapper-compiler"><span class="std std-ref">modify the default behavior of the wrapper compilers</span></a> to hide this complexity from end
users (but be aware that if you modify the wrapper compilers’ default
behavior, <em>all</em> users will be creating static applications!).</p>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="deprecation-warnings.html" class="btn btn-neutral float-left" title="11.4. Deprecated Definitions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../developers/index.html" class="btn btn-neutral float-right" title="12. Developer’s guide" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,228 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.2. Customizing wrapper compiler behavior &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.3. Extracting flags from the wrapper compilers" href="extracting-wrapper-flags.html" />
<link rel="prev" title="11.1. Quick start: Building PMIx-based applications" href="quickstart.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Building PMIx applications</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l2"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Building PMIx applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.2. </span>Customizing wrapper compiler behavior</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/customizing-wrappers.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="customizing-wrapper-compiler-behavior">
<span id="label-customizing-wrapper-compiler"></span><h1><span class="section-number">11.2. </span>Customizing wrapper compiler behavior<a class="headerlink" href="#customizing-wrapper-compiler-behavior" title="Permalink to this heading"></a></h1>
<p>The PMIx wrapper compiler is driven by text files that contain,
among other things, the flags that are passed to the underlying
compiler. The text file is generated automatically for PMIx
and is customized for the compiler set that was selected when PMIx
was configured; it is <em>not</em> recommended that users edit this
file.</p>
<p>However, there are cases where it may be necessary or desirable to
edit the file and add to or subtract from the flags that PMIx
selected. The file is installed in <code class="docutils literal notranslate"><span class="pre">$pkgdatadir</span></code>, which
defaults to <code class="docutils literal notranslate"><span class="pre">$prefix/share/pmix/pmixcc-wrapper-data.txt</span></code>.
Several environment variables are also available for run-time
replacement of the wrapper’s default values (from the text file):</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You may need to scroll right in the following table.</p>
</div>
<table class="docutils align-default">
<colgroup>
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
<col style="width: 14%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Wrapper compiler</p></th>
<th class="head"><p>Compiler</p></th>
<th class="head"><p>Preprocessor flags</p></th>
<th class="head"><p>Compiler flags</p></th>
<th class="head"><p>Linker flags</p></th>
<th class="head"><p>Linker library flags</p></th>
<th class="head"><p>Data file</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">mpmixcc</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PMIX_CC</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PMIX_CPPFLAGS</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PMIX_CFLAGS</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PMIX_LDFLAGS</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">PMIX_LIBS</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">pmixcc-wrapper-data.txt</span></code></p></td>
</tr>
</tbody>
</table>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>Note that changing the underlying compiler may not work
at all.</p>
<p>The traditional method of using multiple different compilers
with PMIx is to install PMIx multiple times; each
installation should be built/installed with a different compiler.
This is annoying, but it is beyond the scope of PMIx to be able
to fix.</p>
</div>
<p>Note that the values of these fields can be directly influenced by
passing flags to PMIx’s <code class="docutils literal notranslate"><span class="pre">configure</span></code> script. <a class="reference internal" href="../installing-pmix/configure-cli-options/installation.html#label-building-installation-cli-options"><span class="std std-ref">See this
section in the Installation guide</span></a> for
more details.</p>
<p>The files cited in the above table use fairly simplistic “key=value”
data formats. The following are several fields that are likely to be
of interest to end-users:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">project_short</span></code>: Prefix for all environment variables. See
below.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">compiler_env</span></code>: Specifies the base name of the environment
variable that can be used to override the wrapper’s underlying
compiler at run-time. The full name of the environment variable is
of the form <code class="docutils literal notranslate"><span class="pre">&lt;project_short&gt;_&lt;compiler_env&gt;</span></code>; see table above.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">compiler_flags_env</span></code>: Specifies the base name of the environment
variable that can be used to override the wrapper’s compiler flags
at run-time. The full name of the environment variable is of the
form <code class="docutils literal notranslate"><span class="pre">&lt;project_short&gt;_&lt;compiler_flags_env&gt;</span></code>; see table above.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">compiler</span></code>: The executable name of the underlying compiler.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">extra_includes</span></code>: Relative to <code class="docutils literal notranslate"><span class="pre">$installdir</span></code>, a list of directories
to also list in the preprocessor flags to find header files.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">preprocessor_flags</span></code>: A list of flags passed to the preprocessor.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">compiler_flags</span></code>: A list of flags passed to the compiler.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">linker_flags</span></code>: A list of flags passed to the linker.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">libs</span></code>: A list of libraries passed to the linker.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">required_file</span></code>: If non-empty, check for the presence of this file
before continuing. If the file is not there, the wrapper will abort
saying that the language is not supported.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">includedir</span></code>: Directory containing PMIx’s header files. The
proper compiler “include” flag is prepended to this directory and
added into the preprocessor flags.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">libdir</span></code>: Directory containing PMIx’s library files. The
proper compiler “include” flag is prepended to this directory and
added into the linker flags.</p></li>
</ul>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="quickstart.html" class="btn btn-neutral float-left" title="11.1. Quick start: Building PMIx-based applications" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="extracting-wrapper-flags.html" class="btn btn-neutral float-right" title="11.3. Extracting flags from the wrapper compilers" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.4. Deprecated Definitions &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.5. Building fully-static PMIx applications" href="building-static-apps.html" />
<link rel="prev" title="11.3. Extracting flags from the wrapper compilers" href="extracting-wrapper-flags.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Building PMIx applications</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Building PMIx applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.4. </span>Deprecated Definitions</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/deprecation-warnings.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="deprecated-definitions">
<h1><span class="section-number">11.4. </span>Deprecated Definitions<a class="headerlink" href="#deprecated-definitions" title="Permalink to this heading"></a></h1>
<p>The PMIx Standard will occasionally decide to deprecate and subsequently
remove attribute and constant definitions - and on rarer occasions, functional
APIs. The OpenPMIx library, however, maintains a policy of never actually
removing deprecated definitions. This is done with the intent of maintaining,
to the maximum extent possible, full backward compatibility.</p>
<p>Deprecated definitions are moved from their original header files to the
<cite>pmix_deprecated.h</cite> file to identify them as deprecated. While continuing
to be valid, users are encouraged to migrate away from these definitions
to remain in sync with the continued evolution of the PMIx Standard.</p>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="extracting-wrapper-flags.html" class="btn btn-neutral float-left" title="11.3. Extracting flags from the wrapper compilers" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="building-static-apps.html" class="btn btn-neutral float-right" title="11.5. Building fully-static PMIx applications" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,231 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.3. Extracting flags from the wrapper compilers &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.4. Deprecated Definitions" href="deprecation-warnings.html" />
<link rel="prev" title="11.2. Customizing wrapper compiler behavior" href="customizing-wrappers.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Building PMIx applications</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.3. Extracting flags from the wrapper compilers</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#using-the-showme-option">11.3.1. Using the <code class="docutils literal notranslate"><span class="pre">--showme</span></code> option</a></li>
<li class="toctree-l3"><a class="reference internal" href="#using-pkg-config">11.3.2. Using <code class="docutils literal notranslate"><span class="pre">pkg-config</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#using-pmix-info">11.3.3. Using <code class="docutils literal notranslate"><span class="pre">pmix_info</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Building PMIx applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.3. </span>Extracting flags from the wrapper compilers</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/extracting-wrapper-flags.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="extracting-flags-from-the-wrapper-compilers">
<h1><span class="section-number">11.3. </span>Extracting flags from the wrapper compilers<a class="headerlink" href="#extracting-flags-from-the-wrapper-compilers" title="Permalink to this heading"></a></h1>
<p>If you cannot use the wrapper compiler for some reason, there are
multiple supported ways to extract the compiler/linker flags that you
will need.</p>
<div class="section" id="using-the-showme-option">
<h2><span class="section-number">11.3.1. </span>Using the <code class="docutils literal notranslate"><span class="pre">--showme</span></code> option<a class="headerlink" href="#using-the-showme-option" title="Permalink to this heading"></a></h2>
<p>The wrapper compiler supports a <code class="docutils literal notranslate"><span class="pre">--showme</span></code> command line option
that will show what commands would have been invoked.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you pass <code class="docutils literal notranslate"><span class="pre">--showme</span></code> <em>and additional command line
parameters</em> to the wrapper compiler, be sure to <em>also</em> pass in a
filename. Otherwise, the <code class="docutils literal notranslate"><span class="pre">--showme</span></code> functionality will not
display output as expected.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>It is almost never a good idea to hard-code these results
in a <code class="docutils literal notranslate"><span class="pre">Makefile</span></code> (or other build system). It is almost always
best to run (for example) <code class="docutils literal notranslate"><span class="pre">pmixcc</span> <span class="pre">--showme:compile</span></code> in a dynamic
fashion to find out what you need. For example, GNU Make allows
running commands and assigning their results to variables:</p>
<div class="highlight-make notranslate"><div class="highlight"><pre><span></span><span class="nv">PMIX_COMPILE_FLAGS</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">$(</span>shell<span class="w"> </span>pmixcc<span class="w"> </span>--showme:compile<span class="k">)</span>
<span class="nv">PMIX_LINK_FLAGS</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">$(</span>shell<span class="w"> </span>pmixcc<span class="w"> </span>--showme:link<span class="k">)</span>
<span class="nf">my_app</span><span class="o">:</span><span class="w"> </span><span class="n">my_app</span>.<span class="n">c</span>
<span class="w"> </span><span class="k">$(</span>CC<span class="k">)</span><span class="w"> </span><span class="k">$(</span>PMIX_COMPILE_FLAGS<span class="k">)</span><span class="w"> </span>my_app.c<span class="w"> </span><span class="k">$(</span>PMIX_LINK_FLAGS<span class="k">)</span><span class="w"> </span>-o<span class="w"> </span>my_app
</pre></div>
</div>
</div>
</div>
<div class="section" id="using-pkg-config">
<h2><span class="section-number">11.3.2. </span>Using <code class="docutils literal notranslate"><span class="pre">pkg-config</span></code><a class="headerlink" href="#using-pkg-config" title="Permalink to this heading"></a></h2>
<p>Alternatively, PMIx also installs <code class="docutils literal notranslate"><span class="pre">pkg-config(1)</span></code> configuration
files under <code class="docutils literal notranslate"><span class="pre">$libdir/pkgconfig</span></code>. If <code class="docutils literal notranslate"><span class="pre">pkg-config</span></code> is configured to
find these files (e.g., if you add <code class="docutils literal notranslate"><span class="pre">$libdir/pkgconfig</span></code> — which
is usually <code class="docutils literal notranslate"><span class="pre">$prefix/lib/pkgconfig</span></code> — to the
<code class="docutils literal notranslate"><span class="pre">PKG_CONFIG_PATH</span></code> environment variable), then compiling / linking
PMIx programs can be performed like this:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span><span class="nb">export</span><span class="w"> </span><span class="nv">PKG_CONFIG_PATH</span><span class="o">=</span>/opt/pmix/lib/pkgconfig
shell$<span class="w"> </span>gcc<span class="w"> </span>hello_world.c<span class="w"> </span>-o<span class="w"> </span>hello_world<span class="w"> </span>-g<span class="w"> </span><span class="se">\</span>
<span class="w"> </span><span class="sb">`</span>pkg-config<span class="w"> </span>pmix<span class="w"> </span>--cflags<span class="w"> </span>--libs<span class="sb">`</span>
shell$
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>PMIx’s <code class="docutils literal notranslate"><span class="pre">pkg-config</span></code> file <em>works properly</em>, but it
probably isn’t <em>technically correct</em>.</p>
<p>Specifically: PMIx will list all of its dependent
libraries that are necessary to link PMIx-based application,
even if a given dependency has a <code class="docutils literal notranslate"><span class="pre">.pc</span></code> file and should
therefore be listed as a <code class="docutils literal notranslate"><span class="pre">Requires</span></code> and/or
<code class="docutils literal notranslate"><span class="pre">Requires.private</span></code> in PMIx’s <code class="docutils literal notranslate"><span class="pre">.pc</span></code> files.</p>
<p>For example, PMIx lists <code class="docutils literal notranslate"><span class="pre">-lhwloc</span></code> in both <code class="docutils literal notranslate"><span class="pre">Libs</span></code> and
<code class="docutils literal notranslate"><span class="pre">Libs.private</span></code>. But since HWLOC provides its own
<code class="docutils literal notranslate"><span class="pre">pmix.pc</span></code> file, it would be more correct for PMIx to
<em>not</em> list <code class="docutils literal notranslate"><span class="pre">-lhwloc</span></code> in <code class="docutils literal notranslate"><span class="pre">Libs</span></code> / <code class="docutils literal notranslate"><span class="pre">Libs.private</span></code>, and
instead include:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Requires</span><span class="p">:</span> <span class="n">hwloc</span>
<span class="n">Requires</span><span class="o">.</span><span class="n">private</span><span class="p">:</span> <span class="n">hwloc</span>
</pre></div>
</div>
<p>The end result is likely immaterial, but we document this
just in case it ever becomes an issue someday.</p>
</div>
</div>
<div class="section" id="using-pmix-info">
<h2><span class="section-number">11.3.3. </span>Using <code class="docutils literal notranslate"><span class="pre">pmix_info</span></code><a class="headerlink" href="#using-pmix-info" title="Permalink to this heading"></a></h2>
<p>This method is not directly suitable for getting all the compiler /
linker flags needed to compile PMIx-based applications because it does not
include the relevant flags to find PMIx’s headers and libraries.
But it does show a breakdown of all other flags.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>shell$ pmix_info --all | grep Build
Build CFLAGS:
Build LDFLAGS:
Build LIBS: -ldl -levent_core -levent_pthreads -lhwloc
</pre></div>
</div>
<p>This installation is <em>only</em> adding options in the <code class="docutils literal notranslate"><span class="pre">xLIBS</span></code> areas of the
wrapper compilers; all other values are blank (remember: the <code class="docutils literal notranslate"><span class="pre">-I</span></code>’s
and <code class="docutils literal notranslate"><span class="pre">-L</span></code>’s are implicit).</p>
<p>Note that the <code class="docutils literal notranslate"><span class="pre">--parsable</span></code> option can be used to obtain
machine-parsable versions of this output. For example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>shell$ ompi_info --all --parsable | grep option:build
option:build:cflags:
option:build:ldflags:
option:build:libs:-ldl -levent_core -levent_pthreads -lhwloc
</pre></div>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="customizing-wrappers.html" class="btn btn-neutral float-left" title="11.2. Customizing wrapper compiler behavior" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="deprecation-warnings.html" class="btn btn-neutral float-right" title="11.4. Deprecated Definitions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11. Building PMIx applications &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.1. Quick start: Building PMIx-based applications" href="quickstart.html" />
<link rel="prev" title="10. The Modular Component Architecture (MCA)" href="../mca.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">11. Building PMIx applications</a><ul>
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l2"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">11. </span>Building PMIx applications</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="building-pmix-applications">
<h1><span class="section-number">11. </span>Building PMIx applications<a class="headerlink" href="#building-pmix-applications" title="Permalink to this heading"></a></h1>
<p>The simplest way to compile and link PMIx applications is to use the
PMIx “wrapper” compilers.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l1"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l1"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l1"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../mca.html" class="btn btn-neutral float-left" title="10. The Modular Component Architecture (MCA)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="quickstart.html" class="btn btn-neutral float-right" title="11.1. Quick start: Building PMIx-based applications" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>11.1. Quick start: Building PMIx-based applications &mdash; OpenPMIx 5.0.5 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="11.2. Customizing wrapper compiler behavior" href="customizing-wrappers.html" />
<link rel="prev" title="11. Building PMIx applications" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
OpenPMIx
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../quickstart.html">1. Quick start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-help.html">2. Getting help</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes/index.html">3. Release notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../exceptions.html">4. Exceptions to the PMIx Standard</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installing-pmix/index.html">5. Building and installing PMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-things-work/index.html">6. How Things Work</a></li>
<li class="toctree-l1"><a class="reference internal" href="../release-notes.html">7. Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../history.html">8. History</a></li>
<li class="toctree-l1"><a class="reference internal" href="../versions.html">9. Version Numbers and Binary Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mca.html">10. The Modular Component Architecture (MCA)</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">11. Building PMIx applications</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">11.1. Quick start: Building PMIx-based applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="customizing-wrappers.html">11.2. Customizing wrapper compiler behavior</a></li>
<li class="toctree-l2"><a class="reference internal" href="extracting-wrapper-flags.html">11.3. Extracting flags from the wrapper compilers</a></li>
<li class="toctree-l2"><a class="reference internal" href="deprecation-warnings.html">11.4. Deprecated Definitions</a></li>
<li class="toctree-l2"><a class="reference internal" href="building-static-apps.html">11.5. Building fully-static PMIx applications</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developers/index.html">12. Developer’s guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">13. Contributing to OpenPMIx</a></li>
<li class="toctree-l1"><a class="reference internal" href="../license.html">14. License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security.html">15. OpenPMIx Security Policy</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news/index.html">16. News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../man/index.html">17. OpenPMIx manual pages</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">OpenPMIx</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html"><span class="section-number">11. </span>Building PMIx applications</a></li>
<li class="breadcrumb-item active"><span class="section-number">11.1. </span>Quick start: Building PMIx-based applications</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/building-apps/quickstart.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<style>
.wy-table-responsive table td,.wy-table-responsive table th{white-space:normal}
</style><div class="section" id="quick-start-building-pmix-based-applications">
<span id="label-quickstart-building-apps"></span><h1><span class="section-number">11.1. </span>Quick start: Building PMIx-based applications<a class="headerlink" href="#quick-start-building-pmix-based-applications" title="Permalink to this heading"></a></h1>
<p>Although this section skips many details, it offers examples that will
probably work in many environments.</p>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>Note that this section is a “Quick start” — it does
not attempt to be comprehensive or describe how to build PMIx
in all supported environments. The examples below may therefore
not work exactly as shown in your environment.</p>
<p>Please consult the other sections in this chapter for more details,
if necessary.</p>
</div>
<p>PMIx provides a “wrapper” compiler (<code class="docutils literal notranslate"><span class="pre">`pmixcc</span></code> &lt;man1-pmixcc&gt;`)that can be used for
compiling PMIx-based applications. The intent is that users can simply invoke the
PMIx wrapper compiler instead of their usual language compiler (e.g., <code class="docutils literal notranslate"><span class="pre">gcc</span></code>).
For example, instead of invoking your usual C compiler to build your
application, use <code class="docutils literal notranslate"><span class="pre">pmixcc</span></code>:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>shell$<span class="w"> </span>pmixcc<span class="w"> </span>hello_world_pmix.c<span class="w"> </span>-o<span class="w"> </span>hello_world_pmix
shell$
</pre></div>
</div>
<p>All the wrapper compiler does is add a variety of compiler and linker
flags to the command line and then invoke a back-end compiler. To be
specific: the wrapper compilers do not parse source code at all; they
are solely command-line manipulators, and have nothing to do with the
actual compilation or linking of programs. The end result is anI
executable that is properly linked to all the relevant libraries.</p>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>It is <em>absolutely not sufficient</em> to simply add <code class="docutils literal notranslate"><span class="pre">-lpmix</span></code>
to your link line and assume that you will obtain a valid
PMIx executable.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You should use the wrapper compiler provided by your higher-level
library instead of <code class="docutils literal notranslate"><span class="pre">pmix</span></code> if (a) your library provides a wrapper,
and (b) your library also uses PMIx (in which case, its wrapper
should not only include the necessary linkages, but also ensures
that your application and library are both using the <em>same</em> PMIx
library)</p>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="11. Building PMIx applications" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="customizing-wrappers.html" class="btn btn-neutral float-right" title="11.2. Customizing wrapper compiler behavior" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2014-2025, The OpenPMIx Community.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>