Blame SUPPORTED_PLATFORMS.md

Packit Service 7c31a4
# Supported platforms
Packit Service 7c31a4
Packit Service 7c31a4
|  System | Support type | Supported versions | Notes |
Packit Service 7c31a4
|---|---|---|---|
Packit Service 7c31a4
| GNU/Linux | Tier 1 | Linux >= 2.6.32 with glibc >= 2.12 | |
Packit Service 7c31a4
| macOS | Tier 1 | macOS >= 10.7 | |
Packit Service 7c31a4
| Windows | Tier 1 | >= Windows 7 | MSVC 2008 and later are supported |
Packit Service 7c31a4
| FreeBSD | Tier 1 | >= 10 | |
Packit Service 7c31a4
| AIX | Tier 2 | >= 6 | Maintainers: @libuv/aix |
Packit Service 7c31a4
| z/OS | Tier 2 | >= V2R2 | Maintainers: @libuv/zos |
Packit Service 7c31a4
| Linux with musl | Tier 2 | musl >= 1.0 | |
Packit Service 7c31a4
| SmartOS | Tier 2 | >= 14.4 | Maintainers: @libuv/smartos |
Packit Service 7c31a4
| Android | Tier 3 | NDK >= r15b | |
Packit Service 7c31a4
| IBM i | Tier 3 | >= IBM i 7.2 | Maintainers: @libuv/ibmi |
Packit Service 7c31a4
| MinGW | Tier 3 | MinGW32 and MinGW-w64 | |
Packit Service 7c31a4
| SunOS | Tier 3 | Solaris 121 and later | |
Packit Service 7c31a4
| Other | Tier 3 | N/A | |
Packit Service 7c31a4
Packit Service 7c31a4
## Support types
Packit Service 7c31a4
Packit Service 7c31a4
* **Tier 1**: Officially supported and tested with CI. Any contributed patch
Packit Service 7c31a4
  MUST NOT break such systems. These are supported by @libuv/collaborators.
Packit Service 7c31a4
Packit Service 7c31a4
* **Tier 2**: Officially supported, but not necessarily tested with CI. These
Packit Service 7c31a4
  systems are maintained to the best of @libuv/collaborators ability,
Packit Service 7c31a4
  without being a top priority.
Packit Service 7c31a4
Packit Service 7c31a4
* **Tier 3**: Community maintained. These systems may inadvertently break and the
Packit Service 7c31a4
  community and interested parties are expected to help with the maintenance.
Packit Service 7c31a4
Packit Service 7c31a4
## Adding support for a new platform
Packit Service 7c31a4
Packit Service 7c31a4
**IMPORTANT**: Before attempting to add support for a new platform please open
Packit Service 7c31a4
an issue about it for discussion.
Packit Service 7c31a4
Packit Service 7c31a4
### Unix
Packit Service 7c31a4
Packit Service 7c31a4
I/O handling is abstracted by an internal `uv__io_t` handle. The new platform
Packit Service 7c31a4
will need to implement some of the functions, the prototypes are in
Packit Service 7c31a4
``src/unix/internal.h``.
Packit Service 7c31a4
Packit Service 7c31a4
If the new platform requires extra fields for any handle structure, create a
Packit Service 7c31a4
new include file in ``include/`` with the name ``uv-theplatform.h`` and add
Packit Service 7c31a4
the appropriate defines there.
Packit Service 7c31a4
Packit Service 7c31a4
All functionality related to the new platform must be implemented in its own
Packit Service 7c31a4
file inside ``src/unix/`` unless it's already done in a common file, in which
Packit Service 7c31a4
case adding an `ifdef` is fine.
Packit Service 7c31a4
Packit Service 7c31a4
Two build systems are supported: autotools and cmake. Ideally both need to be
Packit Service 7c31a4
supported, but if one of the two does not support the new platform it can be
Packit Service 7c31a4
left out.
Packit Service 7c31a4
Packit Service 7c31a4
### Windows
Packit Service 7c31a4
Packit Service 7c31a4
Windows is treated as a single platform, so adding support for a new platform
Packit Service 7c31a4
would mean adding support for a new version.
Packit Service 7c31a4
Packit Service 7c31a4
Compilation and runtime must succeed for the minimum supported version. If a
Packit Service 7c31a4
new API is to be used, it must be done optionally, only in supported versions.
Packit Service 7c31a4
Packit Service 7c31a4
### Common
Packit Service 7c31a4
Packit Service 7c31a4
Some common notes when adding support for new platforms:
Packit Service 7c31a4
Packit Service 7c31a4
* Generally libuv tries to avoid compile time checks. Do not add any to the
Packit Service 7c31a4
  autotools based build system or use version checking macros.
Packit Service 7c31a4
  Dynamically load functions and symbols if they are not supported by the
Packit Service 7c31a4
  minimum supported version.