+++ /dev/null
- ----------------------------------\r
- EiC BUILD INSTRUCTIONS \r
- \r
- by\r
-\r
- Ed Breen\r
-\r
- ---------TABLE-of-CONTENTS--------- \r
-\r
-1. INTRODUCTION:\r
-2. INSTALLING EIC FROM THE SOURCE DISTRIBUTION:\r
- Step 1\r
- Step 2 \r
- Step 3\r
- Step 4\r
- Step 5 \r
- Step 6\r
-3 BUILDING A TOY VERSION OF EiC\r
-4. EXPLANATION OF NON-PORTABLE MACROS USED:\r
- $(addprefix PREFIX,NAMES...) (from GNU info Make)\r
-5. TROUBLE SHOOTING:\r
-6. PORTING EiC TO OTHER PLATFORMS\r
-\r
- --END-of-TABLE-of-CONTENTS---------\r
-\r
- ------------------------------------\r
-- INTRODUCTION:\r
-\r
- EiC's distribution plus binaries require approximately 4\r
- Mbytes of disk space. To build EiC, you will need GNU make and\r
- gcc 2.6.3 or later. However, if you don't have GNU make then\r
- the section on 'explanation of non-portable macros' may help\r
- you over come this limitation.\r
-\r
-\r
- -------------------------------------------\r
-- INSTALLING EiC FORM THE SOURCE DISTRIBUTION:\r
-\r
- There are just six easy steps to installing EiC. Please read\r
- all six steps before starting at step 1.\r
-\r
--- Step 1\r
-\r
- Untar the distribution. It will automatically unpack itself\r
- into a subdirectory off the current directory. This\r
- subdirectory will be named EiC and will be referred to as the\r
- top EiC directory or the HOMEofEiC.\r
- \r
- If you use GNU tar, then:\r
- % tar -xvzf EiC.tar.gz\r
- else\r
- % gunzip EiC.tar.gz \r
- % tar -xvf EiC.tar.gz\r
-\r
--- Step 2 \r
-\r
- If you haven't already done so, then:\r
-\r
- % cd EiC\r
--- Step 3\r
-\r
- This step looks worse than it really is. You shouldn't have to\r
- do anything, other than setting the directory where EiC will\r
- be installed.\r
- \r
- In the project parameter file:\r
-\r
- /EiC/project.params\r
-\r
- you will need to set EiC's installation directory; this is\r
- where the EiC binary will be placed, via:\r
- \r
- INSTALL_DIR = $(HOME)/bin\r
-\r
- By default, it points to 'bin', which is assumed to be just\r
- off your home directory and within your search path. If you\r
- don't have a bin directory, make it or just change the\r
- assignment to point to any other directory that is in your\r
- search PATH, and that you have write access to.\r
-\r
- The rest of this step can now be skipped over and only if things\r
- fail, after step 4, will you need to refer to the rest of step\r
- 3.\r
- \r
- Now, you will need to:\r
-\r
- a) set the EiC project parameters, and\r
- b) check the appropriate platform parameters are\r
- set according to your site.\r
-\r
- Hopefully, the default settings will do. However, if you are\r
- uncertain about what to do, with respect to what the various\r
- parameters mean or platform types, then consult the DATA\r
- DICTIONARY section in the file:\r
- \r
- EiC/config/GuideLines.make.\r
-\r
- Now check the parameter settings in the file:\r
-\r
- EiC/config/$(PLATFORM)/make.params\r
-\r
- where $(PLATFORM) is the platform type that you are going\r
- to compile EiC for. Check the directory EiC/config\r
- for the platforms supported. They are indicated by\r
- directories with names starting with '_'; for example,\r
- _LINUX, _SOLARIS, _SUNOS, etc. \r
-\r
- If you find any parameter setting in the platform make.params\r
- file that are not to your liking, then you have can override\r
- these settings by placing a corresponding parameter in\r
- the file: \r
-\r
- EiC/override.params\r
-\r
- The main purpose of the override.params file is to\r
- allow for any peculiarities that are unique\r
- to any particular site. More information on this\r
- file can be found in the file itself.\r
- \r
-\r
--- Step 4\r
-\r
- From EiC's top directory type the following command:\r
- \r
- % config/makeconfig\r
-\r
- makeconfig will use its default procedures to determine your\r
- operating system, and other configuration settings. It will\r
- attempt to produce the file:\r
- \r
- EiC/make.proj\r
-\r
- that will contain the correct configuration setup for the EiC\r
- project Makefiles within your environment. To get more\r
- infomation about makeconfig type:\r
- \r
- % config/makeconfig -h\r
-\r
--- Step 5 \r
-\r
- If makeconfig was successful, then from the EiC top directory,\r
- type:\r
- \r
- % make install\r
- % make clean\r
- % rehash\r
- % cd test\r
- % test.sh // run EiC's test procedures\r
-\r
-\r
- You will have to also set the environmental variable\r
- HOMEofEiC to point to directory where EiC is\r
- installed. See README.BIN for further information on\r
- HOMEofEiC.\r
-\r
- Hopefully everythings goes to plan -- if not, see the section\r
- on trouble shooting below.\r
-\r
-\r
--- Step 6\r
- To make the documentation then\r
- \r
- % cd EiC/doc\r
- % make install\r
-\r
-\r
-- BUILDING A TOY VERSION OF EiC\r
-\r
- To build a version of the EiC interpreter\r
- that does not include EiC's runtime library\r
- then change to EiC's src directory\r
-\r
- % cd EiC/src\r
- % make -f makefile.seic \r
- % rm *.o\r
-\r
- This will produce the binary `seic'. It\r
- is the starting point for experimenting\r
- with EiC.\r
- \r
-- EXPLANATION OF NON-PORTABLE MACROS USED:\r
-\r
--- $(addprefix PREFIX,NAMES...) (from GNU info Make)\r
- \r
- The argument NAMES is regarded as a series of names, separated\r
- by whitespace; PREFIX is used as a unit. The value of PREFIX\r
- is prepended to the front of each individual name and the\r
- resulting larger names are concatenated with single spaces\r
- between them. For example,\r
-\r
- $(addprefix src/,foo bar)\r
-\r
- produces the result `src/foo src/bar'.\r
-\r
-- TROUBLE SHOOTING:\r
-\r
- If the compiler complains about duplicate definitions\r
- of standard C funtions, then make sure you are using\r
- gcc 2.6.3 or later, via:\r
-\r
- % gcc -v\r
- \r
- If the installation procedure completely fails, then\r
- check that make is being initiated correctly in each\r
- subdirectly. You may need to set the SHELL variable in the\r
- top level make file (../EiC/Makefile):\r
-\r
- SHELL = /bin/ksh\r
-\r
-\r
- If you don't have a ksh shell, then you may have to \r
- do most things by hand:\r
-\r
- % cd EiC\r
- % config/makeconfig\r
- % make install // let it fail\r
- % cd module/stdClib/src\r
- % make headers\r
- % cd ../../../src \r
- % make headers\r
- % cd ../module/stdClib/src\r
- % make install\r
- % cd ../../../src\r
- % make install\r
- % cd ../main\r
- % make install\r
- \r
- Check that you aren't installing EiC for a platform it\r
- doesn't know about (see porting EiC to other platforms below).\r
- \r
- If everything compiles, without errors, and your system reports\r
- after typing:\r
-\r
- % eic\r
- eic: Command not found\r
- \r
- Then check your search path and the directory where EiC\r
- was installed. Or maybe just enter\r
- \r
- % rehash\r
-\r
-\r
- Read all of step 3.\r
-\r
-\r
--------------------------------------------------\r
-- PORTING EiC TO OTHER PLATFORMS\r
-\r
-This part of the documentation explains how to port EiC to a new\r
-platform. It is also assumed that the following steps will be\r
-performed on the new platform. The following outlines the steps I\r
-took to port EiC to a Dec Alpha.\r
-\r
--- Porting the EiC interpreter\r
-\r
- First get the platform name \r
- via `uname'.\r
-\r
- At the system prompt:\r
-\r
- % uname\r
- OSF1\r
-\r
- Therefore, the DEC alpha platform name is:\r
- \r
- OSF1\r
-\r
- Now change to the directory EiC/config and\r
- create the appropriate platform directory.\r
-\r
- % cd EiC/config\r
- % mkdir _OSF1 \r
-\r
- Note the leading underscore. Now pick one of the existing\r
- platforms that you feel is compatible with the new\r
- platform and copy over its `make.params' file.\r
- For example:\r
-\r
- % cp _LINUX/make.params _OSF1\r
- \r
- Now edit the copy of make.params, to reflect to the new OS, in\r
- particular change the PLATFORM designation.\r
-\r
- Next, check for data alignment, pointer size and\r
- byte ordering, by compiling and running \r
- `alignment' in EiC/config:\r
-\r
- % gcc alignment.c\r
- % a.out\r
- #define EIC_LITTLE_ENDIAN 1\r
- {1, 1}, /* char */\r
- {2, 2}, /* short */\r
- {4, 4}, /* int */\r
- {8, 8}, /* long */\r
- {4, 4}, /* float */\r
- {8, 8}, /* double */\r
- {8, 8}, /* pointer */\r
- {0, 1}, /* struct*/\r
-\r
- % rm a.out\r
-\r
- Now you need to inform EiC about this by\r
- adding the following structure to the \r
- EiC source file `EiC/src/metric.h': \r
-\r
- /* Dec Alpha */\r
- #ifdef _OSF1\r
- #define EIC_LITTLE_ENDIAN 1\r
- short metric[8][2] = { /* size, alignment pairs */\r
- {1, 1}, /* char */\r
- {2, 2}, /* short */\r
- {4, 4}, /* int */\r
- {8, 8}, /* long */\r
- {4, 4}, /* float */\r
- {8, 8}, /* double */\r
- {8, 8}, /* pointer */\r
- {0, 1}, /* struct*/\r
- };\r
- #endif\r
- \r
- Now inform the makefile system of the new platform.\r
- In the directory EiC type:\r
-\r
- <EiC> % config/makeconfig\r
- TOP_DIR = /home/edb/compilers/EiC\r
- CONFIG_DIR = /home/edb/compilers/EiC/config\r
- platform = _OSF1\r
-\r
- This completes the porting of the EiC\r
- interpeter and the Makefile system to the new\r
- platform. Now the fun begins -- we have to\r
- port EiC's runtime library.\r
-\r
--- Porting the runtime library.\r
-\r
- Change to the directory EiC/module/stdClib/src and\r
- add the appropriate patform directory:\r
-\r
- <EiC/.../src> mkdir _OSF1\r
-\r
- Copy the contents of an already established\r
- platform to this directory:\r
-\r
- <EiC/.../src> cp -r _LINUX/* _OSF1\r
-\r
- Now each header file in this directory must be\r
- made compatible with the platform header files in\r
- `/usr/include'. Also the file "fcntl.h" needs to be\r
- addressed. However, you don't have to worry about\r
-\r
- stdio.h\r
- stdlib.h\r
- errno.h\r
- stdtypes.h\r
- limits.h\r
- float.h\r
- signal.h\r
- termdefs.h\r
-\r
- As these files get automaticly constructed by EiC's build\r
- process during installation, by the EiC/config/genstdio.c\r
- program. As this document is usually as not as up todate as\r
- the gentstdio.c file you should also check it for any other .h\r
- files it may now be generating. To do this, just look at the\r
- contents of the main() function.\r
- \r
- To help with this process of generating header files, I used\r
- gcc and grep; for example, when inspecting termios.h:\r
- \r
- </usr/include> gcc -D_POSIX_SOURCE -E termios.h | less\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r