Open Cascade Development Insights

Hello, I would like to share some details about the ongoing OCCT3D (Open Cascade Technologies 3D) 7.9.0 release.

The main topic for today is the changes that will impact the *configuration stage of the OCCT project. In this context, configurations refer to preparing the solution for the build stage.

*Changes to other parts will be shared later.

Agenda:

  • Removing "genproj" solutions (deprecated in 7.8).
  • Marking the TBB 3rd-party as deprecated.
  • Reorganizing CMake configuration.
  • Integrating support for vcpkg.

The main goal of these configuration updates is to simplify and clarify the user and development workflow for everyone.

Removing "genproj" Solution

Starting from OCCT 7.8, the "genproj" solution was marked as "deprecated", meaning it is no longer recommended for use. The "genproj" solution was based on the TK GUI solution and was developed a long time ago when CMake was not as popular or familiar to C++ developers.

The main problem with "genproj" was the complexity of supporting multiple configuration solutions for the OCCT team, compounded by the increasing number of new 3rd-party dependencies in the modern open-source world. Moreover, "genproj" is an internal solution that needs to be reorganized to be comparable with CMake or QMake.

Starting from 7.9, the primary configuration tool will be CMake, meaning only CMake will be supported and maintained by the OCCT team. All scripts, documentation, and solutions for "genproj" will be removed from the official OCCT repository. If your project still requires "genproj", please update your workflow to use CMake before version 7.9.

Benefits of using CMake:

  • One configuration method for each platform.
  • Flexibility with compiler and linker flags.
  • Flexibility in the use of features and modules.
  • Simplified integration of new 3rd-party tools and toolchains.
  • Familiarity for most C++ developers.

Marking the TBB 3rd-Party as Deprecated

Starting from 7.9, the TBB (Threading Building Blocks, a flexible multithreading library) 3rd-party will be marked as optional and not recommended for general use, although it will still be available.

OCCT 7.8 supports two methods of multithreading: TBB (2021.5+) and standard threads. While TBB is a very flexible and powerful solution, OCCT uses it as an optional 3rd-party library, only leveraging a small portion of its functionality, such as "tbb::for_each" and (optionally) the memory manager. This required delivering a full set of dynamic libraries for just a few functions, sometimes causing conflicts with existing TBB dependencies in user projects.

The primary reason for deprecating TBB is the difficulty of maintaining a high level of integration. Nowadays, we need to avoid deep integration with TBB to comply with certain project licensing requirements.

Our current goal is to avoid extra overhead for most users. Consequently, some internal functionalities will be reorganized to allow disabling OCCT multithreading or making it more flexible from the settings side. This means that even if your project uses TBB and OCCT (without TBB), there will be no issues. However, you will need to reorganize your solutions to call OCCT high-level functions in your multithreaded environment, with internal OCCT multithreading disabled.

The OCCT team will collect feedback on multithreading-related topics from 7.9. Based on the results, TBB may be reintegrated more deeply or removed entirely.

Reorganizing CMake Configuration

OCCT3D is a very powerful solution with many different modules and tools. The primary goal of these changes is to be flexible for our users' needs. For example, some projects require only DE functionality, while others need only modeling. These projects do not need to build and deliver extra functionality.

Planned Extensions:

  • Advanced options to choose specific TK modules. DE and CAF modules will have the ability to specify which modules should be built.
  • Advanced options to separate DE and CAF for IGES and STEP. If CAF is disabled, IGES and STEP will avoid additional dependencies.
  • A new install layout (vcpkg, see Installation directory layout | Microsoft Learn)
  • Updating the minimal version of CMake to offer more modern features.
  • Reorganizing the TK creation stage to specify dependency libraries and include folders for each specific TK by target.
  • Simplified usage of debug/release 3rd-parties.

Integration Support for vcpkg

For a long time, OCCT has been available in the vcpkg package list (see Browse public vcpkg packages). This allowed many users to build and install OCCT with just one click. However, it had some limitations and could not be used if you wanted to debug OCCT.

The primary goal of these changes is to simplify the use of 3rd-party tools and determine the specific list of versions of supported 3rd-party tools.

Starting from 7.9, OCCT will support vcpkg in beta mode. This means the OCCT team will maintain the vcpkg OCCT port, leading to fast package updates and already prepared binary packages in the vcpkg layout for different platforms.


Feel free to share your thoughts and ideas in the comments.

Best regards,

Dmitrii, Technical Leader of OCCT 3D.

Original