###################
Supported Platforms
###################

.. contents::
   :local:

.. _platforms_c_cpp_support:

Runtime Platform Support (C, C++)
=================================

To get started with HOOPS Exchange C API, see :doc:`/tutorials/c/environment-setup`

+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+
| Platform                            | Architecture [#arm64]_      | Runtime Requirements  | Supported OS Examples                |
+=====================================+=============================+=======================+======================================+
| |wy| Microsoft Windows              | x86_64                      | :ref:`v142 <pt_msvc>` | | Windows 11                         |
|                                     |                             |                       | | Windows Server 2022+               |
+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+
|                                     | x86_64                      |                       | | Ubuntu 24.04 LTS                   |
|                                     |                             | | glibc 2.28          | | Debian 11+                         |
| |ly| GNU/Linux                      +-----------------------------+ | libstdc++.so.6.0.25 | | RHEL 8                             |
|                                     | arm64-v8a [#armv8]_         |                       |                                      |
|                                     |                             |                       |                                      |
+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+
| |my| Apple macOS                    | | x86_64                    | macOS 13.0            | macOS 13.0 Ventura                   |
|                                     | | arm64-v8a (Apple Silicon) |                       |                                      |
|                                     |                             +-----------------------+--------------------------------------+
|                                     |                             | iOS 15.0              | iOS 15.0 (Apple Mac Catalyst target) |
|                                     |                             |                       | [#ctlst]_                            |
+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+
| |iy| Apple iOS                      | | x86_64 [#iosarch]_        | iOS 13.0              | iOS 13.0                             |
|                                     | | arm64-v8a                 |                       |                                      |
+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+
| |ay| Android                        | | x86_64                    | N/A                   | Android 5.0 Lollipop                 |
|                                     | | arm64-v8a                 |                       |                                      |
+-------------------------------------+-----------------------------+-----------------------+--------------------------------------+

.. [#arm64] ``arm64-v8a`` corresponds to ARMv8-A 64-bit CPUs, commonly referred to as ``arm64``.
.. [#armv8] GNU/Linux ARM binaries do not support Mx architectures (Such as Apple M1/M2/M3).
.. [#ctlst] Mac Catalyst apps run on macOS but are built using the iOS SDK.
   This enables iOS apps to be adapted for desktop use while retaining iOS APIs.
.. [#iosarch] iOS ``x86_64`` refers to Simulator support on Intel-based Macs.
   Actual devices use ``arm64-v8a``.

.. _pt_msvc:

.. rubric:: Microsoft Visual Studio Runtime Requirements

Starting from HOOPS 2023, HOOPS Exchange migrated its compiler to Visual Studio 2019 (previously 2015).
Following `Microsoft's Documentation <https://learn.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-170>`__ on binary compatibility, this change implies an update to the required MSVC redistributables.

HOOPS Exchange being an explicitly shared library, the impact occurs at runtime.
Any application running HOOPS Exchange must have at least `Visual Studio 2019 redistributable <https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170>`__.

.. rubric:: Deprecated Platform Supports

* Support for all Microsoft Windows 10 editions is scheduled to end in October 2025 in coordination with Microsoft’s scheduled end of life policy.
* Starting from HOOPS Exchange 2024, support for Android *x86 (32-bit)* has been dropped.
* Starting from HOOPS Exchange 2025.1.0, support for macOS versions below 13.0 and iOS versions below 12.5.7 has been dropped.
* Starting from HOOPS Exchange 2024.2.0, support for Android *ARMv7 (32-bit)* has been dropped.

Visit our `Developer Support page <https://developer.techsoft3d.com/developer-support/>`_ to familiarize yourself with support procedures, including deprecated functionality.

.. rubric:: Platform-Specific Format Support

CAD format support may be restricted in some platforms.
Please refer to :doc:`/start/supported-formats` for more information.

The experimental USD Writer has restricted platform requirements, see :ref:`the USD documentation <usd_wt_platforms>` for more.

.. rubric:: GNU/Linux Specifics

In Linux systems, it's important to explicitly set the platform locale options to ensure proper handling of text for some of our readers.
Refer to your distribution's documentation for instructions on setting locales and utilizing the *LANG* environment variable


If you are already familiar with the :doc:`supported formats </start/supported-formats>` page, you are now ready to discover how to :doc:`evaluate HOOPS Exchange </start/evaluating-exchange>`; to do that, simply press the *Next* button.


.. rubric:: Standards

Exchange C header files are C99-compliant.
Our example codes are compiled against either C99 or C++14 standards.

.. rubric:: Using Other Operating Systems and Compilers

It is simplest and best if your application is compiled using one of the supported operating systems and compilers listed above.
Other operating systems may work, but our testing is limited to the list above.

It is possible to use a version of Visual Studio for your application development other than the supported versions, although it is not recommended or supported.
We have spot checked that this is possible during the testing of our release.
Please remember that any issues will need to be reproduced using a supported operating system and compiler before being submitted to Technical Support.

.. _publish_details:

.. rubric:: Advanced Publishing

Advanced Publishing is available for Microsoft Windows and GNU/Linux on x86_64 architectures, following :ref:`the plaform table above <platforms_c_cpp_support>`.
This addresses all API functions using the ``A3DPDF`` prefix.

.. _package_hierarchy:

Package Description
-------------------

Here is a quick description of the package, once extracted:

=============== ========================================================= 
 Folder          Description                                              
=============== ========================================================= 
 bin             HOOPS Exchange and 3rd party binaries                    
 documentation   A link to this documentation                             
 include         C include files                                          
 samples         A list of example programs made with HOOPS               
 tools           Misc helper tools for facilitating client code upgrades  
=============== ========================================================= 

.. rubric:: Binaries

Binary files are located in a sub-folder of *bin/* directory.
The name of the sub-folder is set according to the runtime environment:

+-------------------+-----------------------------+---------------------+
|     Platform      |    Folder                   |  Main Binary File   |
+===================+=============================+=====================+
|  Windows          | win64_v142                  | A3DLIBS.dll         |
+-------------------+-----------------------------+---------------------+
|  GNU/Linux        | linux64                     |                     |
|                   +-----------------------------+                     |
|                   | linux_arm64-8va             |                     |
+-------------------+-----------------------------+ libA3DLIBS.so       |
|                   | android/arm64-v8a           |                     |
|  Android          +-----------------------------+                     |
|                   | android/x86_64              |                     |
+-------------------+-----------------------------+---------------------+
|  macOS            | macos                       | libA3DLIBS.dylib    |
+-------------------+-----------------------------+---------------------+
|  Mac Catalyst     | maccatalyst                 | libA3DLIBS.dylib    |
+-------------------+-----------------------------+---------------------+
|  iOS              | ios                         | libA3DLIBS.a        |
+-------------------+-----------------------------+---------------------+


.. _platforms_cs_cpp_support:

Runtime Platform Support (C#)
=============================

To get started with C# development, refer to the :doc:`/tutorials/cs/environment-setup` tutorial.

HOOPS Exchange C# API is available through the call bindings source files in `the Developer Zone <https://developer.techsoft3d.com/hoops/exchange/downloads/latest>`__.

The API is supported on **Windows**, **GNU/Linux**, and **macOS**.  
Since the C# API is built on top of the HOOPS Exchange C++ binaries, all C/C++ requirements outlined in :ref:`the previous section <platforms_c_cpp_support>` apply.

Additionally, the **.NET Core 3.1** framework is required.
You can download it from `the official .NET Core 3.1 page <https://dotnet.microsoft.com/en-us/download/dotnet/3.1>`__.

Package Description
-------------------

This section is a brief description of the C# API package contents.

================= ========================================================= 
 Folder            Description                                              
================= ========================================================= 
 ExchangeCSharp    A single C# library provided as source files
 samples           A list of example programs made with HOOPS               
================= ========================================================= 

.. rubric:: Source Files

The C# bindings are provided as source files rather that pre-compiled binaries.
These source files are mainly located under a subfolder of *ExchangeCSharp* called *Direct*:

================== ===========================================================================
 File               Description                                              
================== ===========================================================================
 API.cs             Support for :ref:`cs_bindings_api`
 Classes.cs         High-level classes 
 Constants.cs       Definitions for :ref:`cs_bindings_constants`
 Enums.cs           Definitions for :ref:`cs_bindings_enums`
 Structs.cs         Data :ref:`cs_bindings_structs`
 Library.cs         :doc:`/api/cs/loader`
 Utils.cs           :doc:`/api/cs/utils`
 hoops_license.cs   License key file.
================== ===========================================================================

For more information regarding the capabilities with the C# API, please refer to the C# API section of the documentation :doc:`here </api/cs>`.

Development Requirements
========================

+-------------------------------------+-----------------------------+---------------------------------------+
| Platform                            | Architecture [#arm64]_      | Build Requirements                    |
+=====================================+=============================+=======================================+
| |wy| Microsoft Windows              | x86_64                      | | :ref:`Visual Studio 2019 <pt_msvc>` |
|                                     |                             | | Minimum SDK version: v10.0.18362.0  |
+-------------------------------------+-----------------------------+---------------------------------------+
|                                     | x86_64                      | | GNU GCC 10.3.1                      |
|                                     |                             | | devtoolset 10                       |
| |ly| GNU/Linux                      +-----------------------------+---------------------------------------+
|                                     | arm64-v8a [#armv8]_         | | GNU GCC 8.3.0                       |
|                                     |                             | | devtoolset 9                        |
+-------------------------------------+-----------------------------+---------------------------------------+
| |my| Apple macOS                    | | x86_64                    |                                       |
|                                     | | arm64-v8a (Apple Silicon) |                                       |
|                                     |                             |                                       |
|                                     |                             |                                       |
|                                     |                             |                                       |
+-------------------------------------+-----------------------------+                                       |
| |iy| Apple iOS                      | | x86_64 [#iosarch]_        | Xcode 15.1 (LLVM)                     |
|                                     | | arm64-v8a                 |                                       |
+-------------------------------------+-----------------------------+                                       |
| |my| Apple Mac Catalyst             | | x86_64                    |                                       |
| (iOS 15.0) [#ctlst]_                | | arm64-v8a (Apple Silicon) |                                       |
+-------------------------------------+-----------------------------+---------------------------------------+
| |ay| Android 5.0 (Lollipop)         | | x86_64                    | | Android NDK R27c                    |
|                                     | | arm64-v8a                 | | Clang, c++_shared                   |
+-------------------------------------+-----------------------------+---------------------------------------+


