aboutsummaryrefslogtreecommitdiff
path: root/windows/README
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--windows/README164
1 files changed, 164 insertions, 0 deletions
diff --git a/windows/README b/windows/README
new file mode 100644
index 00000000..4acc6802
--- /dev/null
+++ b/windows/README
@@ -0,0 +1,164 @@
+
+XZ Utils on Windows
+===================
+
+Introduction
+
+ This document explains how to build XZ Utils for Microsoft Windows
+ using MinGW (Minimalist GNU for Windows).
+
+ This is currently experimental and has got very little testing.
+ No ABI stability is promised for liblzma.dll.
+
+
+Why MinGW
+
+ XZ Utils code is C99. It should be possible to compile at least
+ liblzma using any C99 compiler. Compiling the command line tools may
+ need a little extra work to get them built on new systems, because
+ they use some features that aren't standardized in POSIX.
+
+ MinGW is free software. MinGW runtime provides some functions that
+ made porting the command line tools easier. Most(?) of the MinGW
+ runtime, which gets linked into the resulting binaries, is in the
+ public domain.
+
+ While most C compilers nowadays support C99 well enough (including
+ most compilers for Windows), MSVC doesn't. It seems that Microsoft
+ has no plans to ever support C99. Thus, it is not possible to build
+ XZ Utils using MSVC without doing a lot of work to convert the code.
+ Using prebuilt liblzma from MSVC is possible though, since the
+ liblzma API headers are in C89 and contain some non-standard extra
+ hacks required by MSVC.
+
+
+Getting and Installing MinGW
+
+ You can download MinGW for 32-bit Windows from Sourceforge:
+
+ http://sourceforge.net/project/showfiles.php?group_id=2435
+
+ It is enough to pick Automated MinGW Installer and MSYS Base System.
+ Using the automated installer, select at least runtime, w32api,
+ core compiler, and MinGW make. From MSYS you actually need only
+ certain tools, but it is easiest to just install the whole MSYS.
+
+ To build for x86-64 version of Windows, you can download a snapshot
+ of MinGW targeting for 64-bit Windows:
+
+ http://sourceforge.net/project/showfiles.php?group_id=202880
+
+ You can use the 32-bit MSYS also for 64-bit build, since we don't
+ link against anything in MSYS, just use the tools from it. You may
+ use the make tool from 32-bit MinGW (mingw32-make.exe) although
+ probably the make.exe from MSYS works too.
+
+ Naturally you can pick the components manually, for example to try
+ the latest available GCC. It is also possible to use a cross-compiler
+ to build Windows binaries for example on GNU/Linux, or use Wine to
+ run the Windows binaries. However, these instructions focus on
+ building on Windows.
+
+
+Building for 32-bit Windows
+
+ Add MinGW and MSYS to PATH (adjust if you installed to non-default
+ location):
+
+ C:\>set PATH=C:\MinGW\bin;C:\MSYS\1.0\bin;%PATH%
+
+ Then it should be enough to just run mingw32-make in this directory:
+
+ C:\xz-5.x.x\windows>mingw32-make
+
+
+Building for 64-bit Windows
+
+ For 64-bit build the PATH has to point to 64-bit MinGW:
+
+ C:\>set PATH=C:\MinGW64\bin;C:\MSYS\1.0\bin;%PATH%
+
+ You need to pass W64=1 to mingw32-make (or make if you don't have
+ mingw32-make):
+
+ C:\xz-5.x.x\windows>mingw32-make W64=1
+
+
+Additional Make Flags and Targets
+
+ You may want to try some additional optimizations, which may or
+ may not make the code faster (and may or may not hit possible
+ compiler bugs more easily):
+
+ mingw32-make CFLAGS="-O3 -fomit-frame-pointer -funroll-loops"
+
+ If you want to enable assertions (the assert() macro), use DEBUG=1.
+ You may want to disable optimizations too if you plan to actually
+ debug the code. Never use DEBUG=1 for production builds!
+
+ mingw32-make DEBUG=1 CFLAGS="-g -O0"
+
+ By default, liblzma is built as a DLL and the command line tools
+ linked dynamically against that liblzma.dll. To build static
+ versions instead, use STATIC=1:
+
+ mingw32-make STATIC=1
+
+ TODO: Static build is not implemented yet.
+
+ To copy the built binaries and required headers into a clean
+ directory, use the pkg target:
+
+ mingw32-make pkg
+
+ It first removes a possibly existing pkg directory, and then
+ recreates it with the required files.
+
+ TODO: The pkg target doesn't copy any license or other copyright
+ related information into the pkg directory.
+
+
+Creating an Import Library for MSVC
+
+ The included Makefile creates import library liblzma.a which works
+ only(?) with MinGW. To use liblzma.dll for MSVC, you need to create
+ liblzma.lib using the lib command from MSVC:
+
+ lib /def:liblzma.def /out:liblzma.lib /machine:ix86
+
+ On x86-64, the /machine argument has to naturally be changed:
+
+ lib /def:liblzma.def /out:liblzma.lib /machine:x64
+
+
+To Do
+
+ - Test Win64 support and add instructions about getting x86-64
+ version of MinGW.
+
+ - Static liblzma and statically linked command line tools
+
+ - Creating the import library for other compilers/linkers
+
+ - Building with other compilers for Windows
+
+ - liblzma currently uses cdecl. Would stdcall be more compatible?
+
+ - Support building more size-optimized liblzma (the HAVE_SMALL
+ define and other things that are needed)
+
+ - Support selecting which parts of liblzma to build to make the
+ library even smaller.
+
+ - Use the configure script on Windows just like it is used on all
+ the other systems?
+
+
+Bugs
+
+ Report bugs to <lasse.collin@tukaani.org> (in English or Finnish).
+
+ Take into account that I don't have MSVC and I cannot very easily
+ test anything on Windows. As of writing, I have tried MinGW and the
+ resulting binaries only under 32-bit Wine.
+