Misc.RuntimeID(3)

πŸ“¦
version 5.5.0 Β· 2 versions
, in arch rolling

πŸ’– NAME πŸ’–

Misc.RuntimeID β€” bestie, the docs literally say no description 😭 which is so unserious of them, so lemme tell you what's actually going on down here instead.


πŸŽ€ Module πŸŽ€

Module Misc.RuntimeID


✨ Documentation ✨

πŸ¦‹ Module RuntimeID

: sig end

Okay so boom β€” this whole module is about manipulating the Runtime ID values, and those get used to mangle the filenames of shared libraries and the bytecode interpreters. Yes, "mangle" is the technical term, we're slaying fr fr πŸ’…


🧚 The type, aka the whole vibe check

type t = private {
  dev : bool ;  (* true if this not an unaltered official release of OCaml *)
  release : int ;  (* Release number (OCaml 5.5 is release 21) *)
  reserved : int ;  (* The number of reserved bits (0-31) in the value header *)
  no_flat_float_array : bool ;  (* true if float arrays must be boxed
                                    (i.e. configured with --disable-flat-float-array) *)
  fp : bool ;  (* true if frame pointers are required (i.e. configured
                  with --enable-frame-pointers *)
  tsan : bool ;  (* true if ThreadSanitizer (TSAN) is required (i.e.
                    configured with --enable-tsan) *)
  int31 : bool ;  (* true if the platform has 31-bit int s (i.e. 32-bit systems) *)
  static : bool ;  (* true if dynamic loading of libraries is not supported *)
  no_compression : bool ;  (* true if compressed marshalling is not supported *)
  ansi : bool ;  (* true if Unicode support on Windows is disabled *)
  }

So it's a private record (you can look, you can't just build one yourself β€” respectful πŸ‘‘) and every field is basically a little flag telling you how this particular OCaml got built:

  • dev β€” true if this is not an unaltered official release of OCaml πŸ™ˆ
  • release β€” the release number. Iconic detail: OCaml 5.5 is release 21 πŸ”₯
  • reserved β€” how many reserved bits (0–31) live in the value header
  • no_flat_float_array β€” true if float arrays must be boxed, i.e. it was configured with --disable-flat-float-array
  • fp β€” true if frame pointers are required, i.e. configured with --enable-frame-pointers
  • tsan β€” true if ThreadSanitizer (TSAN) is required, i.e. configured with --enable-tsan
  • int31 β€” true if the platform has 31-bit ints, i.e. 32-bit systems
  • static β€” true if dynamic loading of libraries is not supported
  • no_compression β€” true if compressed marshalling is not supported
  • ansi β€” true if Unicode support on Windows is disabled

🌈 Runtime IDs

🌸 val make_zinc

val make_zinc : ?dev:bool -> ?release:int -> ?no_flat_float_array:bool
-> ?int31:bool -> ?static:bool -> ?no_compression:bool -> unit -> t

Returns the Zinc Runtime ID for the parameters you hand it β€” and it'll pull default values from Config and Sys as necessary when you don't 🫢


πŸ’œ val make_bytecode

val make_bytecode : ?dev:bool -> ?release:int -> ?reserved:int ->
?no_flat_float_array:bool -> ?int31:bool -> ?static:bool ->
?no_compression:bool -> ?ansi:bool -> unit -> t

Returns the Bytecode Runtime ID for the given parameters β€” again, defaults come from Config and Sys as necessary ✨


⭐ val make_native

val make_native : ?dev:bool -> ?release:int -> ?reserved:int ->
?no_flat_float_array:bool -> ?fp:bool -> ?tsan:bool -> ?int31:bool ->
?static:bool -> ?no_compression:bool -> ?ansi:bool -> unit -> t

Returns the Native Runtime ID for the given parameters, defaults from Config and Sys as necessary, you know the drill by now πŸŽ€


πŸ’– val is_zinc

val is_zinc : t -> bool

is_zinc t is true if t can be used as a Zinc Runtime ID πŸ‘‘


πŸ¦‹ val is_bytecode

val is_bytecode : t -> bool

is_bytecode t is true if t can be used as a Bytecode Runtime ID 🌸


πŸ”₯ val is_native

val is_native : t -> bool

is_native t is true if t can be used as a Native Runtime ID πŸ’…


πŸ“ val to_string

val to_string : t -> string

Returns the 4-character representation of a Misc.RuntimeID.t. Four characters!! That's it!! Tiny icon ✨


🧚 val of_string

val of_string : string -> t option

Converts the 4-character representation back to a Misc.RuntimeID.t. Note the option β€” it might not vibe, so it can hand you None πŸ™ˆ


🌈 val ocamlrun

val ocamlrun : string -> t -> string

ocamlrun variant runtime_id returns the name for the runtime for the given Zinc Runtime ID 🫢


πŸ’œ val shared_runtime

val shared_runtime : ?runtime_id:t -> ?host:string -> ?prefix:string ->
Sys.backend_type -> string

shared_runtime ?runtime_id ?host ?prefix backend returns the name of the shared runtime for the given backend.

The defaults, bestie, listen closely:

  • runtime_id defaults to Misc.RuntimeID.make_bytecode if backend = Sys.Bytecode, and to Misc.RuntimeID.make_native if backend = Sys.Native
  • host defaults to Config.target
  • prefix defaults to "-l"
  • and important: the function does not append Config.ext_dll 😀

e.g.:

shared_runtime ~host:"x86_64-pc-linux-gnu" Native
  = "-lasmrun-x86_64-pc-linux-gnu-b100"

…for a default OCaml 5.5 build on a 64-bit system with shared library support and compressed marshalling πŸ’–


🐚 val stubslib

val stubslib : ?runtime_id:t -> ?host:string -> string -> string

stublibs ?runtime_id ?host dllname returns the name for the given DLL basename.

Heads up: dllname should not include Config.ext_dll β€” and the result doesn't include it either, so don't come for me about the extension missing, it's on purpose πŸ’€

host and runtime_id default to Config.target and Misc.RuntimeID.make_bytecode respectively ✨

e.g.:

stubslib ~host:"x86_64-pc-linux-gnu" "dllunixbyt"
  = "dllunixbyt-x86_64-pc-linux-gnu-001b"

…for a default OCaml 5.5 build on a 64-bit system with shared library support and compressed marshalling 🌸


That's the whole page, no skips, no cap 🫢 β€” this was the Misc.RuntimeID(3) man page straight outta the OCaml library, generated by OCamldoc on 2026-06-22. Bye bestie, go mangle some filenames responsibly πŸ’…βœ¨

πŸ“¦ where this page comes from