Annotation of /trunk/mkinitrd-magellan/busybox/archival/libunarchive/unxz/README
Parent Directory | Revision Log
Revision 1123 -
(hide annotations)
(download)
Wed Aug 18 21:56:57 2010 UTC (13 years, 9 months ago) by niro
File size: 5836 byte(s)
Wed Aug 18 21:56:57 2010 UTC (13 years, 9 months ago) by niro
File size: 5836 byte(s)
-updated to busybox-1.17.1
1 | niro | 1123 | |
2 | XZ Embedded | ||
3 | =========== | ||
4 | |||
5 | XZ Embedded is a relatively small, limited implementation of the .xz | ||
6 | file format. Currently only decoding is implemented. | ||
7 | |||
8 | XZ Embedded was written for use in the Linux kernel, but the code can | ||
9 | be easily used in other environments too, including regular userspace | ||
10 | applications. | ||
11 | |||
12 | This README contains information that is useful only when the copy | ||
13 | of XZ Embedded isn't part of the Linux kernel tree. You should also | ||
14 | read linux/Documentation/xz.txt even if you aren't using XZ Embedded | ||
15 | as part of Linux; information in that file is not repeated in this | ||
16 | README. | ||
17 | |||
18 | Compiling the Linux kernel module | ||
19 | |||
20 | The xz_dec module depends on crc32 module, so make sure that you have | ||
21 | it enabled (CONFIG_CRC32). | ||
22 | |||
23 | Building the xz_dec and xz_dec_test modules without support for BCJ | ||
24 | filters: | ||
25 | |||
26 | cd linux/lib/xz | ||
27 | make -C /path/to/kernel/source \ | ||
28 | KCPPFLAGS=-I"$(pwd)/../../include" M="$(pwd)" \ | ||
29 | CONFIG_XZ_DEC=m CONFIG_XZ_DEC_TEST=m | ||
30 | |||
31 | Building the xz_dec and xz_dec_test modules with support for BCJ | ||
32 | filters: | ||
33 | |||
34 | cd linux/lib/xz | ||
35 | make -C /path/to/kernel/source \ | ||
36 | KCPPFLAGS=-I"$(pwd)/../../include" M="$(pwd)" \ | ||
37 | CONFIG_XZ_DEC=m CONFIG_XZ_DEC_TEST=m CONFIG_XZ_DEC_BCJ=y \ | ||
38 | CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y \ | ||
39 | CONFIG_XZ_DEC_IA64=y CONFIG_XZ_DEC_ARM=y \ | ||
40 | CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_XZ_DEC_SPARC=y | ||
41 | |||
42 | If you want only one or a few of the BCJ filters, omit the appropriate | ||
43 | variables. CONFIG_XZ_DEC_BCJ=y is always required to build the support | ||
44 | code shared between all BCJ filters. | ||
45 | |||
46 | Most people don't need the xz_dec_test module. You can skip building | ||
47 | it by omitting CONFIG_XZ_DEC_TEST=m from the make command line. | ||
48 | |||
49 | Compiler requirements | ||
50 | |||
51 | XZ Embedded should compile as either GNU-C89 (used in the Linux | ||
52 | kernel) or with any C99 compiler. Getting the code to compile with | ||
53 | non-GNU C89 compiler or a C++ compiler should be quite easy as | ||
54 | long as there is a data type for unsigned 64-bit integer (or the | ||
55 | code is modified not to support large files, which needs some more | ||
56 | care than just using 32-bit integer instead of 64-bit). | ||
57 | |||
58 | If you use GCC, try to use a recent version. For example, on x86, | ||
59 | xz_dec_lzma2.c compiled with GCC 3.3.6 is 15-25 % slower than when | ||
60 | compiled with GCC 4.3.3. | ||
61 | |||
62 | Embedding into userspace applications | ||
63 | |||
64 | To embed the XZ decoder, copy the following files into a single | ||
65 | directory in your source code tree: | ||
66 | |||
67 | linux/include/linux/xz.h | ||
68 | linux/lib/xz/xz_crc32.c | ||
69 | linux/lib/xz/xz_dec_lzma2.c | ||
70 | linux/lib/xz/xz_dec_stream.c | ||
71 | linux/lib/xz/xz_lzma2.h | ||
72 | linux/lib/xz/xz_private.h | ||
73 | linux/lib/xz/xz_stream.h | ||
74 | userspace/xz_config.h | ||
75 | |||
76 | Alternatively, xz.h may be placed into a different directory but then | ||
77 | that directory must be in the compiler include path when compiling | ||
78 | the .c files. | ||
79 | |||
80 | Your code should use only the functions declared in xz.h. The rest of | ||
81 | the .h files are meant only for internal use in XZ Embedded. | ||
82 | |||
83 | You may want to modify xz_config.h to be more suitable for your build | ||
84 | environment. Probably you should at least skim through it even if the | ||
85 | default file works as is. | ||
86 | |||
87 | BCJ filter support | ||
88 | |||
89 | If you want support for one or more BCJ filters, you need to copy also | ||
90 | linux/lib/xz/xz_dec_bcj.c into your application, and use appropriate | ||
91 | #defines in xz_config.h or in compiler flags. You don't need these | ||
92 | #defines in the code that just uses XZ Embedded via xz.h, but having | ||
93 | them always #defined doesn't hurt either. | ||
94 | |||
95 | #define Instruction set BCJ filter endianness | ||
96 | XZ_DEC_X86 x86 or x86-64 Little endian only | ||
97 | XZ_DEC_POWERPC PowerPC Big endian only | ||
98 | XZ_DEC_IA64 Itanium (IA-64) Big or little endian | ||
99 | XZ_DEC_ARM ARM Little endian only | ||
100 | XZ_DEC_ARMTHUMB ARM-Thumb Little endian only | ||
101 | XZ_DEC_SPARC SPARC Big or little endian | ||
102 | |||
103 | While some architectures are (partially) bi-endian, the endianness | ||
104 | setting doesn't change the endianness of the instructions on all | ||
105 | architectures. That's why Itanium and SPARC filters work for both big | ||
106 | and little endian executables (Itanium has little endian instructions | ||
107 | and SPARC has big endian instructions). | ||
108 | |||
109 | There currently is no filter for little endian PowerPC or big endian | ||
110 | ARM or ARM-Thumb. Implementing filters for them can be considered if | ||
111 | there is a need for such filters in real-world applications. | ||
112 | |||
113 | Notes about shared libraries | ||
114 | |||
115 | If you are including XZ Embedded into a shared library, you very | ||
116 | probably should rename the xz_* functions to prevent symbol | ||
117 | conflicts in case your library is linked against some other library | ||
118 | or application that also has XZ Embedded in it (which may even be | ||
119 | a different version of XZ Embedded). TODO: Provide an easy way | ||
120 | to do this. | ||
121 | |||
122 | Please don't create a shared library of XZ Embedded itself unless | ||
123 | it is fine to rebuild everything depending on that shared library | ||
124 | everytime you upgrade to a newer version of XZ Embedded. There are | ||
125 | no API or ABI stability guarantees between different versions of | ||
126 | XZ Embedded. | ||
127 | |||
128 | Specifying the calling convention | ||
129 | |||
130 | XZ_FUNC macro was included to support declaring functions with __init | ||
131 | in Linux. Outside Linux, it can be used to specify the calling | ||
132 | convention on systems that support multiple calling conventions. | ||
133 | For example, on Windows, you may make all functions use the stdcall | ||
134 | calling convention by defining XZ_FUNC=__stdcall when building and | ||
135 | using the functions from XZ Embedded. | ||
136 |