[m-dev.] for review: README.lcc
Peter Ross
peter.ross at miscrit.be
Mon Feb 5 03:56:42 AEDT 2001
When building in the none.* grades, I also needed to set the
--max-jump-table-size flag.
Can't remember what size it was. Try building options.m to see if it is
still needed.
Pete
On Sun, Feb 04, 2001 at 11:41:48PM +1100, Fergus Henderson wrote:
> I've installed lcc on venus (using the RPM, I'm afraid, since there
> was no Debian package for it), and I'm in the process of setting up
> regular nightly tests using lcc. But I thought it worth documenting
> the various hacks needed to get it to work.
>
> ----------
>
> Estimated hours taken: 3
>
> README.lcc:
> New file. Documents how to install using lcc.
>
> ----------
>
> This file documents how to use lcc 4.1 as the C compiler when
> installing Mercury on Linux.
>
> Some of the same issues may arise when using lcc on other systems,
> or when using other versions of lcc.
>
> 1. You can get lcc from <http://www.cs.princeton.edu/software/lcc/>.
> In particular Linux RPM's are available from
> <ftp://ftp.cs.princeton.edu/pub/packages/lcc/contrib>.
>
> 2. Apply the following patches:
>
> (i) On at least some versions of Linux, the following patch must be
> applied to /usr/include/stdint.h. This is because the Boehm (et al)
> collector uses elf.h, and the version of elf.h that gets installed on
> Linux uses by default is not compatible with lcc -- it uses
> typedefs defined as `long long' in stdint.h.
>
> If you prefer you can copy stdint.h to /usr/local/lib/lcc-4.1/include
> and then apply the patch there.
>
> This should be fixed in newer versions of glibc.
>
> --- /usr/include/stdint.h Sun Nov 7 03:23:27 1999
> +++ ./stdint.h Tue Nov 21 05:25:39 2000
> @@ -28,6 +28,22 @@
> #include <stddef.h>
> #include <bits/wordsize.h>
>
> +#ifdef __GNUC__
> +__extension__
> +typedef long long __long_long;
> +__extension__
> +typedef unsigned long long __u_long_long;
> +#else
> +typedef struct {
> + long __ll_first;
> + long __ll_second;
> +} __long_long;
> +typedef struct {
> + unsigned long __ull_first;
> + unsigned long __ull_second;
> +} __u_long_long;
> +#endif
> +
> /* Exact integral types. */
>
> /* Signed. */
> @@ -42,8 +58,10 @@
> typedef long int int64_t;
> # else
> __extension__
> -typedef long long int int64_t;
> +typedef __long_long int64_t;
> # endif
> +#else
> +typedef __long_long int64_t;
> #endif
>
> /* Unsigned. */
> @@ -54,7 +72,7 @@
> typedef unsigned long int uint64_t;
> #else
> __extension__
> -typedef unsigned long long int uint64_t;
> +typedef __u_long_long uint64_t;
> #endif
>
>
> @@ -68,7 +86,7 @@
> typedef long int int_least64_t;
> #else
> __extension__
> -typedef long long int int_least64_t;
> +typedef __long_long int_least64_t;
> #endif
>
> /* Unsigned. */
> @@ -79,7 +97,7 @@
> typedef unsigned long int uint_least64_t;
> #else
> __extension__
> -typedef unsigned long long int uint_least64_t;
> +typedef __u_long_long uint_least64_t;
> #endif
>
>
> @@ -95,7 +113,7 @@
> typedef int int_fast16_t;
> typedef int int_fast32_t;
> __extension__
> -typedef long long int int_fast64_t;
> +typedef __long_long int_fast64_t;
> #endif
>
> /* Unsigned. */
> @@ -108,7 +126,7 @@
> typedef unsigned int uint_fast16_t;
> typedef unsigned int uint_fast32_t;
> __extension__
> -typedef unsigned long long int uint_fast64_t;
> +typedef __u_long_long uint_fast64_t;
> #endif
>
>
> @@ -134,9 +152,9 @@
> typedef unsigned long int uintmax_t;
> #else
> __extension__
> -typedef long long int intmax_t;
> +typedef __long_long intmax_t;
> __extension__
> -typedef unsigned long long int uintmax_t;
> +typedef __u_long_long uintmax_t;
> #endif
>
> (ii) On some versions of Linux, the following patch must be
> applied to /usr/local/lib/lcc-4.1/include/stdio.h.
> This is due to an incompatibility between glibc's <sys/types.h>
> and lcc's <stdio.h>.
>
> --- stdio.h.orig Thu Jul 6 10:12:07 2000
> +++ stdio.h Sun Feb 4 18:33:46 2001
> @@ -444,18 +444,20 @@
> are originally defined in the Large File Support API. */
>
> /* Types needed in these functions. */
> -#ifndef off_t
> +#if !defined off_t && !defined __off_t_defined
> # ifndef __USE_FILE_OFFSET64
> typedef __off_t off_t;
> # else
> typedef __off64_t off_t;
> # endif
> # define off_t off_t
> +# define __off_t_defined
> #endif
>
> -#if defined __USE_LARGEFILE64 && !defined off64_t
> +#if defined __USE_LARGEFILE64 && !defined off64_t && !defined __off64_t_defined
> typedef __off64_t off64_t;
> # define off64_t off64_t
> +# define __off64_t_defined
> #endif
>
> (iii) lcc 4.1 on at least some versions of Linux has a bug where
> `lcc -static' is broken. To work around that, rename the
> original `lcc' program as `lcc.orig' and replace it with the
> following script:
>
> #!/bin/sh
> lcc.orig "$@" -lc -lgcc
>
> This results in some spurious warnings when invoking `lcc -c ...',
> but ensures that `lcc -static ...' works.
>
> 3. Set the environment variable `CC' to `lcc' before running configure.
>
> 4. Follow the normal installation instructions in the INSTALL file.
>
> --
> Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
> | of excellence is a lethal habit"
> WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.
> --------------------------------------------------------------------------
> mercury-developers mailing list
> Post messages to: mercury-developers at cs.mu.oz.au
> Administrative Queries: owner-mercury-developers at cs.mu.oz.au
> Subscriptions: mercury-developers-request at cs.mu.oz.au
> --------------------------------------------------------------------------
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list