jimm@amiga.UUCP (Jim Mackraz) (01/01/86)
My native AMIGA development environment(s).
I develop AMIGA code on a Sun with Greenhills, and an Amiga
with either 512K or 1M bytes of RAM:. Below is my contribution
to setting up a native development environment that:
1) Provides me with disk space for my source code
2) Is relatively fast, by making use of the RAM: device
3) Is not difficult to re-establish in the event of a new
CLI or compiler/libraries/includes release
4) Is convenient to set up when first booting or after crashes
I will describe both native environments I use. I will first describe
the diskettes, then the logical devices, then will present the sequence
files (shell scripts) I run to set up things and exactly what I do.
I welcome any observations which would make my life easier. I will
post any improvements which I am mailed that seem important.
Environment 1 (512KB of RAM):
Disks:
CLI -- workbench disk without the workbench. Previous postings
describe what to throw away. The c: directory on this disk is
quite full, including format, ED (or emacs) but no EDIT, various
development tools (wack, snoop, drip, atom, stripa, and other
stuff i don't use). This disk is used for boot, l:ram-handler,
and commands. Design goal (3) dictates that I don't spend a lot of
time messing with this disk.
I do, however, rename some frequently used commands, in particular,
"execute" has become "x". This is used frequently below.
INCLUDE3.03 -- current include files. These I copied off of the
development disk into INCLUDE3.03:include. (Some of) these files
are copied to RAM:include. This disk can then be removed and set
aside. In the root, INCLUDE3.03:, there is a sequence file
named copy-includes which copies to RAM:include the includes I need
for normal work. Abnormal work would lead me to create a family
of copy-includes'. See this file below.
By the way, new development disks will have comments stripped out of
the include files for at least three reasons: to fit them on the disk,
and to take up less room in ram:, and to take less time to parse
at compile time. I would prefer a set of each -- comments and
no-comments -- which I would keep on INCLUDE3.03; the former for
reference (until 1.1 manuals arrive), the latter for compiling.
C-DEVEL -- my C development disk. The includes are deleted, first
being copied to INCLUDE3.03. I don't know what came in the :c
directory, but everything but LC1, LC2, alink, and assem are gone,
either copied to CLI:c or thrown away. I threw LC away.
There is a directory C-DEVEL:src which contains project subdirectories,
in which I work. An example is C-DEVEL:src/go, in which I keep
source for a go-board/movie program I am playing with.
The sequence directory C-DEVEL:s contains all of the shell scripts I
will describe below. I also tossed most of what I found in this
directory.
Logical Devices:
After everything is set up, I have the made the following assignments,
or left them at their initial defaults.
SYS: CLI
C: SYS:c
DEV: C-DEVEL: ; name of development disk
lc: DEV:C ; where lattice passes are gotten
s: DEV:s ; sequence files found here
link: DEV:c ; where alink is found
lib: DEV:lib ; home of .lib files and startup stuff
include: RAM:include ; include files
go: DEV:src/Go ; my go board/movie program work directory
Sequence Files and Procedure:
After boot, I insert INCLUDE3.03: in df1: and execute:
x df1:copy-includes ; notice that I renamed execute
This builds a RAM:include directory.
Then I replace INCLUDE3.03 in df1: with C-DEVEL and execute:
x df1:s/setup
I am then ready to go.
I compile a single source file go.c by typing:
x cc go
and link using:
x ld go ; in fact "x ld" works, by default. See ld.
The file s:ld just alink's with go.with, which is in go:.
Here are the files. comments marked NOTE are added now:
::::::::::::::
copy-includes
::::::::::::::
; copy include files from disk to ram:
; name of this disk is INCLUDE3.03
assign include: INCLUDE3.03:include
failat 100 ; NOTE this is overkill
makedir ram:include
makedir ram:include/exec
makedir ram:include/intuition
makedir ram:include/graphics
makedir ram:include/devices
copy include:intuition/ to ram:include/intuition all quiet
copy include:exec to ram:include/exec all quiet
copy include:graphics/gfx.h to ram:include/graphics
copy include:graphics/clip.h to ram:include/graphics
copy include:graphics/view.h to ram:include/graphics
copy include:graphics/rastport.h to ram:include/graphics
copy include:graphics/layers.h to ram:include/graphics
copy include:graphics/text.h to ram:include/graphics
copy include:devices/timer.h to ram:include/devices
copy include:devices/inputevent.h to ram:include/devices
assign include: ram:include
::::::::::::::
setup
::::::::::::::
.key DEV/k
assign DEV: <DEV$C-DEVEL:>
assign lc: DEV:C
assign s: DEV:s
assign link: DEV:c
assign lib: DEV:lib
assign go: DEV:src/Go
::::::::::::::
cc
::::::::::::::
.Key file,opt1,opt2,opt3
if not exists <file$t1>.c
echo "File <file$t1>.c does not exist. Try again."
skip END
endif
LC:lc1 -cw -iINCLUDE: -iINCLUDE:lattice -oRAM: <file>.c
; NOTE this makes SURE that file.q is on RAM:
if not exists ram:<file>.q
echo "First pass failed"
skip END
endif
LC:lc2 -o<file>.obj ram:<file>.q
lab END
::::::::::::::
ld
::::::::::::::
.key file
link:alink with <file$go>.with
::::::::::::::
go.with
::::::::::::::
FROM *
LIB:Lstartup.obj,*
go.obj,*
go2.obj,*
godata.obj,*
goinit.obj,*
gomv.obj,*
gogadg.obj,*
godebug.obj
LIBRARY *
lib:lc.lib,*
lib:amiga.lib,*
lib:debug.lib
TO go
Environment 2 (1MB RAM):
Summary:
Frequently used commands, all scanned libraries, all includes
used, both passes of the compiler and the linker are all in RAM:
This makes for fast compiles, but slow reloading after a crash.
Only source and .obj and executable reside on disk. It so happens
that my source is on my DEV disk, but that is so I can work on
a 512KB machine. This setup would allow source-only disks to
be used in either DF0: or DF1:, with a backup disk in the other
drive.
Disks:
Same as above, with one exception. I will be putting frequently
used commands into RAM:c. To satisfy design goal (3), I do this
by copying CLI:c to RAM:c (all quiet) and then removing the disk
hogs that I don't use often. It is faster, however, not to copy
them at all, so I made a directory CLI:j and moved (rename) the
commands I don't like to copy to RAM: into CLI:j. Those commands
moved are a subset of those deleted from RAM:c by s:cram, below.
Logical Devices:
SYS: CLI: ; normally removed from DF0:
DEV: C-DEVEL: ; name of development disk
C: RAM:c ; a subset of commands
lc: RAM:LC ; where lattice passes are gotten
s: RAM:s ; sequence files searched here
link: RAM:LC ; where alink is found
lib: RAM:lib ; home of .lib files and startup stuff
include: RAM:include ; include files
go: DEV:src/Go ; my go board/movie program work directory
NOTE: the freedom to remove CLI: from the drive promotes making
backups, I found, since I leave a backup disk in DF0:. I put CLI
back into DF0: if I need to use a command which is not in
RAM:c (e.g. atom).
Sequence Files and Procedure:
Setup is different, but compile and link is the same, only
much, much faster.
Setup: after boot, put C-DEVEL: in DF1: and type
x df1:s/bigsetup.
For more setup speed, keep the secret sequence temp file in RAM:
cd ram:
makedir t
x df1:s/bigsetup
Notice that bigsetup has arguments which prevent parts of the big
operation from being done. Also, my addmem is done here, instead of
in my startup-sequence, which is probably not what the typical
memory-add-on owner will do.
::::::::::::::
bigsetup
::::::::::::::
. bigsetup -- set up from boot, including addmem
. arguments: c-omit commands, lc-omit lattice, lib-omitlibs
. mem-omit addmem, inc-omit includes, stop-abort
.key c/s,lc/s,lib/s,mem/s,inc/s,stop/s
; NOTE: "stop" allows you to abort if you type "x bigstep ?"
if not <stop$""> eq ""
echo "aborting execution"
quit 0
endif
cd c-devel:
if <mem$""> eq ""
echo "addmem"
addmem f00000 f7fffe
endif
; NOTE: this is only valid for a RAM cartridge like mine.
; you find your own extensions RAM address
; NOTE: trying to speed up subsequent EXECUTE scripts
if not exists ram:t
makedir ram:t
endif
cd ram:
echo "execute setup"
x c-devel:s/setup
echo "sequences to ram:"
x sram
if <c$""> eq ""
echo "commands to ram:"
x cram
endif
if <lc$""> eq ""
echo "lattice to ram:"
x lcram
endif
if <lib$""> eq ""
echo "libraries to ram:"
x libram
endif
; NOTE: this next will call for the includes disk which is typically
; not present at this point
if <inc$""> eq ""
echo "now includes"
x INCLUDE3.03:copy-includes
endif
::::::::::::::
sram
::::::::::::::
; set up script files in ram: disk
if not exists ram:s
makedir ram:s
endif
copy s: to ram:s all quiet
assign s: ram:s
::::::::::::::
cram
::::::::::::::
; cram -- put commands on ram:, delete not-often-used-and-big
if not exists ram:c
makedir ram:c
endif
copy c: to ram:c all
echo "commands copied"
assign c: ram:c
failat 100
cd c:
echo "delete many commands"
delete assem setserial debug absload wack stripa sort
delete say upload disked dumpobj addmem sendxon setparallel
delete atom colorp snoop freemap t ms loadwb romwack
delete wait dl which drip frags join fault reboot
delete prompt install relabel
cd ram:
::::::::::::::
lcram
::::::::::::::
; set up lattice passes in ram: disk
if not exists ram:LC
makedir ram:LC
endif
copy LC:LC1 ram:LC/LC1
copy LC:LC2 ram:LC/LC2
copy LINK:alink ram:LC/alink
assign LC: ram:LC
assign LINK: ram:LC
::::::::::::::
libram
::::::::::::::
; copy libs onto ram:
if not exists ram:lib
makedir ram:lib
endif
copy lib: to ram:lib all quiet
assign lib: ram:lib
delete lib:Astartup.obj ; I never use
----
Happy hacking: jimm