Mercurial > flash_v2
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 289:bd1db6a90df9 | 290:3ecf91f6663a |
|---|---|
| 1 eCos Host-side Software | |
| 2 ======================= | |
| 3 | |
| 4 This README file only describes the eCos host-side software. For | |
| 5 details of the eCos target-side software or the required toolchains, | |
| 6 please see other documentation. A good starting point is | |
| 7 http://sources.redhat.com/ecos | |
| 8 | |
| 9 There are two categories of host-side software. The host subdirectory | |
| 10 contains generic software, primarily related to the eCos configuration | |
| 11 technology. All eCos users will need to use some of this technology to | |
| 12 configure and build eCos, either using pre-built binaries or by | |
| 13 building the host-side software from source. The generic software | |
| 14 should be portable to a wide range of host platforms. | |
| 15 | |
| 16 There is also package-specific host-side software. Much of this is I/O | |
| 17 related. For example the generic USB-slave package contains some | |
| 18 programs related to testing; a test application is run on a target | |
| 19 with suitable USB slave-side hardware, and needs to interact with | |
| 20 another program running on the USB host; the latter is | |
| 21 package-specific host-side software and can be found in the | |
| 22 subdirectory packages/io/usb/slave. Code like this may have | |
| 23 significant platform dependencies and may only work on a single | |
| 24 platform or on a small number of platforms. There may also be | |
| 25 special requirements, for example it may be necessary to install some | |
| 26 programs suid root so that they have appropriate access to the | |
| 27 hardware. | |
| 28 | |
| 29 | |
| 30 The host subdirectory includes the following: | |
| 31 | |
| 32 infra/ | |
| 33 This is an implementation of the eCos infrastructure that can be | |
| 34 used on the host-side, and provides assertion, tracing and | |
| 35 testcase support. | |
| 36 | |
| 37 NOTE: the eCos infrastructure facilities are not especially | |
| 38 well-suited to host-side development, in particular they are not | |
| 39 C++-oriented. There are plans to remove the current infrastructure | |
| 40 completely and replace it with something more suitable. People | |
| 41 planning new projects should be aware of this, and may wish to | |
| 42 avoid using the current infrastructure. | |
| 43 | |
| 44 libcdl/ | |
| 45 The CDL library lies at the heart of the eCos configuration | |
| 46 technology. | |
| 47 | |
| 48 tools/configtool/ | |
| 49 The sources to the various configuration tools can be found here. | |
| 50 | |
| 51 tools/configtool/common/common/ | |
| 52 Contains sources related to makefile generation, shared by the | |
| 53 command line and graphical tools. | |
| 54 | |
| 55 tools/configtool/standalone/common/ | |
| 56 Contains the command line ecosconfig tool. | |
| 57 | |
| 58 tools/configtool/standalone/wxwin/ | |
| 59 Contains sources for the wxWindows-based, Linux and Windows graphical | |
| 60 configuration tool. The Windows version can currently only be | |
| 61 built with Visual C++, not with cygwin g++. | |
| 62 | |
| 63 tools/configtool/common/win32/ | |
| 64 tools/configtool/standalone/win32/ | |
| 65 Contains sources for the older, MFC-based, Windows-only graphical | |
| 66 configuration tool. Again this can currently only be built with | |
| 67 Visual C++. | |
| 68 | |
| 69 The two graphical configuration tools have their own build procedures, | |
| 70 described in tools/configtool/standalone/wxwin/ReadMe and | |
| 71 tools/configtool/standalone/win32/ReadMe respectively. | |
| 72 | |
| 73 Package-specific host-side code lives in the host subdirectory of the | |
| 74 appropriate package, for example packages/io/usb/slave/<version>/host. | |
| 75 Most packages only provide target-side code and hence will not have a | |
| 76 host subdirectory. Users can install various packages from a variety | |
| 77 of sources, and where a package does have host-side software the | |
| 78 package documentation should be consulted for further information. | |
| 79 | |
| 80 | |
| 81 Installing on Linux and Other Unix Systems | |
| 82 ------------------------------------------ | |
| 83 | |
| 84 Both generic host-side software (infra, libcdl and ecosconfig) and | |
| 85 package-specific software can be built with the conventional | |
| 86 "configure/make/make install" sequence. However the code does not | |
| 87 conform fully to GNU coding standards so some operations such as "make | |
| 88 dist" are not supported. There is limited support for DejaGnu-based | |
| 89 testing. | |
| 90 | |
| 91 Much of the host-side software has a dependency on Tcl. This is not | |
| 92 supplied with the sources since many users will already have a | |
| 93 suitable installation, for example it is shipped as standard with | |
| 94 all major Linux distributions. Any release of Tcl from 8.0 onwards | |
| 95 should be usable. | |
| 96 | |
| 97 There are two main approaches to building the host-side software: | |
| 98 | |
| 99 1) build the generic and the package-specific code in one build tree. | |
| 100 This uses the top-level configure script. The script automatically | |
| 101 invokes the configure script in the main host subdirectory. In | |
| 102 addition it searches the packages hierarchy for host subdirectories | |
| 103 containing their own configure scripts and will invoke those. | |
| 104 | |
| 105 Note: the search for host subdirectories happens during configure | |
| 106 time, not during the make. If new packages with host-side code are | |
| 107 added to the repository then it will be necessary to re-run the | |
| 108 toplevel configure script. | |
| 109 | |
| 110 2) build the generic code in one build tree, using the configure | |
| 111 script in the toplevel's host subdirectory. Then build some or all | |
| 112 of the package-specific code in separate build trees, using the | |
| 113 configure scripts in each package's host subdirectory. | |
| 114 | |
| 115 The first approach is generally simpler. However some of the | |
| 116 package-specific code requires special installation, for example a | |
| 117 program may have to be installed suid root so that it has the right | |
| 118 privileges to access hardware, and hence the "make install" step has | |
| 119 to be run by the superuser. Also some of the package-specific code is | |
| 120 rather specialized and may be of no interest to many users. For | |
| 121 example, the USB testing code is only useful when developing | |
| 122 USB-based applications. Hence some users may prefer the second | |
| 123 approach, building just the generic code and a subset of the | |
| 124 package-specific code. | |
| 125 | |
| 126 It is necessary to use a separate build tree rather than build | |
| 127 directly in the source tree. This is enforced by the configure scripts. | |
| 128 | |
| 129 $ mkdir build | |
| 130 $ cd build | |
| 131 | |
| 132 The next step is to run the desired configure script. To build all | |
| 133 the host-side software this means the toplevel configure script: | |
| 134 | |
| 135 $ <path>/configure <args> | |
| 136 | |
| 137 Alternatively to build just the generic host-side software, use the | |
| 138 configure script in the host subdirectory. | |
| 139 | |
| 140 $ mkdir host | |
| 141 $ cd host | |
| 142 $ <path>/host/configure <args> | |
| 143 | |
| 144 Or, to build just one package's host-side code: | |
| 145 | |
| 146 $ mkdir -p packages/io/usb/slave/current/host | |
| 147 $ cd packages/io/usb/slave/current/host | |
| 148 $ <path>/packages/io/usb/slave/current/host/configure <args> | |
| 149 | |
| 150 (It is not actually necessary to use the same directory structure in | |
| 151 the build tree as in the source tree, but doing so can avoid | |
| 152 confusion). | |
| 153 | |
| 154 A list of all the command-line options can be obtained by running | |
| 155 "configure --help". The most important ones are as follows: | |
| 156 | |
| 157 1) --prefix. This can be used to specify the location of the install | |
| 158 tree, defaulting to /usr/local, so the ecosconfig program ends up | |
| 159 in /usr/local/bin/ecosconfig and the CDL library ends up in | |
| 160 /usr/local/lib/libcdl.a. If an alternative location is preferred | |
| 161 this can be specified with --prefix, for example: | |
| 162 | |
| 163 $ <path>/configure --prefix=/usr/local/ecos <args> | |
| 164 | |
| 165 2) --enable-debug. By default all assertions and tracing are disabled. | |
| 166 When debugging any of the generic host-side software these should | |
| 167 be enabled. Some package-specific code may not have any extra | |
| 168 debug support, in which case --enable-debug would be ignored. | |
| 169 | |
| 170 $ <path>/configure --enable-debug | |
| 171 | |
| 172 It is also possible to control most of the assertion and tracing | |
| 173 macros at a finer grain. This is intended mainly for use by the | |
| 174 developers. | |
| 175 | |
| 176 --disable-asserts disable all assertions | |
| 177 --disable-preconditions disable a subset of the assertions | |
| 178 --disable-postconditions disable a subset of the assertions | |
| 179 --disable-invariants disable a subset of the assertions | |
| 180 --disable-loopinvariants disable a subset of the assertions | |
| 181 --disable-tracing disable tracing | |
| 182 --disable-fntracing disable function entry/exit tracing | |
| 183 | |
| 184 3) --with-tcl=<path> | |
| 185 --with-tcl-header=<path> | |
| 186 --with-tcl-lib=<path> | |
| 187 --with-tcl-version=<number> | |
| 188 | |
| 189 The host-side tools have a dependency on Tcl, which is not supplied | |
| 190 with the sources because many people will already have a suitable | |
| 191 installation. Specifically it is necessary to have the header file | |
| 192 tcl.h and appropriate libraries such that -ltcl will work - this | |
| 193 can involve either static or shared libraries. | |
| 194 | |
| 195 By default the configure script will assume that there is a | |
| 196 suitable Tcl installation in the install location, so if there is | |
| 197 no --prefix argument then it will look for /usr/local/include/tcl.h | |
| 198 and it will add -L/usr/local/lib to the library search path. If | |
| 199 Tcl is installed elsewhere then this can be specified with a | |
| 200 --with-tcl option. For example, if the default installation in | |
| 201 /usr should be used then the following configure option is | |
| 202 appropriate: | |
| 203 | |
| 204 $ <path>/configure --with-tcl=/usr <args> | |
| 205 | |
| 206 If the Tcl libraries and Tcl headers are installed in different | |
| 207 locations, such as when a separate --prefix and --exec-prefix are | |
| 208 used, the --with-tcl-header and --with-tcl-lib options can be used | |
| 209 to specify both location. The configure script will expect to find | |
| 210 <tcl-header-dir>/include/tcl.h and <tcl-lib-dir>/lib/tclConfig.sh. | |
| 211 The --with-tcl option has precedence and if used will override the | |
| 212 --with-tcl-header and --with-tcl-lib options. | |
| 213 | |
| 214 It is possible to have multiple versions of Tcl installed, for | |
| 215 example libtcl8.0.a, libtcl8.1.a, and so on. Typically linking with | |
| 216 -ltcl will result in the latest version being used. It is possible | |
| 217 to specify a different version using --with-tcl-version, e.g.: | |
| 218 | |
| 219 $ <path>configure --with-tcl=/usr/local/scriptics --with-tcl-version=8.1 <args> | |
| 220 | |
| 221 Following the configure step the build tree should be set up | |
| 222 correctly. All that remains is the actual build and install: | |
| 223 | |
| 224 $ make | |
| 225 $ make install | |
| 226 | |
| 227 This should result in an ecosconfig executable, plus appropriate | |
| 228 libraries and header files. If the install prefix is a system | |
| 229 location, for example /usr/local/, then "make install" will normally | |
| 230 require root privileges. Also some of the package-specific software | |
| 231 has special installation requirements, for example programs that need | |
| 232 to be installed suid root, and this will also need root privileges. | |
| 233 | |
| 234 | |
| 235 Installing under Cygwin | |
| 236 ----------------------- | |
| 237 | |
| 238 Installing under cygwin requires essentially the same steps as | |
| 239 under Linux. It is more likely that a suitable --prefix option will | |
| 240 have to be used, and that the location of the Tcl installation needs | |
| 241 to be specified with --with-tcl. However appropriate use of cygwin | |
| 242 mount points may avoid some of these problems. If the full path to | |
| 243 the configure script contains spaces, then the short form of the path | |
| 244 should be used when invoking configure. | |
| 245 | |
| 246 One issue to be aware of is the naming convention for the Tcl library. | |
| 247 On a Unix system this will typically be called libtcl8.3.a (adjusted | |
| 248 according to the version number), with a symbolic link from libtcl.a | |
| 249 to the most recent version. Under cygwin the equivalent library is | |
| 250 called libtcl80.a, and symbolic links are not used. For a standard | |
| 251 cygwin installation the configure script knows how to pick up the | |
| 252 appropriate library, but if a more recent version of Tcl has been | |
| 253 installed then due care has to be taken with the --with-tcl-version | |
| 254 option. | |
| 255 | |
| 256 | |
| 257 Installing with Visual C++ | |
| 258 -------------------------- | |
| 259 | |
| 260 Under Windows it is possible to build the generic host-side software | |
| 261 (infra, libcdl and ecosconfig) with Visual C++ but this is deprecated. | |
| 262 Building with g++ under cygwin is preferred. | |
| 263 | |
| 264 It is still necessary to run the configure script and a suitable make | |
| 265 utility. That requires a shell and a Unix-like environment, as | |
| 266 provided by cygwin. The Visual C++ compiler cl.exe needs to be on the | |
| 267 shell's search path, and some environment variables such as INCLUDE | |
| 268 and LIB may need to be set to point at the Visual C++ installation - | |
| 269 the details may vary depending on the version of the compiler. Then | |
| 270 the configure command should be run like this: | |
| 271 | |
| 272 $ CC=cl CXX=cl <path>/host/configure <args> | |
| 273 | |
| 274 Note that the path should be a cygwin path: cygwin mount points are | |
| 275 accepted and forward slashes should be used. The various configure | |
| 276 scripts now detect that Visual C++ should be used, and adapt | |
| 277 accordingly. | |
| 278 | |
| 279 Depending on what cygwin mount points are set up, /usr/local may or | |
| 280 may not be an appropriate install location for VC++ applications. | |
| 281 If not, the install location should be specified with --prefix: | |
| 282 | |
| 283 $ CC=cl CXX=cl <path>/configure --prefix=<install-path> <args> | |
| 284 | |
| 285 It is also necessary to use the right version of Tcl. For a VC++ build | |
| 286 the cygwin release of Tcl should not be used. Instead a suitable | |
| 287 prebuilt Tcl package can be obtained from http://www.scriptics.com/. | |
| 288 It is necessary to tell the configure script where this has been | |
| 289 installed, for example: | |
| 290 | |
| 291 $ CC=cl CXX=cl <path>/configure --prefix=<install-path> \ | |
| 292 --with-tcl=/cygdrive/d/local/scriptics/Tcl/tcl8.1 <args> | |
| 293 | |
| 294 The library name will be of the form tcl81.lib, and there will not be | |
| 295 a symbolic link from tcl.lib to the appropriate version. It will be | |
| 296 necessary to specify the Tcl version explicitly since the default | |
| 297 version is currently 8.0. | |
| 298 | |
| 299 $ CC=cl CXX=cl <path>/configure --prefix=<install-path> \ | |
| 300 --with-tcl=/d/local/scriptics/Tcl/tcl8.1 --with-tcl-version=81 <args> | |
| 301 | |
| 302 Following a successful configure, the tools can be built and installed | |
| 303 in the normal fashion: | |
| 304 | |
| 305 $ make | |
| 306 $ make install | |
| 307 | |
| 308 | |
| 309 More Information | |
| 310 ================ | |
| 311 | |
| 312 Please see the eCos web site, http://sources.redhat.com/ecos/, for | |
| 313 further details. This includes the FAQ, a form for reporting problems, | |
| 314 and details of the various mailing lists | |
| 315 (http://sources.redhat.com/ecos/intouch.html) At the time of writing | |
| 316 there are no separate mailing lists for the eCos host-side sources, | |
| 317 the main mailing list ecos-discuss@sources.redhat.com should be used | |
| 318 instead. | |
| 319 | |
| 320 //####COPYRIGHTBEGIN#### | |
| 321 // | |
| 322 //---------------------------------------------------------------------------- | |
| 323 // Copyright (C) 2002 Bart Veer | |
| 324 // Copyright (C) 2000, 2001 Red Hat, Inc. | |
| 325 // | |
| 326 // This file is part of the eCos host tools. | |
| 327 // | |
| 328 // This program is free software; you can redistribute it and/or modify it | |
| 329 // under the terms of the GNU General Public License as published by the Free | |
| 330 // Software Foundation; either version 2 of the License, or (at your option) | |
| 331 // any later version. | |
| 332 // | |
| 333 // This program is distributed in the hope that it will be useful, but WITHOUT | |
| 334 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 335 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
| 336 // more details. | |
| 337 // | |
| 338 // You should have received a copy of the GNU General Public License along with | |
| 339 // this program; if not, write to the Free Software Foundation, Inc., | |
| 340 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| 341 // | |
| 342 // ---------------------------------------------------------------------------- | |
| 343 // | |
| 344 //####COPYRIGHTEND#### |
