Mercurial > flash_v2
diff README.host @ 290:3ecf91f6663a
Update instructions for building the host-side software
| author | bartv |
|---|---|
| date | Tue, 13 Aug 2002 20:10:16 +0000 |
| parents | |
| children | 3f4258400ba5 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/README.host @@ -0,0 +1,344 @@ + eCos Host-side Software + ======================= + +This README file only describes the eCos host-side software. For +details of the eCos target-side software or the required toolchains, +please see other documentation. A good starting point is +http://sources.redhat.com/ecos + +There are two categories of host-side software. The host subdirectory +contains generic software, primarily related to the eCos configuration +technology. All eCos users will need to use some of this technology to +configure and build eCos, either using pre-built binaries or by +building the host-side software from source. The generic software +should be portable to a wide range of host platforms. + +There is also package-specific host-side software. Much of this is I/O +related. For example the generic USB-slave package contains some +programs related to testing; a test application is run on a target +with suitable USB slave-side hardware, and needs to interact with +another program running on the USB host; the latter is +package-specific host-side software and can be found in the +subdirectory packages/io/usb/slave. Code like this may have +significant platform dependencies and may only work on a single +platform or on a small number of platforms. There may also be +special requirements, for example it may be necessary to install some +programs suid root so that they have appropriate access to the +hardware. + + +The host subdirectory includes the following: + +infra/ + This is an implementation of the eCos infrastructure that can be + used on the host-side, and provides assertion, tracing and + testcase support. + + NOTE: the eCos infrastructure facilities are not especially + well-suited to host-side development, in particular they are not + C++-oriented. There are plans to remove the current infrastructure + completely and replace it with something more suitable. People + planning new projects should be aware of this, and may wish to + avoid using the current infrastructure. + +libcdl/ + The CDL library lies at the heart of the eCos configuration + technology. + +tools/configtool/ + The sources to the various configuration tools can be found here. + +tools/configtool/common/common/ + Contains sources related to makefile generation, shared by the + command line and graphical tools. + +tools/configtool/standalone/common/ + Contains the command line ecosconfig tool. + +tools/configtool/standalone/wxwin/ + Contains sources for the wxWindows-based, Linux and Windows graphical + configuration tool. The Windows version can currently only be + built with Visual C++, not with cygwin g++. + +tools/configtool/common/win32/ +tools/configtool/standalone/win32/ + Contains sources for the older, MFC-based, Windows-only graphical + configuration tool. Again this can currently only be built with + Visual C++. + +The two graphical configuration tools have their own build procedures, +described in tools/configtool/standalone/wxwin/ReadMe and +tools/configtool/standalone/win32/ReadMe respectively. + +Package-specific host-side code lives in the host subdirectory of the +appropriate package, for example packages/io/usb/slave/<version>/host. +Most packages only provide target-side code and hence will not have a +host subdirectory. Users can install various packages from a variety +of sources, and where a package does have host-side software the +package documentation should be consulted for further information. + + +Installing on Linux and Other Unix Systems +------------------------------------------ + +Both generic host-side software (infra, libcdl and ecosconfig) and +package-specific software can be built with the conventional +"configure/make/make install" sequence. However the code does not +conform fully to GNU coding standards so some operations such as "make +dist" are not supported. There is limited support for DejaGnu-based +testing. + +Much of the host-side software has a dependency on Tcl. This is not +supplied with the sources since many users will already have a +suitable installation, for example it is shipped as standard with +all major Linux distributions. Any release of Tcl from 8.0 onwards +should be usable. + +There are two main approaches to building the host-side software: + +1) build the generic and the package-specific code in one build tree. + This uses the top-level configure script. The script automatically + invokes the configure script in the main host subdirectory. In + addition it searches the packages hierarchy for host subdirectories + containing their own configure scripts and will invoke those. + + Note: the search for host subdirectories happens during configure + time, not during the make. If new packages with host-side code are + added to the repository then it will be necessary to re-run the + toplevel configure script. + +2) build the generic code in one build tree, using the configure + script in the toplevel's host subdirectory. Then build some or all + of the package-specific code in separate build trees, using the + configure scripts in each package's host subdirectory. + +The first approach is generally simpler. However some of the +package-specific code requires special installation, for example a +program may have to be installed suid root so that it has the right +privileges to access hardware, and hence the "make install" step has +to be run by the superuser. Also some of the package-specific code is +rather specialized and may be of no interest to many users. For +example, the USB testing code is only useful when developing +USB-based applications. Hence some users may prefer the second +approach, building just the generic code and a subset of the +package-specific code. + +It is necessary to use a separate build tree rather than build +directly in the source tree. This is enforced by the configure scripts. + + $ mkdir build + $ cd build + +The next step is to run the desired configure script. To build all +the host-side software this means the toplevel configure script: + + $ <path>/configure <args> + +Alternatively to build just the generic host-side software, use the +configure script in the host subdirectory. + + $ mkdir host + $ cd host + $ <path>/host/configure <args> + +Or, to build just one package's host-side code: + + $ mkdir -p packages/io/usb/slave/current/host + $ cd packages/io/usb/slave/current/host + $ <path>/packages/io/usb/slave/current/host/configure <args> + +(It is not actually necessary to use the same directory structure in +the build tree as in the source tree, but doing so can avoid +confusion). + +A list of all the command-line options can be obtained by running +"configure --help". The most important ones are as follows: + +1) --prefix. This can be used to specify the location of the install + tree, defaulting to /usr/local, so the ecosconfig program ends up + in /usr/local/bin/ecosconfig and the CDL library ends up in + /usr/local/lib/libcdl.a. If an alternative location is preferred + this can be specified with --prefix, for example: + + $ <path>/configure --prefix=/usr/local/ecos <args> + +2) --enable-debug. By default all assertions and tracing are disabled. + When debugging any of the generic host-side software these should + be enabled. Some package-specific code may not have any extra + debug support, in which case --enable-debug would be ignored. + + $ <path>/configure --enable-debug + + It is also possible to control most of the assertion and tracing + macros at a finer grain. This is intended mainly for use by the + developers. + + --disable-asserts disable all assertions + --disable-preconditions disable a subset of the assertions + --disable-postconditions disable a subset of the assertions + --disable-invariants disable a subset of the assertions + --disable-loopinvariants disable a subset of the assertions + --disable-tracing disable tracing + --disable-fntracing disable function entry/exit tracing + +3) --with-tcl=<path> + --with-tcl-header=<path> + --with-tcl-lib=<path> + --with-tcl-version=<number> + + The host-side tools have a dependency on Tcl, which is not supplied + with the sources because many people will already have a suitable + installation. Specifically it is necessary to have the header file + tcl.h and appropriate libraries such that -ltcl will work - this + can involve either static or shared libraries. + + By default the configure script will assume that there is a + suitable Tcl installation in the install location, so if there is + no --prefix argument then it will look for /usr/local/include/tcl.h + and it will add -L/usr/local/lib to the library search path. If + Tcl is installed elsewhere then this can be specified with a + --with-tcl option. For example, if the default installation in + /usr should be used then the following configure option is + appropriate: + + $ <path>/configure --with-tcl=/usr <args> + + If the Tcl libraries and Tcl headers are installed in different + locations, such as when a separate --prefix and --exec-prefix are + used, the --with-tcl-header and --with-tcl-lib options can be used + to specify both location. The configure script will expect to find + <tcl-header-dir>/include/tcl.h and <tcl-lib-dir>/lib/tclConfig.sh. + The --with-tcl option has precedence and if used will override the + --with-tcl-header and --with-tcl-lib options. + + It is possible to have multiple versions of Tcl installed, for + example libtcl8.0.a, libtcl8.1.a, and so on. Typically linking with + -ltcl will result in the latest version being used. It is possible + to specify a different version using --with-tcl-version, e.g.: + + $ <path>configure --with-tcl=/usr/local/scriptics --with-tcl-version=8.1 <args> + +Following the configure step the build tree should be set up +correctly. All that remains is the actual build and install: + + $ make + $ make install + +This should result in an ecosconfig executable, plus appropriate +libraries and header files. If the install prefix is a system +location, for example /usr/local/, then "make install" will normally +require root privileges. Also some of the package-specific software +has special installation requirements, for example programs that need +to be installed suid root, and this will also need root privileges. + + +Installing under Cygwin +----------------------- + +Installing under cygwin requires essentially the same steps as +under Linux. It is more likely that a suitable --prefix option will +have to be used, and that the location of the Tcl installation needs +to be specified with --with-tcl. However appropriate use of cygwin +mount points may avoid some of these problems. If the full path to +the configure script contains spaces, then the short form of the path +should be used when invoking configure. + +One issue to be aware of is the naming convention for the Tcl library. +On a Unix system this will typically be called libtcl8.3.a (adjusted +according to the version number), with a symbolic link from libtcl.a +to the most recent version. Under cygwin the equivalent library is +called libtcl80.a, and symbolic links are not used. For a standard +cygwin installation the configure script knows how to pick up the +appropriate library, but if a more recent version of Tcl has been +installed then due care has to be taken with the --with-tcl-version +option. + + +Installing with Visual C++ +-------------------------- + +Under Windows it is possible to build the generic host-side software +(infra, libcdl and ecosconfig) with Visual C++ but this is deprecated. +Building with g++ under cygwin is preferred. + +It is still necessary to run the configure script and a suitable make +utility. That requires a shell and a Unix-like environment, as +provided by cygwin. The Visual C++ compiler cl.exe needs to be on the +shell's search path, and some environment variables such as INCLUDE +and LIB may need to be set to point at the Visual C++ installation - +the details may vary depending on the version of the compiler. Then +the configure command should be run like this: + + $ CC=cl CXX=cl <path>/host/configure <args> + +Note that the path should be a cygwin path: cygwin mount points are +accepted and forward slashes should be used. The various configure +scripts now detect that Visual C++ should be used, and adapt +accordingly. + +Depending on what cygwin mount points are set up, /usr/local may or +may not be an appropriate install location for VC++ applications. +If not, the install location should be specified with --prefix: + + $ CC=cl CXX=cl <path>/configure --prefix=<install-path> <args> + +It is also necessary to use the right version of Tcl. For a VC++ build +the cygwin release of Tcl should not be used. Instead a suitable +prebuilt Tcl package can be obtained from http://www.scriptics.com/. +It is necessary to tell the configure script where this has been +installed, for example: + + $ CC=cl CXX=cl <path>/configure --prefix=<install-path> \ + --with-tcl=/cygdrive/d/local/scriptics/Tcl/tcl8.1 <args> + +The library name will be of the form tcl81.lib, and there will not be +a symbolic link from tcl.lib to the appropriate version. It will be +necessary to specify the Tcl version explicitly since the default +version is currently 8.0. + + $ CC=cl CXX=cl <path>/configure --prefix=<install-path> \ + --with-tcl=/d/local/scriptics/Tcl/tcl8.1 --with-tcl-version=81 <args> + +Following a successful configure, the tools can be built and installed +in the normal fashion: + + $ make + $ make install + + +More Information +================ + +Please see the eCos web site, http://sources.redhat.com/ecos/, for +further details. This includes the FAQ, a form for reporting problems, +and details of the various mailing lists +(http://sources.redhat.com/ecos/intouch.html) At the time of writing +there are no separate mailing lists for the eCos host-side sources, +the main mailing list ecos-discuss@sources.redhat.com should be used +instead. + +//####COPYRIGHTBEGIN#### +// +//---------------------------------------------------------------------------- +// Copyright (C) 2002 Bart Veer +// Copyright (C) 2000, 2001 Red Hat, Inc. +// +// This file is part of the eCos host tools. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ---------------------------------------------------------------------------- +// +//####COPYRIGHTEND####
