Raymond Toy pushed to branch master at cmucl / cmucl

Commits:

1 changed file:

Changes:

  • BUILDING.md
    ... ... @@ -12,13 +12,13 @@ General Requirements
    12 12
     
    
    13 13
     In order to build CMU CL, you will need:
    
    14 14
     
    
    15
    -a. A working CMU CL binary.  There is no way around this requirement!
    
    15
    +1. A working CMU CL binary.  There is no way around this requirement!
    
    16 16
     
    
    17 17
        This binary can either be for the platform you want to target, in
    
    18 18
        that case you can either recompile or cross-compile, or for another
    
    19 19
        supported platform, in that case you must cross-compile, obviously.
    
    20 20
     
    
    21
    -a. A supported C compiler for the C runtime code.
    
    21
    +1. A supported C compiler for the C runtime code.
    
    22 22
     
    
    23 23
        Most of the time, this means GNU gcc, though for some ports it
    
    24 24
        means the vendor-supplied C compiler.  The compiler must be
    
    ... ... @@ -27,13 +27,13 @@ a. A supported C compiler for the C runtime code.
    27 27
        Note for FreeBSD 10 and above: The build requires gcc (Clang will
    
    28 28
        not work) and the lib32 compatiblity package.
    
    29 29
     
    
    30
    -a. GNU make
    
    30
    +1. GNU make
    
    31 31
     
    
    32 32
        This has to be available either as gmake or make in your PATH, or
    
    33 33
        the MAKE environment variable has to be set to point to the correct
    
    34 34
        binary.
    
    35 35
     
    
    36
    -a. The CMU CL source code
    
    36
    +1. The CMU CL source code
    
    37 37
     
    
    38 38
        Here you can either use one of the release source tarballs, or
    
    39 39
        check out the source code directly from the public CMUCL git
    
    ... ... @@ -48,16 +48,19 @@ Setting up a build environment
    48 48
     ------------------------------
    
    49 49
     
    
    50 50
     1. Create a base directory and change to it
    
    51
    -
    
    51
    +```
    
    52 52
         mkdir cmucl ; cd cmucl
    
    53
    -
    
    54
    -2.) Fetch the sources and put them into the base directory
    
    55
    -
    
    53
    +```
    
    54
    +2. Fetch the sources and put them into the base directory
    
    55
    +```
    
    56 56
         tar xzf /tmp/cmucl-source.tar.gz
    
    57
    +```
    
    57 58
     
    
    58 59
         or, if you want to use the git sources directly:
    
    59 60
     
    
    61
    +```
    
    60 62
         git clone https://gitlab.common-lisp.net/cmucl/cmucl.git
    
    63
    +```
    
    61 64
     
    
    62 65
         Whatever you do, the sources must be in a directory named src
    
    63 66
         inside the base directory.  Since the build tools keep all
    
    ... ... @@ -81,7 +84,9 @@ quick guide.
    81 84
        Use this to build from a version of CMUCL that is very close to the
    
    82 85
        sources you are trying to build now:
    
    83 86
     
    
    87
    +```
    
    84 88
        bin/build.sh -C "" -o "<name-of-old-lisp> <options-to-lisp>"
    
    89
    +```
    
    85 90
     
    
    86 91
        This will build CMUCL 3 times, each time with the result of the
    
    87 92
        previous build.  The last time, the additional libraries like CLX,
    
    ... ... @@ -100,7 +105,9 @@ quick guide.
    100 105
     
    
    101 106
        For these, you can use this:
    
    102 107
     
    
    108
    +```
    
    103 109
        bin/build.sh -C "" -o "<old-lisp>" -B boot1.lisp -B boot2.lisp
    
    110
    +```
    
    104 111
     
    
    105 112
        The bootstrap files listed with the -B option (as many as needed)
    
    106 113
        are loaded in order, so be sure to get them right.
    
    ... ... @@ -121,9 +128,9 @@ file date of a boot file is later than the version of CMUCL you are
    121 128
     building from, then you need to use b) or c) above.  You may need to
    
    122 129
     read the bootfiles for additional instructions, if any.  
    
    123 130
     
    
    124
    -If there are no bootfiles, then you can use a) above.
    
    131
    +If there are no bootfiles, then you can use 1. above.
    
    125 132
     
    
    126
    -The build.sh script supports other options, and bin/build.sh -?
    
    133
    +The `build.sh` script supports other options, and `bin/build.sh -?`
    
    127 134
     will give a quick summary.  Read bin/build.sh for more
    
    128 135
     information. 
    
    129 136
     
    
    ... ... @@ -247,195 +254,197 @@ Overview of the included build scripts
    247 254
     
    
    248 255
     * bin/build.sh [-123obvuBCU?]
    
    249 256
     
    
    250
    -This is the main build script.  It essentially calls the other build
    
    251
    -scripts described below in the proper sequence to build cmucl from an
    
    252
    -existing binary of cmucl.
    
    257
    +    This is the main build script.  It essentially calls the other build
    
    258
    +    scripts described below in the proper sequence to build cmucl from an
    
    259
    +    existing binary of cmucl.
    
    253 260
     
    
    254 261
     * bin/create-target.sh target-directory [lisp-variant [motif-variant]]
    
    255 262
     
    
    256
    -This script creates a new target directory, which is a shadow of the
    
    257
    -source directory, that will contain all the files that are created by
    
    258
    -the build process.  Thus, each target's files are completely separate
    
    259
    -from the src directory, which could, in fact, be read-only.  Hence you
    
    260
    -can simultaneously build CMUCL for different targets from the same
    
    261
    -source directory.
    
    262
    -
    
    263
    -The first argument is the name of the target directory to create.  The
    
    264
    -remaining arguments are optional.  If they are not given, the script
    
    265
    -tries to determine the lisp variant and motif variant from the system
    
    266
    -the script is running on.
    
    267
    -
    
    268
    -The lisp-variant (i.e. the suffix of the src/lisp/Config.* to use as
    
    269
    -the target's Config file), and optionally the motif-variant (again the
    
    270
    -suffix of the src/motif/server/Config.* file to use as the Config file
    
    271
    -for the target's CMUCL/Motif server code).  If the lisp-variant is
    
    272
    -given but the motif-variant is not, the motif-variant is determined
    
    273
    -from the lisp-variant.
    
    274
    -
    
    275
    -The script will generate the target directory tree, link the relevant
    
    276
    -Config files, and generate place-holder files for various files, in
    
    277
    -order to ensure proper operation of the other build-scripts.  It also
    
    278
    -creates a sample setenv.lisp file in the target directory, which is
    
    279
    -used by the build and load processes to set up the correct list of
    
    280
    -*features* for your target lisp core.
    
    281
    -
    
    282
    -IMPORTANT: You will normally NOT have to modify the sample setenv.lisp
    
    283
    -file, if you are building from a binary that has the desired features.
    
    284
    -In fact, the sample has all code commented out, If you want to add or
    
    285
    -remove features, you need to include code that puts at least a minimal
    
    286
    -set of features onto the list (use PUSHNEW and/or REMOVE).  You can
    
    287
    -use the current set of *features* of your lisp as a first guide.  The
    
    288
    -sample setenv.lisp includes a set of features that should work for the
    
    289
    -intended configuration.  Note also that some adding or removing some
    
    290
    -features may require a cross-compile instead of a normal compile.
    
    263
    +    This script creates a new target directory, which is a shadow of the
    
    264
    +    source directory, that will contain all the files that are created by
    
    265
    +    the build process.  Thus, each target's files are completely separate
    
    266
    +    from the src directory, which could, in fact, be read-only.  Hence you
    
    267
    +    can simultaneously build CMUCL for different targets from the same
    
    268
    +    source directory.
    
    269
    +
    
    270
    +    The first argument is the name of the target directory to create.  The
    
    271
    +    remaining arguments are optional.  If they are not given, the script
    
    272
    +    tries to determine the lisp variant and motif variant from the system
    
    273
    +    the script is running on.
    
    274
    +
    
    275
    +    The lisp-variant (i.e. the suffix of the src/lisp/Config.* to use as
    
    276
    +    the target's Config file), and optionally the motif-variant (again the
    
    277
    +    suffix of the src/motif/server/Config.* file to use as the Config file
    
    278
    +    for the target's CMUCL/Motif server code).  If the lisp-variant is
    
    279
    +    given but the motif-variant is not, the motif-variant is determined
    
    280
    +    from the lisp-variant.
    
    281
    +
    
    282
    +    The script will generate the target directory tree, link the relevant
    
    283
    +    Config files, and generate place-holder files for various files, in
    
    284
    +    order to ensure proper operation of the other build-scripts.  It also
    
    285
    +    creates a sample setenv.lisp file in the target directory, which is
    
    286
    +    used by the build and load processes to set up the correct list of
    
    287
    +    *features* for your target lisp core.
    
    288
    +
    
    289
    +    IMPORTANT: You will normally NOT have to modify the sample setenv.lisp
    
    290
    +    file, if you are building from a binary that has the desired features.
    
    291
    +    In fact, the sample has all code commented out, If you want to add or
    
    292
    +    remove features, you need to include code that puts at least a minimal
    
    293
    +    set of features onto the list (use PUSHNEW and/or REMOVE).  You can
    
    294
    +    use the current set of *features* of your lisp as a first guide.  The
    
    295
    +    sample setenv.lisp includes a set of features that should work for the
    
    296
    +    intended configuration.  Note also that some adding or removing some
    
    297
    +    features may require a cross-compile instead of a normal compile.
    
    291 298
     
    
    292 299
     * bin/clean-target.sh [-l] target-directory [more dirs]
    
    293 300
     
    
    294
    -Cleans the given target directory, so that all created files will be
    
    295
    -removed.  This is useful to force recompilation.  If the -l flag is
    
    296
    -given, then the C runtime is also removed, including all the lisp
    
    297
    -executable, any lisp cores, all object files, lisp.nm, internals.h,
    
    298
    -and the config file.
    
    301
    +    Cleans the given target directory, so that all created files will be
    
    302
    +    removed.  This is useful to force recompilation.  If the -l flag is
    
    303
    +    given, then the C runtime is also removed, including all the lisp
    
    304
    +    executable, any lisp cores, all object files, lisp.nm, internals.h,
    
    305
    +    and the config file.
    
    299 306
     
    
    300 307
     * bin/build-world.sh target-directory [build-binary] [build-flags...]
    
    301 308
     
    
    302
    -Starts a complete world build for the given target, using the lisp
    
    303
    -binary/core specified as a build host.  The recompilation step will
    
    304
    -only recompile changed files, or files for which the fasl files are
    
    305
    -missing.  It will also not recompile the C runtime code (the lisp
    
    306
    -binary).  If a (re)compilation of that code is needed, the genesis
    
    307
    -step of the world build will inform you of that fact.  In that case,
    
    308
    -you'll have to use the rebuild-lisp.sh script, and then restart the
    
    309
    -world build process with build-world.sh
    
    309
    +    Starts a complete world build for the given target, using the lisp
    
    310
    +    binary/core specified as a build host.  The recompilation step will
    
    311
    +    only recompile changed files, or files for which the fasl files are
    
    312
    +    missing.  It will also not recompile the C runtime code (the lisp
    
    313
    +    binary).  If a (re)compilation of that code is needed, the genesis
    
    314
    +    step of the world build will inform you of that fact.  In that case,
    
    315
    +    you'll have to use the rebuild-lisp.sh script, and then restart the
    
    316
    +    world build process with build-world.sh
    
    310 317
     
    
    311 318
     * bin/rebuild-lisp.sh target-directory
    
    312 319
     
    
    313
    -This script will force a complete recompilation of the C runtime code
    
    314
    -of CMU CL (aka the lisp executable).  Doing this will necessitate
    
    315
    -building a new kernel.core file, using build-world.sh.
    
    320
    +    This script will force a complete recompilation of the C runtime code
    
    321
    +    of CMU CL (aka the lisp executable).  Doing this will necessitate
    
    322
    +    building a new kernel.core file, using build-world.sh.
    
    316 323
     
    
    317 324
     * bin/load-world.sh target-directory version
    
    318 325
     
    
    319
    -This will finish the CMU CL rebuilding process, by loading the
    
    320
    -remaining compiled files generated in the world build process into the
    
    321
    -kernel.core file, that also resulted from that process, creating the
    
    322
    -final lisp.core file.
    
    326
    +    This will finish the CMU CL rebuilding process, by loading the
    
    327
    +    remaining compiled files generated in the world build process into the
    
    328
    +    kernel.core file, that also resulted from that process, creating the
    
    329
    +    final lisp.core file.
    
    323 330
     
    
    324
    -You have to pass the version string as a second argument.  The dumped
    
    325
    -core will anounce itself using that string.  Please don't use a string
    
    326
    -consisting of an official release name only, (e.g. "18d"), since those
    
    327
    -are reserved for official release builds.  Including the build-date in
    
    328
    -ISO8601 format is often a good idea, e.g. "18d+ 2002-05-06" for a
    
    329
    -binary that is based on sources current on the 6th May, 2002, which is
    
    330
    -post the 18d release.
    
    331
    +    You have to pass the version string as a second argument.  The dumped
    
    332
    +    core will anounce itself using that string.  Please don't use a string
    
    333
    +    consisting of an official release name only, (e.g. "18d"), since those
    
    334
    +    are reserved for official release builds.  Including the build-date in
    
    335
    +    ISO8601 format is often a good idea, e.g. "18d+ 2002-05-06" for a
    
    336
    +    binary that is based on sources current on the 6th May, 2002, which is
    
    337
    +    post the 18d release.
    
    331 338
     
    
    332 339
     * bin/build-utils.sh target-directory
    
    333 340
     
    
    334
    -This script will build auxiliary libraries packaged with CMU CL,
    
    335
    -including CLX, CMUCL/Motif, the Motif debugger, inspector, and control
    
    336
    -panel, and the Hemlock editor.  It will use the lisp executable and
    
    337
    -core of the given target.
    
    341
    +    This script will build auxiliary libraries packaged with CMU CL,
    
    342
    +    including CLX, CMUCL/Motif, the Motif debugger, inspector, and control
    
    343
    +    panel, and the Hemlock editor.  It will use the lisp executable and
    
    344
    +    core of the given target.
    
    338 345
     
    
    339
    -Note: To build with Motif (clm), you need to have the Motif libraries
    
    340
    -available and headers available to build motifd, the clm Motif server.
    
    341
    -OpenMotif is known to work.
    
    346
    +    Note: To build with Motif (clm), you need to have the Motif libraries
    
    347
    +    available and headers available to build motifd, the clm Motif server.
    
    348
    +    OpenMotif is known to work.
    
    342 349
     
    
    343
    -You may need to adjust the include paths and library paths in
    
    344
    -src/motif/server/Config.* to match where Motif is installed if the
    
    345
    -paths therein are incorrect.
    
    350
    +    You may need to adjust the include paths and library paths in
    
    351
    +    src/motif/server/Config.* to match where Motif is installed if the
    
    352
    +    paths therein are incorrect.
    
    346 353
     
    
    347
    -Unless you intend to use clm and motifd, you can safely ignore the
    
    348
    -build failure.  Everything else will have been compiled correctly; you
    
    349
    -just can't use clm.
    
    354
    +    Unless you intend to use clm and motifd, you can safely ignore the
    
    355
    +    build failure.  Everything else will have been compiled correctly; you
    
    356
    +    just can't use clm.
    
    350 357
     
    
    351 358
     * bin/make-dist.sh [-bg] [-G group] [-O owner] target-directory version arch os
    
    352 359
     
    
    353
    -This script creates both main and extra distribution tarballs from the
    
    354
    -given target directory, using the make-main-dist.sh and
    
    355
    -make-extra-dist.sh scripts.  The result will be two tar files.  One
    
    356
    -contains the main distribution including the runtime and lisp.core
    
    357
    -with PCL (CLOS); the second contains the extra libraries such as
    
    358
    -Gray-streams, simple-streams, CLX, CLM, and Hemlock.
    
    360
    +    This script creates both main and extra distribution tarballs from the
    
    361
    +    given target directory, using the make-main-dist.sh and
    
    362
    +    make-extra-dist.sh scripts.  The result will be two tar files.  One
    
    363
    +    contains the main distribution including the runtime and lisp.core
    
    364
    +    with PCL (CLOS); the second contains the extra libraries such as
    
    365
    +    Gray-streams, simple-streams, CLX, CLM, and Hemlock.
    
    359 366
     
    
    360
    -Some options that are available:
    
    367
    +    Some options that are available:
    
    361 368
     
    
    362
    -  -b           Use bzip2 compression
    
    363
    -  -g           Use gzip compression
    
    364
    -  -G group     Group to use
    
    365
    -  -O owner     Owner to use
    
    369
    +      -b           Use bzip2 compression
    
    370
    +      -g           Use gzip compression
    
    371
    +      -G group     Group to use
    
    372
    +      -O owner     Owner to use
    
    366 373
     
    
    367
    -If you specify both -b and -g, you will get two sets of tarfiles.  The
    
    368
    --G and -O options will attempt to set the owner and group of the files
    
    369
    -when building the tarfiles.  This way, when you extract the tarfiles,
    
    370
    -the owner and group will be set as specified.  You may need to be root
    
    371
    -to do this because many Unix systems don't normally let you change the
    
    372
    -owner and group of a file.
    
    374
    +    If you specify both -b and -g, you will get two sets of tarfiles.  The
    
    375
    +    -G and -O options will attempt to set the owner and group of the files
    
    376
    +    when building the tarfiles.  This way, when you extract the tarfiles,
    
    377
    +    the owner and group will be set as specified.  You may need to be root
    
    378
    +    to do this because many Unix systems don't normally let you change the
    
    379
    +    owner and group of a file.
    
    373 380
     
    
    374
    -The remaining arguments used to create the name of the tarfiles.  The
    
    375
    -names will have the form:
    
    381
    +    The remaining arguments used to create the name of the tarfiles.  The
    
    382
    +    names will have the form:
    
    376 383
     
    
    384
    +```
    
    377 385
        cmucl-<version>-<arch>-<os>.tar.bz2
    
    378 386
        cmucl-<version>-<arch>-<os>.extras.tar.bz2
    
    387
    +```
    
    379 388
     
    
    380
    -Of course, the "bz2" will be "gz" if you specified gzip compression
    
    381
    -instead of bzip.
    
    389
    +    Of course, the "bz2" will be "gz" if you specified gzip compression
    
    390
    +    instead of bzip.
    
    382 391
     
    
    383 392
     * /bin/make-main-dist.sh target-directory version arch os
    
    384 393
     
    
    385
    -This is script is not normally invoked by the user; make-dist will do
    
    386
    -it appropriately.
    
    394
    +    This is script is not normally invoked by the user; make-dist will do
    
    395
    +    it appropriately.
    
    387 396
     
    
    388
    -This script creates a main distribution tarball (both in gzipped and
    
    389
    -bzipped variants) from the given target directory.  This will include
    
    390
    -all the stuff that is normally included in official release tarballs
    
    391
    -such as lisp.core and the PCL libraries, including Gray streams and
    
    392
    -simple streams.
    
    397
    +    This script creates a main distribution tarball (both in gzipped and
    
    398
    +    bzipped variants) from the given target directory.  This will include
    
    399
    +    all the stuff that is normally included in official release tarballs
    
    400
    +    such as lisp.core and the PCL libraries, including Gray streams and
    
    401
    +    simple streams.
    
    393 402
     
    
    394
    -This is intended to be run from make-dist.sh.
    
    403
    +    This is intended to be run from make-dist.sh.
    
    395 404
     
    
    396 405
     * bin/make-extra-dist.sh target-directory version arch os
    
    397 406
     
    
    398
    -This is script is not normally invoked by the user; make-dist will do
    
    399
    -it appropriately.
    
    407
    +    This is script is not normally invoked by the user; make-dist will do
    
    408
    +    it appropriately.
    
    400 409
     
    
    401
    -This script creates an extra distribution tarball (both in gzipped and
    
    402
    -bzipped variants) from the given target directory.  This will include
    
    403
    -all the stuff that is normally included in official extra release
    
    404
    -tarballs, i.e. the auxiliary libraries such as CLX, CLM, and Hemlock.
    
    410
    +    This script creates an extra distribution tarball (both in gzipped and
    
    411
    +    bzipped variants) from the given target directory.  This will include
    
    412
    +    all the stuff that is normally included in official extra release
    
    413
    +    tarballs, i.e. the auxiliary libraries such as CLX, CLM, and Hemlock.
    
    405 414
     
    
    406
    -This is intended to be run from make-dist.sh.
    
    415
    +    This is intended to be run from make-dist.sh.
    
    407 416
     
    
    408 417
     
    
    409 418
     * cross-build-world.sh target-directory cross-directory cross-script 
    
    410 419
                            [build-binary] [build-flags...]
    
    411 420
     
    
    412
    -This is a script that can be used instead of build-world.sh for
    
    413
    -cross-compiling CMUCL.  In addition to the arguments of build-world.sh
    
    414
    -it takes two further required arguments:  The name of a directory that
    
    415
    -will contain the cross-compiler backend (the directory is created if
    
    416
    -it doesn't exist, and must not be the same as the target-directory),
    
    417
    -and the name of a Lisp cross-compilation script, which is responsible
    
    418
    -for setting up, compiling, and loading the cross-compiler backend.
    
    419
    -The latter argument is needed because each host/target combination of
    
    420
    -platform's needs slightly different code to produce a working
    
    421
    -cross-compiler.
    
    422
    -
    
    423
    -We include a number of working examples of cross-compiler scripts in
    
    424
    -the cross-scripts directory.  You'll have to edit the features section
    
    425
    -of the given scripts, to specify the features that should be removed
    
    426
    -from the current set of features in the host lisp, and those that
    
    427
    -should be added, so that the backend features are correct for the
    
    428
    -intended target.
    
    429
    -
    
    430
    -You can look at Eric Marsden's collection of build scripts for the
    
    431
    -basis of more cross-compiler scripts.
    
    421
    +    This is a script that can be used instead of build-world.sh for
    
    422
    +    cross-compiling CMUCL.  In addition to the arguments of build-world.sh
    
    423
    +    it takes two further required arguments:  The name of a directory that
    
    424
    +    will contain the cross-compiler backend (the directory is created if
    
    425
    +    it doesn't exist, and must not be the same as the target-directory),
    
    426
    +    and the name of a Lisp cross-compilation script, which is responsible
    
    427
    +    for setting up, compiling, and loading the cross-compiler backend.
    
    428
    +    The latter argument is needed because each host/target combination of
    
    429
    +    platform's needs slightly different code to produce a working
    
    430
    +    cross-compiler.
    
    431
    +
    
    432
    +    We include a number of working examples of cross-compiler scripts in
    
    433
    +    the cross-scripts directory.  You'll have to edit the features section
    
    434
    +    of the given scripts, to specify the features that should be removed
    
    435
    +    from the current set of features in the host lisp, and those that
    
    436
    +    should be added, so that the backend features are correct for the
    
    437
    +    intended target.
    
    438
    +
    
    439
    +    You can look at Eric Marsden's collection of build scripts for the
    
    440
    +    basis of more cross-compiler scripts.
    
    432 441
     
    
    433 442
     Step-by-Step Example of recompiling CMUCL for OpenBSD
    
    434 443
     -----------------------------------------------------
    
    435 444
     
    
    436 445
     Set up everything as described in the setup section above. Then
    
    437 446
     execute:
    
    438
    -
    
    447
    +```
    
    439 448
     # Create a new target directory structure/config for OpenBSD:
    
    440 449
     bin/create-target.sh openbsd OpenBSD_gencgc OpenBSD
    
    441 450
     
    
    ... ... @@ -487,10 +496,12 @@ bin/load-world.sh openbsd "18d+ 2002-05-06"
    487 496
     # core will announce.  Please always put the build-date and some
    
    488 497
     # other information in there, to make it possible to differentiate
    
    489 498
     # those builds from official builds, which only contain the release.
    
    499
    +```
    
    490 500
     
    
    491 501
     Now you should have a new lisp.core, which you can start with
    
    492
    -
    
    502
    +```
    
    493 503
     ./openbsd/lisp/lisp -core ./openbsd/lisp/lisp.core -noinit -nositeinit
    
    504
    +```
    
    494 505
     
    
    495 506
     Compiling sources that contain disruptive changes
    
    496 507
     -------------------------------------------------
    
    ... ... @@ -693,4 +704,4 @@ In particular steps 3, 4, and 5 can be combined into one by using the
    693 704
     -c, -r, and -l options for cross-build-world.sh.  The -c option cleans
    
    694 705
     out the targe and cross directories; -r does step 4; and -l does step
    
    695 706
     5.
    
    696
    -===============
    707
    +