168 lines
4.8 KiB
ReStructuredText
168 lines
4.8 KiB
ReStructuredText
=============
|
|
CMake Build
|
|
=============
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
Usage
|
|
=====
|
|
|
|
.. code-block:: bash
|
|
|
|
$ mkdir build
|
|
$ cd build
|
|
$ cmake ..
|
|
|
|
On my CentOs 6.3 linux system with a custom installation of boost, I
|
|
needed to invoke cmake with a special option as shown here to get
|
|
cmake to properly use the boost installation as referenced by the
|
|
environment variable :envvar:`BOOST_ROOT` or :envvar:`BOOST_DIR`.
|
|
|
|
.. code-block:: bash
|
|
|
|
$ cmake -D Boost_NO_BOOST_CMAKE=ON ..
|
|
|
|
On windows I invoked cmake using:
|
|
|
|
.. code-block:: bash
|
|
|
|
> cmake -G "Visual Studio 9 2008 Win64" ^
|
|
-D CMAKE_INSTALL_PREFIX=c:/pkg/x64-vc90 ^
|
|
-D CMAKE_PREFIX_PATH=c:/pkg/x64-vc90 ^
|
|
-D CMAKE_CONFIGURATION_TYPES="Debug;Release" ^
|
|
..
|
|
|
|
Once you have the cmake generated build files you may build
|
|
Boost.NumPy. On linux you may build it using:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ make
|
|
$ make install
|
|
|
|
On windows you may build it using:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ cmake --build . --config release
|
|
$ cmake --build . --config release --target install
|
|
|
|
Note: You need to make sure that the cmake generator you use is
|
|
compatible with your python installation. The cmake scripts try to be
|
|
helpful, but the verification logic is incomplete. On both Linux and
|
|
Windows, I am using the 64-bit python from Enthought. On windows it is
|
|
built using Visual Studio 2008. I have also successfully used Visual
|
|
Studio 2010 for Boost.NumPy extension modules, but the VS 2010
|
|
generated executables that embed python do not run because of an
|
|
apparent conflict with the runtimes.
|
|
|
|
The build artifacts get installed to ``${CMAKE_INSTALL_PREFIX}``
|
|
:file:`include` :file:`lib` and :file:`boost.numpy` where the first
|
|
two are the conventional locations for header files and libraries (aka
|
|
archives, shared objects, DLLs). The last one :file:`boost.numpy` is
|
|
my guess at how to install the tests and examples in a place that is
|
|
useful. But it is likely that this will need to be tweaked once other
|
|
people start using it. Here is an outline of the installed files.
|
|
|
|
::
|
|
|
|
boost.numpy/doc/BoostNumPy.pdf
|
|
| |- html/index.html
|
|
|- example/demo_gaussian.py
|
|
| |- dtype.exe
|
|
| |- fromdata.exe
|
|
| |- gaussian.pyd
|
|
| |- ndarray.exe
|
|
| |- simple.exe
|
|
| |- ufunc.exe
|
|
| |- wrap.exe
|
|
|- test/dtype.py
|
|
|- dtype_mod.pyd
|
|
|- indexing.py
|
|
|- indexing_mod.pyd
|
|
|- ndarray.py
|
|
|- ndarray_mod.pyd
|
|
|- shapes.py
|
|
|- shapes_mod.pyd
|
|
|- templates.py
|
|
|- templates_mod.pyd
|
|
|- ufunc.py
|
|
|- ufunc_mod.pyd
|
|
|
|
|
|
You may develope and test without performing an install. The build
|
|
binary directory is configured so the executables are in the
|
|
:file:`build/bin` folder and the shared objects are in the
|
|
:file:`build/lib` folder. If you want to test then you simply need to
|
|
set the :envvar:`PYTHONPATH` environment variable to the lib folder
|
|
containing the shared object files so that python can find the
|
|
imported extension modules.
|
|
|
|
Details
|
|
=======
|
|
|
|
I borrowed from the python ``numexpr`` project the two ``.cmake``
|
|
files :file:`FindNumPy.cmake` and :file:`FindPythonLibsNew.cmake` in
|
|
:file:`libs/numpy/cmake`.
|
|
|
|
I followed a conventional structuring of the cmake
|
|
:file:`CMakeLists.txt` input files where the one at the top level
|
|
contains all of the configuration logic for the submodules that are
|
|
built.
|
|
|
|
If you want to also generate this documentation, invoke cmake with the
|
|
additional argument ``-DBUILD_DOCS=ON`` and make sure that the sphinx
|
|
package is in your path. You may build the documentation using ``make
|
|
doc-html``. If pdflatex is also in your path, then there is an
|
|
additonal target ``make doc-pdf`` that will generate the pdf manual.
|
|
|
|
CMakeLists.txt Source Files
|
|
===========================
|
|
|
|
For reference the source code of each of the new
|
|
:file:`CMakeLists.txt` files are included below.
|
|
|
|
Top-Level
|
|
---------
|
|
|
|
:file:`Boost.NumPy/CMakeLists.txt` where the parent subdirectory
|
|
:file:`Boost.NumPy` is ommited in directory references in the rest of
|
|
this section.
|
|
|
|
.. literalinclude:: ../../../CMakeLists.txt
|
|
:language: cmake
|
|
:linenos:
|
|
|
|
Library Source
|
|
--------------
|
|
|
|
The file :file:`libs/numpy/src/CMakeLists.txt` contains the build of the :file:`boost_numpy library`.
|
|
|
|
.. literalinclude:: ../src/CMakeLists.txt
|
|
:language: cmake
|
|
:linenos:
|
|
|
|
Tests
|
|
-----
|
|
|
|
The file :file:`libs/numpy/test/CMakeLists.txt` contains the python tests.
|
|
|
|
.. literalinclude:: ../test/CMakeLists.txt
|
|
:language: cmake
|
|
:linenos:
|
|
|
|
Examples
|
|
--------
|
|
|
|
The file :file:`libs/numpy/example/CMakeLists.txt` contains simple
|
|
examples (both an extension module and executables embedding python).
|
|
|
|
.. literalinclude:: ../example/CMakeLists.txt
|
|
:language: cmake
|
|
:linenos:
|
|
|
|
|
|
|
|
|