Installation#

If you’d like to work with the C++ core of IfcOpenShell, these guides will show you how to compile and install IfcOpenShell.

Note

It is not necessary to compile IfcOpenShell if you only want to use IfcOpenShell-Python, IfcConvert, or the other utilities such as IfcClash or IfcDiff. Compilation is only necessary for C++ developers.

By default, it will compile all available IFC schemas. To reduce compilation time you can specify only the schemas you need in CMakeLists.txt with set(SCHEMA_VERSIONS “2x3” “4”).

You will need:

IfcOpenShell depends on:

  • Boost

  • OpenCascade - for building IfcGeom For converting IFC representation items into BRep solids and tessellated meshes

  • (Optional) OpenCOLLADA - for IfcConvert to be able to write tessellated Collada (.dae) files

  • (Optional) SWIG and Python - for building the IfcOpenShell Python interface and use in the BlenderBIM Add-on

  • (Optional) HDF5 - for caching geometry using the HDF5 format

Compiling on Linux#

The following instructions are for Ubuntu, modify as required for other operating systems. GCC (4.7 or newer) or Clang (any version) is required.

See also

The nix/build-all.py script can be experimented with and studied for pointers for other operating systems. Note that this script is not currently meant to be used for a typical IfcOpenShell workspace setup.

  1. Fetch the latest source code, including all submodules.

    $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
    

    Warning

    The path where the source code is cloned to can contain spaces but non-ASCII characters are very likely to cause problems with the build.

  2. Install basic dependencies:

    $ sudo apt-get install git cmake gcc g++ libboost-all-dev libcgal-dev
    
  3. Install OpenCascade Technology (OCCT). Officially v7.5.0 is supported. Other versions may have unexpected behaviour.

    $ sudo apt-get install libocct-data-exchange-dev libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev
    

    See also

    If OCCT is not available, an alternative is to manually compile OCCT.

    Another alternative is to use OpenCascade Community Edition (OCE), but it may lag behind OCCT and is no longer actively maintained so is not recommended.

    $ sudo apt-get install liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev
    

    As a final alternative, you may also manually compile OCE:

    $ sudo apt-get install libftgl-dev libtbb2 libtbb-dev libgl1-mesa-dev libfreetype6-dev
    $ git clone https://github.com/tpaviot/oce.git
    $ cd oce
    $ mkdir build && cd build
    $ cmake ..
    # Replace X with number of CPU cores + 1
    $ make -j X
    $ sudo make install
    

    Warning

    Choose one option only between installing OCCT, installing OCE, or self-compilation. If you install and compile multiple versions of OpenCascade, your system may get confused.

  4. For building IfcConvert with COLLADA (.dae) support (ON by default), OpenCOLLADA is needed:

    $ sudo apt-get install libpcre3-dev libxml2-dev
    $ git clone https://github.com/KhronosGroup/OpenCOLLADA.git
    $ cd OpenCOLLADA
    # Using a known good revision, but HEAD should work too:
    $ git checkout 064a60b65c2c31b94f013820856bc84fb1937cc6
    $ mkdir build && cd build
    $ cmake ..
    # Replace X with number of CPU cores + 1
    $ make -j X
    $ sudo make install
    
  5. For building the IfcPython wrapper (ON by default), SWIG and Python development are needed:

    $ sudo apt-get install python-all-dev swig
    
  6. For building support for HDF5 caching (ON by default), install dependencies:

    $ sudo apt-get install libhdf5-dev libaec-dev zlibc
    
  7. Compile IfcOpenShell itself.

    $ cd /path/to/IfcOpenShell
    $ mkdir build && cd build
    # Customise the compile options to suit your environment
    # Check all paths are valid for your environment
    $ cmake ../cmake \
          -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/ \
          -DOCC_INCLUDE_DIR=/usr/include/ \
    
          # Optional Collada support
          -DCOLLADA_SUPPORT=On \
          -DOPENCOLLADA_INCLUDE_DIR="/usr/local/include/opencollada" \
          -DOPENCOLLADA_LIBRARY_DIR="/usr/local/lib/opencollada"  \
          -DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu/ \
    
          # Optional HDF5 support
          -DHDF5_SUPPORT=On \
          -DHDF5_LIBRARIES="/usr/local/hdf5/lib/libhdf5_cpp.so;/usr/local/hdf5/lib/libhdf5.so;/usr/lib64/libz.so;/usr/lib64/libsz.so;/usr/lib64/libaec.so" \
          -DHDF5_INCLUDE_DIR="/usr/local/hdf5/include" \
    
          -DCGAL_INCLUDE_DIR=/usr/include \
          -DGMP_INCLUDE_DIR=/usr/include \
          -DMPFR_INCLUDE_DIR=/usr/include \
          -DGMP_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
          -DMPFR_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu
    # Replace X with number of CPU cores + 1
    $ make -j X
    # Optionally install to the system
    $ sudo make install
    

Compiling on MacOS#

GCC (4.7 or newer) or Clang (any version) is required.

  1. Fetch the latest source code, including all submodules.

    $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
    

    Warning

    The path where the source code is cloned to can contain spaces but non-ASCII characters are very likely to cause problems with the build.

  2. Install all dependencies using Homebrew

    $ brew install boost cmake python3 cgal ftgl gmp libaec opencascade swig hdf5 zlib
    # homebrew automatically links most libraries, except some keg-only ones
    $ brew link zlib --force
    

3. Build IfcOpenShell with flags for Homebrew dependencies: (/usr/local/) for Intel machines with x84_64 architecture, (/opt/homebrew/) for Apple Silicon processors with arm64 architecture.

$ cd /path/to/IfcOpenShell
$ mkdir build && cd build
# set library flags
$ export LDFLAGS="$LDFLAGS -Wl,-flat_namespace,-undefined,suppress"
$ cmake ../cmake \
    -DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3.10 \
    -DPYTHON_LIBRARY=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib \
    -DPYTHON_INCLUDE_DIR=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/include/python3.10/ \
    -DOCC_LIBRARY_DIR=/opt/homebrew/lib/ \
    -DOCC_INCLUDE_DIR=/opt/homebrew/include/opencascade/ \
    -DCGAL_INCLUDE_DIR=/opt/homebrew/include/ \
    -DGMP_LIBRARY_DIR=/opt/homebrew/lib/ \
    -DMPFR_LIBRARY_DIR=/opt/homebrew/lib/ \
    -DHDF5_LIBRARY_DIR=/opt/homebrew/lib/ \
    -DHDF5_INCLUDE_DIR=/opt/homebrew/include/ \
    -DCOLLADA_SUPPORT=0
# `sysctl -n hw.ncpu` returns the number of cpu cores on macOS
$ make -j$(sysctl -n hw.ncpu)

Compiling on Windows (Visual Studio)#

This is for users of Visual Studio 2008 to 2019 (2022 not yet supported by dependency CMake) with C++ toolset (or Visual C++ Build Tools).

  1. Fetch the latest source code, including all submodules.

    $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
    

    Warning

    The path where the source code is cloned to can contain spaces but non-ASCII characters are very likely to cause problems with the build.

  2. Assuming Visual Studio 2015 x64 environment variables set, build dependencies and run cmake.

    $ cd IfcOpenShell\win
    $ build-deps.cmd
    $ run-cmake.bat
    
  3. Open and build the solution file in Visual Studio:

    $ ..\build-vs2015-x64\IfcOpenShell.sln
    

    As the scripts default to using the RelWithDebInfo configuration, and a freshly created solution by CMake defaults to Debug, make sure to switch the used build configuration. Build the INSTALL project (right-click -> Project Only) to deploy the headers and binaries into a single location if wanted/needed.

    Alternatively, one can use the utility batch file(s) to build and install the project easily from the command-line (installing a project will build it also, if required):

    $ install-ifcopenshell.bat
    

See also

For more information on configuring a Windows compilation see the Windows Readme.

Compiling on Windows (MSYS2 + MinGW)#

This is for users of MSYS2 and MinGW.

  1. Fetch the latest source code, including all submodules.

    $ git clone --recursive https://github.com/IfcOpenShell/IfcOpenshell.git
    

    Warning

    The path where the source code is cloned to can contain spaces but non-ASCII characters are very likely to cause problems with the build.

  2. Start the MSYS2 Shell and then:

    $ cd IfcOpenShell/win
    $ ./build-deps.sh
    $ ./run-cmake.sh
    $ ./install-ifcopenshell.sh
    

See also

For more information on configuring a Windows compilation see the Windows Readme.

Packaged installation#