blob: b7566770897ed23e74ada82a2108886207084ba4 [file] [log] [blame]
Daniel Veillard63806b52008-06-10 14:56:11 +00001 libxml2 on VxWorks 6.4+
2
3Here are my instructions for building on VxWorks.... I am very ashamed of
4how I did this because it is a complete hack, but it works great, so I
5can't complain too much.
6
7General Information
8
91. The only way to build for VxWorks is to cross compile from a windows or
10linux system. We use a RedHat 5.1 workstation system as our build
11environment.
12
132. VxWorks 6.X has two main types of executable, DKMs (dynamic kernel
14modules), and RTPs (real-time processes). Kernel modules are the bread
15and butter of VxWorks, but they look nothing like processes/threads in
16normal UNIX/Windows systems. RTPs are more like processes that have
17memory protection, threads, etc. VxWorks 6.X also introduces some level
18of POSIX conformance to their environment. The POSIX conformance was the
19key for us to be able to port libxml2. We support accessing libxml2 from
20both DKMs and RTPs.
21
223. There are 2 compilers for VxWorks, the WindRiver compiler, and a port
23of the GNU toolchain, we have only tested and built with the GNU
24toolchain.
25
26How To Build
27
281. Run the configure on your native linux system (this is the cheesy
29hack). Since the VxWorks GNU toolchain is very close in version to the
30one in red hat, it generates a good config.h file. We configured libxml2
31with the following to keep the size down, (but we have done basic testing
32with everything compiled in).
33
34./configure --with-minimum --with-reader --with-writer --with-regexps
35--with-threads --with-thread-alloc
36
372. Rename the libxml2 folder to "src". This step is required for our
38replacement makefile to work.
39
403. Run the replacement makefile. I wrote a new makefile that sets all the
41proper vxworks defines and uses the correct compilers. The two defines on
42the make command line are to tell it which VxWorks Target (SH3.2 little
43endian), and the executable type. We have tested this code on PENTIUM2gnu
44and SH32gnule.
45
46This makefile creates a shared library that runs on VxWorks: (libxml2.so)
47make -f Makefile.vxworks clean all VXCPU=SH32gnule VXTYPE=RTP
48
49This makefile creates a kernel module that runs on VxWorks: (xml2.out)
50make -f Makefile.vxworks clean all VXCPU=SH32gnule VXTYPE=DKM
51
52Important Notes
53
541. There are several ways that this process could be improved, but at the
55end of the day, we make products, not port libraries, so we did a meets
56minimum for our needs.
57
582. VxWorks is the devil, give me embedded linux every day.
59
603. No matter what I tried, I couldn't get the configure to pick up the
61VxWorks toolchain, and in my investigation, it has something to do with
62automake/autoconf, not any individual package. VxWorks doesn't play by
63the normal rules for building toolchains.
64
654. The PIC flag in VxWorks (especially for SH processors) is very
66important, and very troublesome. On linux, you can liberally use the PIC
67flag when compiling and the compiler/linker will ignore it as needed, on
68VxWorks if must always be on for shared libraries, and always be off for
69static libraries and executables.
70
715. If anyone wants to work on a better way to do the build of libxml2 for
72VxWorks, I'm happy to help as much as I can, but I'm not looking to
73support it myself.
74
75Attached Files
76
771. To use my Makefile for vxworks, you should enter the vxworks
78environment (/opt/windriver/wrenv.linux -p vxworks-6.4 for me).
792. Run: build.sh libxml2-2.6.32 SH32gnule RTP (where you have
80libxml2-2.6.32.tar.gz and the Makefile in the same directory as the script
81file).
82
83Thanks,
84
85Jim Wert Jr.
86JWert@ILSTechnology.com