[WIP SMLnj 0/1] Add SMLnj.

  • Done
  • quality assurance status badge
Details
5 participants
  • Brett Gilio
  • Brett Gilio
  • Foo Chuan Wei
  • Josselin Poiret
  • Tim Lee
Owner
unassigned
Submitted by
Brett Gilio
Severity
normal
B
B
Brett Gilio wrote on 14 Dec 2019 05:04
(address . guix-patches@gnu.org)
871rt77dsl.fsf@posteo.net
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@posteo.net>
Date: Fri, 13 Dec 2019 22:02:56 -0600
Subject: [WIP SMLnj 0/1] Add SMLnj.

Just wanted to share my progress on packaging SMLnj for Guix.
This is another one in my series of somewhat difficult and thorny to package.
SMLnj by default is 32-bit, we need to ensure that it has access to the new
64-bit functionality for it to work properly with some SML libraries.
Otherwise, this package just has some unknown behavior that I personally am
stumped on how to solve currently.

Wanting to share if anybody wants to help, and so I can keep track of my progress.

Send revisions by re-rolling n+1.

Brett Gilio (1):
gnu: Add smlnj.

gnu/packages/sml.scm | 89 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)

--
2.24.1
B
B
Brett Gilio wrote on 14 Dec 2019 05:06
[WIP SMLnj 1/1] gnu: Add smlnj.
(address . 38606@debbugs.gnu.org)
87y2vf5z5o.fsf@posteo.net
From 74605396e2d932adb8e570702ec2d3b767b17715 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@posteo.net>
Date: Fri, 13 Dec 2019 22:02:20 -0600
Subject: [WIP SMLnj 1/1] gnu: Add smlnj.

* gnu/packages/sml.scm (smlnj): New variable.
---
gnu/packages/sml.scm | 89 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)

Toggle diff (99 lines)
diff --git a/gnu/packages/sml.scm b/gnu/packages/sml.scm
index 30ee58c498..da332e2b2e 100644
--- a/gnu/packages/sml.scm
+++ b/gnu/packages/sml.scm
@@ -75,3 +75,92 @@ function interface, and a symbolic debugger.")
(license
(list license:lgpl2.1
license:lgpl2.1+))))
+
+(define (smlnj-file version filename hash)
+ (origin
+ (method url-fetch)
+ (uri (string-append "http://smlnj.cs.uchicago.edu/dist/working/" version "/" filename))
+ (sha256
+ (base32
+ hash))))
+
+(define-public smlnj ;; TODO: Incomplete.
+ (package
+ (name "smlnj")
+ (version "110.94")
+ (source (plain-file "" ""))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key inputs #:allow-other-keys)
+ (for-each
+ (lambda (file)
+ (invoke "tar" "xvf" (assoc-ref inputs file)))
+ (list "config"
+ "cm"
+ "compiler"
+ "runtime"
+ "system"
+ "MLRISC"
+ "smlnj-lib"
+ "old-basis"
+ "ckit"
+ "nlffi"
+ "cml"
+ "eXene"
+ "ml-lpt"
+ "ml-lex"
+ "ml-yacc"
+ "ml-burg"
+ "pgraph"
+ "trace-debug-profile"
+ "heap2asm"
+ "smlnj-c"))
+ #t))
+ (delete 'configure)
+ (replace 'patch-source-shebangs
+ (lambda _ (substitute*
+ (list "config/install.sh"
+ "runtime/objs/mk.amd64-linux")
+ (("/bin/sh") (which "sh")))))
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "config/chk-global-names.sh"
+ (("CC=.*") "CC=gcc"))
+ (substitute* "config/unpack"
+ (("# Now do it:") "exit 0"))
+ (substitute* "config/_arch-n-opsys"
+ (("uname") (which "uname")))
+ (substitute* "config/install.sh"
+ (("DEFAULT_SIZE=\"32\"")
+ "DEFAULT_SIZE=\"64\"")
+ (("BASEDIR=\\$ROOT/base")
+ "BASEDIR=$ROOT"))
+ (invoke "sh" "config/install.sh"))))))
+ (native-inputs
+ `(("cm" ,(smlnj-file version "cm.tgz" "1x70nrk1gnxrzx16c7dyns35zkrqc0ngqyk34880ih04ccwmyxkp"))
+ ("smlnj-c" ,(smlnj-file version "smlnj-c.tgz" "1w6yrckbn5yxi3m0hqb57lwmf7pri66yi0zs2ahvcv5bwbr4dfh1"))
+ ("config" ,(smlnj-file version "config.tgz" "16ynwrakbcv5mp8i596aw8da09qdjkx9j0y5wxgix8aa99px4aba"))
+ ("compiler" ,(smlnj-file version "compiler.tgz" "1fmxj017s9bg1hr4psvcxasp0hcrc00bk9f0845fr7gy8mb743a3"))
+ ("runtime" ,(smlnj-file version "runtime.tgz" "08xq9ddp4ciqi1rwsnma0rsj7ydlbzcb9pc9m27n4krd61h8k4z9"))
+ ("system" ,(smlnj-file version "system.tgz" "0lmi03mx9fbrdshazqmrvg1j4s6hnpyfm90rl7f8qhgy0qi8almh"))
+ ("MLRISC" ,(smlnj-file version "MLRISC.tgz" "0y3f1ffzpqfn03a941dmjsr0zz4lz742ww1zbfnp15jbcy7mybiv"))
+ ("smlnj-lib" ,(smlnj-file version "smlnj-lib.tgz" "1vvlgws7kb53v63hwfakvq5xbiix1pqiafk5m86qas46ayy731g7"))
+ ("old-basis" ,(smlnj-file version "old-basis.tgz" "1kjgwnz0caymk4im9mjf88f2cym8bndnz0r84di5l4bd6pkwl8b2"))
+ ("ckit" ,(smlnj-file version "ckit.tgz" "158973wwd4pkf6fpzwyfm9968xl7pmb2sd2zf1fb3s055gm5anz2"))
+ ("nlffi" ,(smlnj-file version "nlffi.tgz" "13b3561b2bxpxyyy8ld359na7vimndw53nsc0fgr9li4xa3y70hl"))
+ ("cml" ,(smlnj-file version "cml.tgz" "0q00nmsqq33vdykyz9mgsy7r437l26gnxxmfl03ls88kiq7fbq3l"))
+ ("eXene" ,(smlnj-file version "eXene.tgz" "0phxh34psji67z30lq61b8pkwp7m45pakn6vnk592lmibikax2q0"))
+ ("ml-lpt" ,(smlnj-file version "ml-lpt.tgz" "053784lbf57pzd80gz4x7chqyxvdn580ix6pkqwcr1vwpv980zyj"))
+ ("ml-lex" ,(smlnj-file version "ml-lex.tgz" "052w6ck80v1jgql4m0k24hkkx9k4qwvqgxvk22hnwfh6k1avrk1i"))
+ ("ml-yacc" ,(smlnj-file version "ml-yacc.tgz" "1vj346ffzx7vbcnzhw49cqzlmfw35hzzhvlivyakdqalqwc97h6m"))
+ ("ml-burg" ,(smlnj-file version "ml-burg.tgz" "02qw4xkdh4h6ngj8a5yhgg4k4ph6lnhslbfh1drdz79whd389lzx"))
+ ("pgraph" ,(smlnj-file version "pgraph.tgz" "0c4qgm46dvkix4s56hj3ii9025m3pcxj4hc2z4mcdxlw0gj0r684"))
+ ("trace-debug-profile" ,(smlnj-file version "trace-debug-profile.tgz" "1z8ip80hgnj637ywcpzj9hfbnsci3qsdhssdbgparkzh7mk2bi4i"))
+ ("heap2asm" ,(smlnj-file version "heap2asm.tgz" "0g0ndf4wj197igrac136lsc8wpj9686vv0kwarrbwffrrrkb1w76"))))
+ (description #f)
+ (synopsis #f)
+ (home-page #f)
+ (license #f)))
--
2.24.1
B
B
Brett Gilio wrote on 16 Jan 2020 01:36
[WIP v2 0/1] Add SMLNJ
(address . 38606@debbugs.gnu.org)
87imlcw83f.fsf@gnu.org
From 51d83f01e80f274fe30cf6cf39f5f0eff554c7a6 Mon Sep 17 00:00:00 2001
From: Brett Gilio <brettg@gnu.org>
Date: Wed, 15 Jan 2020 18:34:34 -0600
Subject: [WIP v2 0/1] Add SMLNJ

This is a revision of the original SMLNJ patch with some more progress.
This package still needs a considerable amount of work before it will be
considered ready. If you have time or interest, please do not hesitate to
contribute!

SMLNJ is an important package for our Standard ML compiler stack, especially
for bootstrapping.

Brett Gilio (1):
gnu: Add smlnj.

gnu/packages/sml.scm | 158 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 156 insertions(+), 2 deletions(-)

--
2.24.1
B
B
B
Brett Gilio wrote on 16 Jan 2020 15:59
(address . 38606@debbugs.gnu.org)
87lfq78n1a.fsf@gnu.org
One particularly interesting issue of this package is, after retrieving
a viable BOOTLIST file to use for compilation, we are left with this.

Toggle snippet (4 lines)
brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found

Not quite sure how to investigate this issue. If anybody has any
insights please share, otherwise I will just contact upstream in a the
coming days.

--
Brett M. Gilio
GNU Guix, Contributor | GNU Project, Webmaster
[DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]
<brettg@gnu.org> <brettg@posteo.net>
T
T
Tim Lee wrote on 30 Oct 2021 01:33
RE: [WIP SMLnj 0/1] Add SMLnj.
(address . brettg@gnu.org)(address . 38606@debbugs.gnu.org)
20211029233343.4cedgmubw3lscyke@localhost
Brett Gilio wrote on 2020-01-16:
Toggle quote (12 lines)
> One particularly interesting issue of this package is, after retrieving
> a viable BOOTLIST file to use for compilation, we are left with this.
>
> --8<---------------cut here---------------start------------->8---
> brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
> ./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found
> --8<---------------cut here---------------end--------------->8---
>
> Not quite sure how to investigate this issue. If anybody has any
> insights please share, otherwise I will just contact upstream in a the
> coming days.

Did you manage to get an answer from upstream? If so, what did they say?
F
F
Foo Chuan Wei wrote on 7 Nov 2021 16:00
Re: [WIP SMLnj 0/1] Add SMLnj.
(address . 38606@debbugs.gnu.org)(address . brettg@gnu.org)
PU1PR01MB21558D0068012C681046F2038D909@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Attachment: file
F
F
Foo Chuan Wei wrote on 8 Nov 2021 22:40
(address . 38606@debbugs.gnu.org)
PU1PR01MB2155FB74909CF0F067FFF7EA8D919@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Toggle quote (11 lines)
> /Users/jhr/Work/smlnj/sml-legacy/base/system/smlnj/installer.cm:29.7-29.32 Error: link-time exception in library code $smlnj/installer.cm@1570(installer/nix-install.sml)
> SysErr: No such file or directory [noent]<exec.c>
>
>
> /tmp/guix-build-smlnj-110.99.2.drv-0/bin/sml: Fatal error -- Uncaught exception Link with 0
> raised at ../cm/compile/link.sml:357.28-357.35
>
> FAILURE: unpacking failed
> ./config/install.sh: !!! Installation of libraries and programs failed.
> command "./config/install.sh" "-default" "64" failed with status 1

The error above occurs because the build process uses nix-install.sml,
and nix-install.sml uses `OS.Process.system` (in the `unpack` function).
`OS.Process.system` relies on /bin/sh, but /bin/sh is not present in the
Guix build environment. "No such file or directory" presumably refers to
the absence of /bin/sh.

Unfortunately, the fix might require some binary patching. /bin/sh is
hardcoded in sml.boot.amd64-unix/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm
(a binary file from boot.amd64-unix.tgz).
J
J
Josselin Poiret wrote on 9 Nov 2021 11:03
Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
(address . dev@jpoiret.xyz)
87v911fxxe.fsf@jpoiret.xyz
Foo Chuan Wei <chuanwei.foo@hotmail.com> writes:

Toggle quote (10 lines)
> The error above occurs because the build process uses nix-install.sml,
> and nix-install.sml uses `OS.Process.system` (in the `unpack` function).
> `OS.Process.system` relies on /bin/sh, but /bin/sh is not present in the
> Guix build environment. "No such file or directory" presumably refers to
> the absence of /bin/sh.
>
> Unfortunately, the fix might require some binary patching. /bin/sh is
> hardcoded in sml.boot.amd64-unix/SMLNJ-BASIS/.cm/amd64-unix/basis-common.cm
> (a binary file from boot.amd64-unix.tgz).

Linking [1] for our IRC discussion about this.

You proposed patching /bin/sh to /tmp/sh, and symlinking /tmp/sh
yourself, did that work?

If not, I can still write a SMLNJ binfile patcher if you feel the need
for it (literals should be pretty easy to patch, see
sml/gc/build-literals.c for their format).

Best,
Josslin Poiret

F
F
Foo Chuan Wei wrote on 10 Nov 2021 10:21
(name . Josselin Poiret)(address . dev@jpoiret.xyz)(address . 38606@debbugs.gnu.org)
PU1PR01MB2155C446AE68C88D9650BE4B8D939@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
On 2021-11-09, Josselin Poiret wrote:
Toggle quote (3 lines)
> You proposed patching /bin/sh to /tmp/sh, and symlinking /tmp/sh
> yourself, did that work?

Yes, it did work. I managed to build smlnj (including libraries). Thank
you for helping on IRC. Here's the patch that uses the /tmp/sh method:
F
F
Foo Chuan Wei wrote on 10 Nov 2021 12:07
Re: [bug#38606] [WIP v2 1/1] gnu: Add smlnj.
(address . brettg@gnu.org)(address . 38606@debbugs.gnu.org)
PU1PR01MB2155FCFCE641861DAB6A21DE8D939@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Toggle quote (12 lines)
> One particularly interesting issue of this package is, after retrieving
> a viable BOOTLIST file to use for compilation, we are left with this.
>
> --8<---------------cut here---------------start------------->8---
> brettg@oryx ~/Repos/smlnj [env]$ ./bin/.run/run.amd64-linux
> ./bin/.run/run.amd64-linux: Fatal error -- no in-core heap image found
> --8<---------------cut here---------------end--------------->8---
>
> Not quite sure how to investigate this issue. If anybody has any
> insights please share, otherwise I will just contact upstream in a the
> coming days.

For future reference:
It seems that this error can be avoided by deleting "PATH=/bin:/usr/bin"
from runtime/config/gen-posix-names.sh. In any case, /bin and /usr/bin
do not exist in Guix's build environment.
C
C
Chuan Wei Foo wrote on 12 Dec 2021 17:37
Re: [bug#38606] [WIP SMLnj 0/1] Add SMLnj.
(name . 38606-done@debbugs.gnu.org)(address . 38606-done@debbugs.gnu.org)
PU1PR01MB2155EE0682477105C1EB63838D739@PU1PR01MB2155.apcprd01.prod.exchangelabs.com
Closing this issue.
smlnj was added in commit f0adb870ac0ea70bf6fb7a68f8782833017342cd.
Attachment: file
Closed
?