Skip to content

Allow generating bytecode executables without the header #6199

@vicuna

Description

@vicuna

Original bug ID: 6199
Reporter: @alainfrisch
Status: confirmed (set by @damiendoligez on 2014-06-04T20:05:23Z)
Resolution: open
Priority: normal
Severity: feature
Category: configure and build/install
Monitored by: @gasche

Bug description

ocamlc generates bytecode executable starting with a header in charge of launching ocamlrun. Under Unix, this is a simple #! header (containing the absolute path of ocamlrun) and under Windows, this is an ad hoc program obtained from stdlib/header.c. This creates some issues:

  • Bootstrapping the compiler produces ocamlc/ocamllex executables (stored in the SVN) which depend on the machine where bootstrapping was done. Simply bootstrapping the same version on two different working copies will give different results.

  • The header encourages to not call ocamlrun explicitly, but this makes it difficult to provide a relocatable binary distribution of the toolchain, or simply to distribute a bytecode executable (if not compiled with -custom, we really need to call ocamlrun anyway).

  • Under Windows, the header is not tiny (about 223kB). (Arguably, we don't really care.) More importantly, maybe, is that calling a bytecode executable with the header creates two Windows processes, while using ocamlrun explicitly creates only one.

I propose to add a link-time flag to ocamlc to avoid inserting an header in the resulting program (and probably stop setting its executable flag). Or maybe this could simply be a special value for use_runtime. We would then use this flag so that the bootstrap tools (boot/ocamlc, boot/ocamllex) don't contain this header.

This will not fix the idempotency problem completely (because some local configuration values are hardcoded in config.ml), but it will be a good step in this direction. Having real idempotency of the bootstrap procedure would allow a nice application: checking in a CI server that the bootstrap fixpoint is reached in the SVN.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions