Byblos: Difference between revisions

From XionKB
Jump to navigationJump to search
m (Add illumos to sysroot list)
(partial rewrite)
Line 1: Line 1:
{{stub}}'''Byblos''' is a software development kit developed for [[Sirius DOS]], [[A*]] and {{wp|Unix}}-based servers, with distinction for [[MILOTIX]] and Linux, BSD and Darwin (pan-Unix) support.
{{infobox swproj
|name=Byblos SDK
|image=Byblos.jpg
|by=Alexander Nicholi
|initialrel=<em>unreleased</em>
|langs={{wp|ANSI C}}, {{wp|Make (software)|Make}}, {{wp|Unix shell|POSIX sh}}
|systems={{wp|Darwin (operating system)|Darwin}}, {{wp|Linux|GNU/Linux}}
|archs={{wp|Apple silicon}}, {{wp|x86-64}}
|lic=[[ASL|ASL 1.1]]
}}
'''Byblos''' is a software development kit developed for [[Sirius DOS]], [[A*]] and {{wp|Unix}}-based servers, with distinction for [[MILOTIX]] and Linux, BSD and Darwin (pan-Unix) support. It is divided into two versions: Byblos 1, a provisional SDK that uses existing compiler toolchains and host infrastructure of Unix-like operating systems, and Byblos 2, the proper SDK that provides [[FCC|its own C compiler]], [[Oración|assembler]], and [[Sirius C*|the first C* compiler]].


==System support==
==Byblos 1==
The Byblos SDK is multi-platform. Systems are divided into two broad groups: [[XAA initiative|XAA]] platforms and Unices, with MILOTIX being the only system counting as both. Unix-based systems are supported for the highly economical commodity-level scalability that is out of reach of A*. All XAA platforms are supported for the interests of the XAA initiative. GNU/Linux, FreeBSD and Darwin are supported for their market share, while OpenBSD is supported for the relevancy of its security features and illumos is supported as it is a Unix not based on Linux or BSD like Darwin, but is {{wp|free software}}.
===Platform support===
Byblos 1 is multi-platform. While it endeavours to target all systems of relevance to Xion Megatrends, only three host platforms are supported: GNU/Linux on Intel 64, Darwin/XNU on Intel 64 and Darwin/XNU on Apple silicon. The following table gives Byblos 1's platform support matrix with respect to building and running software in the first and second tables, respectively.


===Location===
====Compile time support matrix====
Spatial placement of the SDK is a more intuitive ordeal on A*, where programs and data merely have names, as opposed to Unices and DOSes where a file system hierarchy must be dictated for consistency to remain with portability in force. To this end, Byblos defines the following file system hierarchy, the root of which is referred to as <code>$BYBLOS</code> in the chart below. <code>$BYBLOS</code> may resolve to any valid file system path, but normally is set to <code>/opt/byblos</code> on Unices and <code>C:/BYBLOS</code> on DOSes.
{| class="wikitable" width="900px" style="text-align:center"
|-
! rowspan="2" | Host
! colspan="6" | Target
|-
| <tt>agbhb</tt>
| <tt>agbsp</tt>
| <tt>astar</tt>
| <tt>darwin86</tt>
| <tt>darwinm1</tt>
| <tt>freebsd</tt>
|-
| <tt>linux64</tt>
| devkitARM
| devkitARM
| ''unknown''
| ''none''
| ''none''
| LLVM
|-
| <tt>darwin86</tt>
| devkitARM
| devkitARM
| ''unknown''
| hb:LLVM
| hb:LLVM
| hb:LLVM
|-
| <tt>darwinm1</tt>
| devkitARM
| devkitARM
| ''unknown''
| hb:LLVM
| hb:LLVM
| hb:LLVM
|-
! rowspan="2" | Host
! colspan="6" | Target
|-
| <tt>ibmpc</tt>
| <tt>illumos</tt>
| <tt>linux32</tt>
| <tt>linux64</tt>
| <tt>milotix</tt>
| <tt>openbsd</tt>
|-
| <tt>linux64</tt>
| djGPP
| LLVM
| LLVM
| LLVM
| ''unknown''
| LLVM
|-
| <tt>darwin86</tt>
| djGPP
| hb:LLVM
| hb:LLVM
| hb:LLVM
| ''unknown''
| hb:LLVM
|-
| <tt>darwinm1</tt>
| djGPP
| hb:LLVM
| hb:LLVM
| hb:LLVM
| ''unknown''
| hb:LLVM
|-
! rowspan="2" | Host
! colspan="6" | Target
|-
| <tt>pcdos</tt>
| <tt>win311</tt>
| <tt>win95</tt>
| <tt>winnt32</tt>
| <tt>winnt64</tt>
| &nbsp;
|-
| <tt>linux64</tt>
| djGPP
| djGPP
| MinGW
| MinGW
| MinGW
| &nbsp;
|-
| <tt>darwin86</tt>
| djGPP
| djGPP
| MinGW
| MinGW
| MinGW
| &nbsp;
|-
| <tt>darwinm1</tt>
| djGPP
| djGPP
| MinGW
| MinGW
| MinGW
| &nbsp;
|}


{| class="wikitable"
====Runtime support matrix====
{| class="wikitable" width="900px" style="text-align:center"
|-
|-
! Path
! rowspan="2" | Host
! Brief description
! colspan="6" | Target
|-
| <tt>agbhb</tt>
| <tt>agbsp</tt>
| <tt>astar</tt>
| <tt>darwin86</tt>
| <tt>darwinm1</tt>
| <tt>freebsd</tt>
|-
| <tt>linux64</tt>
| mGBA
| mGBA
| ''unknown''
| ''none''
| ''none''
| QEMU/u
|-
| <tt>darwin86</tt>
| mGBA
| mGBA
| ''unknown''
| ''native''
| ''none''
| QEMU/u
|-
| <tt>darwinm1</tt>
| mGBA
| mGBA
| ''unknown''
| Rosetta 2
| ''native''
| QEMU/u
|-
! rowspan="2" | Host
! colspan="6" | Target
|-
| <tt>ibmpc</tt>
| <tt>illumos</tt>
| <tt>linux32</tt>
| <tt>linux64</tt>
| <tt>milotix</tt>
| <tt>openbsd</tt>
|-
| <tt>linux64</tt>
| Bochs
| QEMU/h
| ''native-ish''
| ''native''
| ''unknown''
| QEMU/u
|-
| <tt>darwin86</tt>
| Bochs
| QEMU/h
| QEMU/u
| QEMU/u
| ''unknown''
| QEMU/u
|-
| <tt>darwinm1</tt>
| Bochs
| QEMU/h
| QEMU/u
| QEMU/u
| ''unknown''
| QEMU/u
|-
! rowspan="2" | Host
! colspan="6" | Target
|-
| <tt>pcdos</tt>
| <tt>win311</tt>
| <tt>win95</tt>
| <tt>winnt32</tt>
| <tt>winnt64</tt>
| &nbsp;
|-
| <tt>linux64</tt>
| DOSBox
| DOSBox
| Wine
| Wine
| Wine
| &nbsp;
|-
| <tt>darwin86</tt>
| DOSBox
| DOSBox
| Wine
| Wine
| Wine
| &nbsp;
|-
| <tt>darwinm1</tt>
| DOSBox
| DOSBox
| Wine
| Wine
| Wine
| &nbsp;
|}
 
====Tool list====
{| class="wikitable" width="900px"
|-
! Tool name
! width="100%" | Description
|-
| devkitARM
| devkitPro's 32-bit ARM GCC toolchain.
|-
| hb:LLVM
| LLVM installed via Homebrew on macOS.
|-
| LLVM
| LLVM installed on a Unix-like.
|-
| djGPP
| Modified GCC for compiling 16-bit DOS programs.
|-
| MinGW
| Modified GCC for targeting Microsoft Windows.
|-
| mGBA
| Accurate GBA emulator.
|-
| QEMU/u
| QEMU virtualisation framework, in the low-friction userland virtualisation mode.
|-
| QEMU/h
| QEMU virtualisation framework, using a full-fat VM.
|-
| Bochs
| Accurate IBM-PC emulator.
|-
| Wine
| Translation layer for Windows programs to run on other operating systems.
|-
| Rosetta 2
| Apple's transition system for running Intel Mac programs on Apple Silicon.
|-
| DOSBox
| Accurate MS-DOS emulator with a focus on gaming.
|}
 
====Supported targets====
{| class="wikitable" width="900px"
|-
! style="text-wrap:nowrap;width:60px" | Target
! style="text-wrap:nowrap;width:150px" | Full&nbsp;name
! style="text-wrap:nowrap;width:90px" | ISA
! style="text-wrap:nowrap;width:30px" | <small>Host</small>
! style="text-wrap:nowrap;width:30px" | <tt>ASM</tt>
! style="text-wrap:nowrap;width:30px" | C
! style="text-wrap:nowrap;width:30px" | <tt>bin</tt>
! style="text-align:left" | Notes
|-
| style="text-align:center" | <tt>agbhb</tt>
| style="text-align:center" | GBA homebrew
| style="text-align:center" | ARMv4T
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| Scratch-building GBA ROMs.
|-
| style="text-align:center" | <tt>agbsp</tt>
| style="text-align:center" | GBA sourcepage
| style="text-align:center" | ARMv4T
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| Source-patching existing GBA ROMs.
|-
| style="text-align:center" | <tt>astar</tt>
| style="text-align:center" | [[A*|Anodyne A*]]
| style="text-align:center" | ''unknown''
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| Too early to specify.
|-
| style="text-align:center" | <tt>darwin86</tt>
| style="text-align:center" | Intel Mac
| style="text-align:center" | x86-64 v1
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>darwinm1</tt>
| style="text-align:center" | Apple Silicon Mac
| style="text-align:center" | ARMv8
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| Only host that can target everything.
|-
| style="text-align:center" | <tt>freebsd</tt>
| style="text-align:center" | FreeBSD
| style="text-align:center" | x86-64 v1
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>ibmpc</tt>
| style="text-align:center" | Real mode IBM-PC
| style="text-align:center" | Intel i286
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| Not specific to any DOS conventions.
|-
| style="text-align:center" | <tt>illumos</tt>
| style="text-align:center" | illumos/OpenIndiana
| style="text-align:center" | SPARC64 V9
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>linux32</tt>
| style="text-align:center" | GNU/Linux 32-bit
| style="text-align:center" | Intel i686
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>linux64</tt>
| style="text-align:center" | GNU/Linux 64-bit
| style="text-align:center" | x86-64 v1
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>milotix</tt>
| style="text-align:center" | [[MILOTIX]]
| style="text-align:center" | x86-64 v3
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>openbsd</tt>
| style="text-align:center" | OpenBSD
| style="text-align:center" | x86-64 v1
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>pcdos</tt>
| style="text-align:center" | Real mode PC-DOS
| style="text-align:center" | Intel i286
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| &nbsp;
|-
| style="text-align:center" | <tt>win311</tt>
| style="text-align:center" | Windows 3.11
| style="text-align:center" | Intel i286
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>win95</tt>
| style="text-align:center" | Windows 95, 98 &amp; Me
| style="text-align:center" | Intel i386
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>winnt32</tt>
| style="text-align:center" | Windows NT 4.0 32-bit
| style="text-align:center" | Intel i386
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|-
| style="text-align:center" | <tt>winnt64</tt>
| style="text-align:center" | Windows NT 5.1 64-bit
| style="text-align:center" | x86-64 v1
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-yellow" | &ndash;
| &nbsp;
|}
 
=====Notes=====
* '''<tt>bin</tt>packing''' is a highly portable method of compiling assets statically into binaries
* For assembly, uncertainty exists about toolchain support on macOS
* For <tt>bin</tt>packing, it may eventually work but needs further research
 
====Programs list====
# <tt>agbhb</tt>
# <tt>agbsp</tt>
# <tt>astar</tt>
# <tt>darwin86</tt>
# <tt>darwinm1</tt>
# <tt>freebsd</tt>
# <tt>ibmpc</tt>
# <tt>illumos</tt>
# <tt>linux32</tt>
# <tt>linux64</tt>
# <tt>milotix</tt>
# <tt>openbsd</tt>
# <tt>pcdos</tt>
# <tt>win311</tt>
# <tt>win95</tt>
# <tt>winnt32</tt>
# <tt>winnt64</tt>
 
{| class="wikitable" width="900px"
|-
! style="text-wrap:nowrap;width:90px" | Utility
! style="text-wrap:nowrap;width:30px" | 1
! style="text-wrap:nowrap;width:30px" | 2
! style="text-wrap:nowrap;width:30px" | 3
! style="text-wrap:nowrap;width:30px" | 4
! style="text-wrap:nowrap;width:30px" | 5
! style="text-wrap:nowrap;width:30px" | 6
! style="text-wrap:nowrap;width:30px" | 7
! style="text-wrap:nowrap;width:30px" | 8
! style="text-wrap:nowrap;width:30px" | 9
! style="text-wrap:nowrap;width:30px" | 10
! style="text-wrap:nowrap;width:30px" | 11
! style="text-wrap:nowrap;width:30px" | 12
! style="text-wrap:nowrap;width:30px" | 13
! style="text-wrap:nowrap;width:30px" | 14
! style="text-wrap:nowrap;width:30px" | 15
! style="text-wrap:nowrap;width:30px" | 16
! style="text-wrap:nowrap;width:30px" | 17
! Notes
! Notes
|-
|-
| class="mw-code" | $BYBLOS/sbin
| style="text-align:center" | [[Hinterlib]]
| "script" binaries
| style="text-align:center" class="cell-green" | ✔
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" |
| <tt>libc</tt> surrogate + kernel
|-
| style="text-align:center" | [[Inbound]]
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
| style="text-align:center" | [[Outbound]]
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
| style="text-align:center" | [[Rebound]]
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
| style="text-align:center" | [[Earthbound]]
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| &nbsp;
|-
| style="text-align:center" | [[Forerunner]]
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/linux64
| style="text-align:center" | [[Precursor]]
| GNU/Linux on x86-64 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/linux32
| style="text-align:center" | [[Simbel]]
| GNU/Linux on i686 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/freebsd
| style="text-align:center" | [[Oración]]
| FreeBSD on x86-64 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/darwin86
| style="text-align:center" | [[FCC]]
| macOS on x86-64 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" |
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
|-
|-
| class="mw-code" | $BYBLOS/darwinm1
| style="text-align:center" | [[Quindle]]
| macOS on Apple Silicon sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| [[A*]] foundation program
|-
|-
| class="mw-code" | $BYBLOS/milotix
| style="text-align:center" | [[Gauntlet]]
| MILOTIX on x86-64 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/win311
| style="text-align:center" | [[Senusret's browser|Senusret's]]
| Windows 3.11 Win16 i286 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| A* foundation program
|-
|-
| class="mw-code" | $BYBLOS/win95
| style="text-align:center" | [[Sirius C*]]
| Windows 95/98/Me Win32 i386 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/winnt32
| style="text-align:center" | [[NatPython]]
| Windows NT 4.0 i386 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/winnt64
| style="text-align:center" | [[SablMap]]
| Windows NT 5.1 x86-64 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/pcdos
| style="text-align:center" | [[CheckASCII]]
| Real mode IBM-PC-DOS i286 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/ibmpc
| style="text-align:center" | [[Checkline]]
| Real mode non-DOS BIOS direct i286 sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| &nbsp;
|-
|-
| class="mw-code" | $BYBLOS/agbhb
| style="text-align:center" | [[Flow72]]
| Nintendo Game Boy Advance homebrew sysroot
| style="text-align:center" class="cell-red" | ✖
|
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-green" | ✔
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" | ✖
| style="text-align:center" class="cell-red" |
| &nbsp;
|}
 
===Installation===
The root directory of the Byblos 1 SDK is whatever the value of the <code>$BYBLOS</code> environment variable is, falling back to <code>/opt/byblos</code> (the default value of <code>$BYBLOS</code>). Within this directory, the following hierarchy is observed:
 
{| class="wikitable" width="900px"
|-
|-
| class="mw-code" | $BYBLOS/agbsp
! Path
| Nintendo Game Boy Advance source-patching sysroot
! Description
|
! Notes
|-
|-
| class="mw-code" | $BYBLOS/illumos
| <tt>$BYBLOS/{}</tt>
| illumos on SPARC V9 sysroot
| Target root
|
| Use target's ident in place of <code>{}</code>
|-
|-
| class="mw-code" | $BYBLOS/astar
| <tt>$BYBLOS/sbin</tt>
| [[A*]] on [[Anodyne]] sysroot
| "script" binaries
|
|
|-
|-
| class="mw-code" | $BYBLOS/include
| <tt>$BYBLOS/include</tt>
| C, C++ and C* header files
| C and C* header files
|
|
|-
|-
| class="mw-code" | $BYBLOS/conf
| <tt>$BYBLOS/conf</tt>
| Configuration settings
| Configuration settings
|
|
|-
|-
| class="mw-code" | $BYBLOS/man
| <tt>$BYBLOS/man</tt>
| Documentation files
| Documentation files
|
|
|-
|-
| class="mw-code" | $BYBLOS/system
| <tt>$BYBLOS/system</tt>
| SDK internal management data
| SDK internal management data
| reserved for the ''exclusive use'' of the Byblos SDK; outside applications should '''never''' assume anything about this directory's contents or even that it exists at all
| reserved for the ''exclusive use'' of the Byblos SDK; outside applications should '''never''' assume anything about this directory's contents or even that it exists at all
Line 100: Line 898:
"Script" binaries are programs that are, by themselves, architecture independent, usually because they are interpreted or compiled just-in-time on loading. These are separated from native binaries which are, as files, specific to the architecture in use. Byblos does not support any architectures other than the one in use on a given system (more exactly, whichever µarch the running kernel is compiled for). For instance, if a user is running a "multilib" system such as on <tt>amd64</tt> with i386 as <code>lib32/</code>, it will only support <tt>amd64</tt>.
"Script" binaries are programs that are, by themselves, architecture independent, usually because they are interpreted or compiled just-in-time on loading. These are separated from native binaries which are, as files, specific to the architecture in use. Byblos does not support any architectures other than the one in use on a given system (more exactly, whichever µarch the running kernel is compiled for). For instance, if a user is running a "multilib" system such as on <tt>amd64</tt> with i386 as <code>lib32/</code>, it will only support <tt>amd64</tt>.


The Byblos SDK operates on the premise that the working development directory can be anywhere, while all tools and support files are either provided within the hierarchy above, or assumed present on the system-level. System-level utilities and libraries should be provisioned using system package managers and treated in full mutual exclusion to Byblos-specific tooling; Byblos stuff is not compiled into <code>/usr/local</code>, and system stuff is never compiled into <code>$BYBLOS</code>. Even if one must manually compile a package from source, it should '''NEVER''' be installed with its <code>--sysroot</code> set to <code>$BYBLOS</code>! (Use <code>/usr/local</code> instead.)
The Byblos 1 SDK operates on the premise that the working development directory can be anywhere, while all tools and support files are either provided within the hierarchy above, or assumed present on the system-level. System-level utilities and libraries should be provisioned using system package managers and treated in full mutual exclusion to Byblos-specific tooling; Byblos stuff is not compiled into <code>/usr/local</code>, and system stuff is never compiled into <code>$BYBLOS</code>. Even if one must manually compile a package from source, it should '''never''' be installed with its <code>--sysroot</code> set to <code>$BYBLOS</code>! (Use <code>/usr/local</code> instead.)


When developing new SDK components in a source tree, they should be built and installed into <code>$BYBLOS/local/*</code> for testing and personal use. Packaged SDK software downloaded or installed from elsewhere will be configured to be installed into <code>$BYBLOS/*</code>, where it is versioned and stripped and so on.
When developing new SDK components in a source tree, they should be built and installed into <code>$BYBLOS/local/*</code> for testing and personal use. Packaged SDK software downloaded or installed from elsewhere will be configured to be installed into <code>$BYBLOS/*</code>, where it is versioned and stripped and so on.


===Name registration===
<!-- XXX: pending rewrite about Byblos 2
Byblos maintains a registration system to prevent name collisions inside its root hierarchy. Every project or package has a "master name" by which it is known, and a set of "servile names" inside the <code>bin/</code>, <code>include/</code>, <code>lib/</code>, <code>libexec/</code>, and <code>sbin/</code> subfolders each. Ordinarily, servile names inside <code>include/</code> are not provided to third parties. The details of this registry and its governance are ''to be determined''.
 
===Removable media and RAM drives on DOS===
===Removable media and RAM drives on DOS===
What <code>$BYBLOS</code> resolves to and its underlying media are distinguished intelligently on Unices, where the canonical resolution of <code>/opt/byblos</code> and its contents can be mount points or symbolic links to just about anything. This is not the case on DOSes, since drive letters come into play. Fortunately, the variance that we wish to accommodate is limited to those drive letters.
What <code>$BYBLOS</code> resolves to and its underlying media are distinguished intelligently on Unices, where the canonical resolution of <code>/opt/byblos</code> and its contents can be mount points or symbolic links to just about anything. This is not the case on DOSes, since drive letters come into play. Fortunately, the variance that we wish to accommodate is limited to those drive letters.
Line 117: Line 913:
* <code>$BYBDRV</code> = <tt>E,A,B,D,C,Z</tt>
* <code>$BYBDRV</code> = <tt>E,A,B,D,C,Z</tt>


The SDK, along with any and all programs that use its support library, will have file I/O subroutines that stitch together the base path with the drive letters to try when resolving paths. Byblos will also provide dynamic, hands-free integration with the <code>$PATH</code> executable resolution approach and will know where to look for <code>#include</code>s, libraries and other data automatically, using support library subroutines.
The SDK, along with any and all programs that use its support library, will have file I/O subroutines that stitch together the base path with the drive letters to try when resolving paths. Byblos will also provide dynamic, hands-free integration with the <code>$PATH</code> executable resolution approach and will know where to look for <code>#include</code>s, libraries and other data automatically, using support library subroutines. -->
 
==Components==
Yellow 〜 boxes indicate eventual support will be given, just not in the initial phases of development (usually due to bootstrapping concerns).
 
{| class="wikitable" style="text-align:center"
|-
! Component
! Sirius DOS
! style="padding-left:1rem;padding-right:1rem" | A*
! MILOTIX
! GNU/Linux
! FreeBSD
! OpenBSD
! Darwin
! illumos
|-
| [[Hinterlib]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Inbound]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Outbound]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Rebound]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Earthbound]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Forerunner]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Precursor]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[Simbel]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|-
| [[VR6]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Sirius C*]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Oración]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Feeble C compiler]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Quindle]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-red" | ✖
| class="cell-red" | ✖
| class="cell-red" | ✖
| class="cell-red" | ✖
| class="cell-red" | ✖
| class="cell-red" | ✖
|-
| [[Gauntlet]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Senusret's browser]]
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
| class="cell-yellow" | 〜
|-
| [[Cigarbochs]]
| class="cell-red" | ✖
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
| class="cell-green" | ✔
|}
 
===Petit utilities===
* <code>chkenc</code> &ndash; inspect and validate text encodings of files
* <code>liner</code> &ndash; inspect and validate line lengths


[[Category:Applications of mechanicalism]][[Category:Unix developments]]
[[Category:Applications of mechanicalism]][[Category:Unix developments]]

Revision as of 05:48, 20 June 2024

Byblos SDK
Created by Alexander Nicholi
Initial release unreleased
Written in ANSI C, Make, POSIX sh
OSes Darwin, GNU/Linux
ISAs Apple silicon, x86-64
Licence ASL 1.1

Byblos is a software development kit developed for Sirius DOS, A* and Unix-based servers, with distinction for MILOTIX and Linux, BSD and Darwin (pan-Unix) support. It is divided into two versions: Byblos 1, a provisional SDK that uses existing compiler toolchains and host infrastructure of Unix-like operating systems, and Byblos 2, the proper SDK that provides its own C compiler, assembler, and the first C* compiler.

Byblos 1

Platform support

Byblos 1 is multi-platform. While it endeavours to target all systems of relevance to Xion Megatrends, only three host platforms are supported: GNU/Linux on Intel 64, Darwin/XNU on Intel 64 and Darwin/XNU on Apple silicon. The following table gives Byblos 1's platform support matrix with respect to building and running software in the first and second tables, respectively.

Compile time support matrix

Host Target
agbhb agbsp astar darwin86 darwinm1 freebsd
linux64 devkitARM devkitARM unknown none none LLVM
darwin86 devkitARM devkitARM unknown hb:LLVM hb:LLVM hb:LLVM
darwinm1 devkitARM devkitARM unknown hb:LLVM hb:LLVM hb:LLVM
Host Target
ibmpc illumos linux32 linux64 milotix openbsd
linux64 djGPP LLVM LLVM LLVM unknown LLVM
darwin86 djGPP hb:LLVM hb:LLVM hb:LLVM unknown hb:LLVM
darwinm1 djGPP hb:LLVM hb:LLVM hb:LLVM unknown hb:LLVM
Host Target
pcdos win311 win95 winnt32 winnt64  
linux64 djGPP djGPP MinGW MinGW MinGW  
darwin86 djGPP djGPP MinGW MinGW MinGW  
darwinm1 djGPP djGPP MinGW MinGW MinGW  

Runtime support matrix

Host Target
agbhb agbsp astar darwin86 darwinm1 freebsd
linux64 mGBA mGBA unknown none none QEMU/u
darwin86 mGBA mGBA unknown native none QEMU/u
darwinm1 mGBA mGBA unknown Rosetta 2 native QEMU/u
Host Target
ibmpc illumos linux32 linux64 milotix openbsd
linux64 Bochs QEMU/h native-ish native unknown QEMU/u
darwin86 Bochs QEMU/h QEMU/u QEMU/u unknown QEMU/u
darwinm1 Bochs QEMU/h QEMU/u QEMU/u unknown QEMU/u
Host Target
pcdos win311 win95 winnt32 winnt64  
linux64 DOSBox DOSBox Wine Wine Wine  
darwin86 DOSBox DOSBox Wine Wine Wine  
darwinm1 DOSBox DOSBox Wine Wine Wine  

Tool list

Tool name Description
devkitARM devkitPro's 32-bit ARM GCC toolchain.
hb:LLVM LLVM installed via Homebrew on macOS.
LLVM LLVM installed on a Unix-like.
djGPP Modified GCC for compiling 16-bit DOS programs.
MinGW Modified GCC for targeting Microsoft Windows.
mGBA Accurate GBA emulator.
QEMU/u QEMU virtualisation framework, in the low-friction userland virtualisation mode.
QEMU/h QEMU virtualisation framework, using a full-fat VM.
Bochs Accurate IBM-PC emulator.
Wine Translation layer for Windows programs to run on other operating systems.
Rosetta 2 Apple's transition system for running Intel Mac programs on Apple Silicon.
DOSBox Accurate MS-DOS emulator with a focus on gaming.

Supported targets

Target Full name ISA Host ASM C bin Notes
agbhb GBA homebrew ARMv4T Scratch-building GBA ROMs.
agbsp GBA sourcepage ARMv4T Source-patching existing GBA ROMs.
astar Anodyne A* unknown Too early to specify.
darwin86 Intel Mac x86-64 v1  
darwinm1 Apple Silicon Mac ARMv8 Only host that can target everything.
freebsd FreeBSD x86-64 v1  
ibmpc Real mode IBM-PC Intel i286 Not specific to any DOS conventions.
illumos illumos/OpenIndiana SPARC64 V9  
linux32 GNU/Linux 32-bit Intel i686  
linux64 GNU/Linux 64-bit x86-64 v1  
milotix MILOTIX x86-64 v3  
openbsd OpenBSD x86-64 v1  
pcdos Real mode PC-DOS Intel i286  
win311 Windows 3.11 Intel i286  
win95 Windows 95, 98 & Me Intel i386  
winnt32 Windows NT 4.0 32-bit Intel i386  
winnt64 Windows NT 5.1 64-bit x86-64 v1  
Notes
  • binpacking is a highly portable method of compiling assets statically into binaries
  • For assembly, uncertainty exists about toolchain support on macOS
  • For binpacking, it may eventually work but needs further research

Programs list

  1. agbhb
  2. agbsp
  3. astar
  4. darwin86
  5. darwinm1
  6. freebsd
  7. ibmpc
  8. illumos
  9. linux32
  10. linux64
  11. milotix
  12. openbsd
  13. pcdos
  14. win311
  15. win95
  16. winnt32
  17. winnt64
Utility 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Notes
Hinterlib libc surrogate + kernel
Inbound  
Outbound  
Rebound  
Earthbound  
Forerunner  
Precursor  
Simbel  
Oración  
FCC
Quindle A* foundation program
Gauntlet  
Senusret's A* foundation program
Sirius C*  
NatPython  
SablMap  
CheckASCII  
Checkline  
Flow72  

Installation

The root directory of the Byblos 1 SDK is whatever the value of the $BYBLOS environment variable is, falling back to /opt/byblos (the default value of $BYBLOS). Within this directory, the following hierarchy is observed:

Path Description Notes
$BYBLOS/{} Target root Use target's ident in place of {}
$BYBLOS/sbin "script" binaries
$BYBLOS/include C and C* header files
$BYBLOS/conf Configuration settings
$BYBLOS/man Documentation files
$BYBLOS/system SDK internal management data reserved for the exclusive use of the Byblos SDK; outside applications should never assume anything about this directory's contents or even that it exists at all

"Script" binaries are programs that are, by themselves, architecture independent, usually because they are interpreted or compiled just-in-time on loading. These are separated from native binaries which are, as files, specific to the architecture in use. Byblos does not support any architectures other than the one in use on a given system (more exactly, whichever µarch the running kernel is compiled for). For instance, if a user is running a "multilib" system such as on amd64 with i386 as lib32/, it will only support amd64.

The Byblos 1 SDK operates on the premise that the working development directory can be anywhere, while all tools and support files are either provided within the hierarchy above, or assumed present on the system-level. System-level utilities and libraries should be provisioned using system package managers and treated in full mutual exclusion to Byblos-specific tooling; Byblos stuff is not compiled into /usr/local, and system stuff is never compiled into $BYBLOS. Even if one must manually compile a package from source, it should never be installed with its --sysroot set to $BYBLOS! (Use /usr/local instead.)

When developing new SDK components in a source tree, they should be built and installed into $BYBLOS/local/* for testing and personal use. Packaged SDK software downloaded or installed from elsewhere will be configured to be installed into $BYBLOS/*, where it is versioned and stripped and so on.