Building a delivery for VxWorks on Windows
For the time being the discussion below will only address building for VxWorks from Windows. But even if we are on Windows, we do as if we were on Unix since VxWorks uses a modified version of the gnu toolset.
Setting up the environment
You first need to properly set the ISE_PLATFORM environment variable to the corresponding VxWorks architecture. You also need to define the VXWORKS environment variable to point to the root of the Tornado delivery. For the PPC port it meant defining:
set ISE_PLATFORM=vxworks-ppc set VXWORKS=C:/Tornado2.2
You also need to set the PATH environment variable so that the GNU toolset of VxWorks is first in the path. Very important in case you also have the Cygwin environment installed. However we found that the `make' that comes with VxWorks is not Unix friendly so we use the one from Cygwin. So we had to create a directory in which `make.exe' from Cygwin was copied and put this directory first in the PATH. Here is what we did:
set PATH=C:\ISE\apps\bin;%PATH% set PATH=%PATH%;C:\Tornado2.2\host\x86-win32\bin set PATH=%PATH%;C:\ISE\apps\cygwin\bin
Where C:\ISE\apps\bin is the directory where `make.exe' is located and C:\ISE\apps\cygwin\bin are the cygwin tools. They are at the end otherwise they would conflicts with the one from VxWorks.
Compiling runtime for VxWorks
Since the `Configure' script cannot be run on the target platform, we have to manually find what is available and what is not for the target. To do so, we simply look at the target header file or the VxWorks documentation and create in the CONFIGS directory of the run-time the template for the config.sh configuration file.
At the moment for VxWorks we have 3 templates for MIPS, HPPA and PPC. Only the PPC is up-to-date, the first two are from 1998 and haven't been updated.
Once you have a first skeleton, you can launch `bash' and then do quick_configure to start the compilation process.
Some parts of the runtime do not compile, this is ok. The uncompilable parts correspond to all the communication stuff which is used when debugging applications from EiffelStudio. Our embedded configuration does not yet support workbench mode, thus only the finalized code is useful to us at this point.
So basically make sure that in C/run-time/ you have at least libfinalized.a
Because x2c has to run on the host and not on the target, you need to use the C compiler of your host to compile the program. Usually the following command is enough:
gcc x2c.c -o x2c.exe -I.. -I. -I./include
Preparing the Eiffel delivery
Once you have compiled the run-time, you need to prepare the delivery of EiffelStudio for compiling code for the VxWorks target. The operations below have been tested under bash.
First the core:
mkdir EiffelXX cd EiffelXX svn co $SVNROOT/Src/Delivery/studio studio cd studio/config mv vxworks $ISE_PLATFORM cd ../spec mkdir $ISE_PLATFORM mkdir $ISE_PLATFORM/lib mkdir $ISE_PLATFORM/include mkdir $ISE_PLATFORM/bin mv unix/* $ISE_PLATFORM/bin cd ../../../..
Then the libraries and samples:
cd EiffelXX mkdir library cd library svn co $SVNROOT/Src/library/base base svn co $SVNROOT/Src/library/lex lex svn co $SVNROOT/Src/library/net net svn co $SVNROOT/Src/library/parse parse svn co $SVNROOT/Src/library/thread thread svn co $SVNROOT/Src/library/time time cd .. mkdir examples cd examples svn co $SVNROOT/Src/examples/base base svn co $SVNROOT/Src/examples/cecil cecil svn co $SVNROOT/Src/examples/lex lex svn co $SVNROOT/Src/examples/net net svn co $SVNROOT/Src/examples/parse parse svn co $SVNROOT/Src/examples/thread thread svn co $SVNROOT/Src/examples/time time cd ../..
Then copying the runtimes and header files:
cd EiffelXX cd studio/spec/$ISE_PLATFORM/lib cp $EIFFEL_SRC/C/run-time/lib*.a . cd ../include cp $EIFFEL_SRC/C/run-time/*.h . cp $EIFFEL_SRC/C/config.sh . cp $EIFFEL_SRC/C/eif_portable.h . cp $EIFFEL_SRC/C/eif_confmagic.h . cp $EIFFEL_SRC/C/eif_config.h . cd ../bin cp $EIFFEL_SRC/C/run-time/x2c.exe . cd ../../../..
Then finally copying the platform specific executables onto this delivery. I suppose that $ISE_EIFFEL_NATIVE points to that location.
cd EiffelXX cd studio/spec/$ISE_PLATFORM/bin cp $ISE_EIFFEL_NATIVE/studio/spec/windows/bin/ec.exe . cp $ISE_EIFFEL_NATIVE/studio/spec/windows/bin/estudio.exe . cp $ISE_EIFFEL_NATIVE/studio/spec/windows/bin/quick_finalize.exe . cp $ISE_EIFFEL_NATIVE/studio/spec/windows/bin/wel_hook.dll . cd ../../../..