Upstream OpenSSL compiled on IRIX 6.5 (MIPSpro, n32) in an emulated Indigo2, via Forgejo Actions
  • Shell 71.5%
  • Perl 23%
  • C 5.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
steigr cb543bbbb4
README: the package registry upload and the PACKAGES_TOKEN secret [skip ci]
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 12:49:50 +01:00
.forgejo/workflows publish: the package upload is a required step, with the PACKAGES_TOKEN org secret [skip ci] 2026-11-02 12:49:24 +01:00
tools publish the package to the Forgejo registry (best effort) [skip ci] 2026-11-02 10:02:32 +01:00
README.md README: the package registry upload and the PACKAGES_TOKEN secret [skip ci] 2026-11-02 12:49:50 +01:00

OpenSSL on IRIX

Builds the newest upstream OpenSSL on IRIX 6.5.22 (MIPSpro 7.4, n32 ABI) inside an emulated Indigo2 IP28 (IRIS), driven by a Forgejo Actions runner with the labels irix, irix-65 and irix-mips.

How the workflow builds it

The guest has Perl 5.004 and SGI make, which cannot run OpenSSL's configure or build. The runner container shares /share with the guest, so the work is split:

  1. Runner clones this repository and upstream OpenSSL, runs Configure for the irix-mips3-cc target, and runs every Perl generator (make -k).
  2. tools/gen-irix-build.pl turns the output of make -n all into a plain sh script: one resumable step per compile or link (skipped if the object exists), with ar command lines split below IRIX's 20 KB argument limit.
  3. IRIX guest runs that script in the background (irix-sh); the runner follows its log and fails the job on the first compile error or after 30 minutes without progress.
  4. tools/irix-smoke.sh runs known-answer checks with the new apps/openssl in the guest.
  5. The libraries, headers and openssl binary are collected into /share/artifacts/<tag>-irix-mips3.tar.gz.

A clean build is 1100+ compiles on one emulated CPU: expect about three hours.

What IRIX 6.5.22 needs

Problem Handling
<stdint.h> needs C99 mode -c99
No C99 PRIX32, PRIu64, PRId64 in <inttypes.h> defined at configure time for n32 ("X", "llu", "lld")
struct msghdr has no msg_flags unless _XOPEN_SOURCE=500 (which hides SGI APIs) no-dgram no-dtls no-quic: TLS over TCP only
No NI_NUMERICHOST / getnameinfo declaration (libc has the function) per-file -DNI_NUMERICHOST=2 for apps/s_server.c
No C99 va_copy per-file -Dva_copy(d,s)=((d)=(s)) for apps/lib/log.c and crypto/bio/bio_print.c (n32 va_list is a pointer)
libc snprintf ignores %zu only cosmetic: openssl version -a prints bn( for its bignum options, and the BIO debug callback text is cut short

The build uses no-asm, no-shared, no-tests, no-docs and -O1.

Run it

Actions, then "OpenSSL on IRIX", then "Run workflow". ref is an upstream tag or branch; the default latest picks the newest openssl-X.Y.Z tag. It also runs on a push to tools/ or the workflow, and weekly.

The last verified build is openssl-4.1.0.

Published package

Every successful run uploads the package to the Forgejo package registry of the irix organisation, as the generic package openssl_modern (a version and latest): https://git.stei.gr/irix/-/packages/generic/openssl_modern/latest. Download the .tardist from there and install it with inst as below; it does not need the runner's /share/artifacts.

The upload uses the organisation secret PACKAGES_TOKEN: an access token of a user who may write the organisation's packages (scopes write:package, read:package). The job's own token cannot upload. tools/publish-package.sh does the upload.