Commit 8e881830 authored by Tor Lillqvist's avatar Tor Lillqvist

Update README.win32.

parent 96086833
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
2000-07-05 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
Mon Jul 3 17:58:02 2000 Owen Taylor <otaylor@redhat.com>
* gutf8.c (g_utf8_get_charset_internal): Fix up
......
......@@ -5,17 +5,21 @@ For more information about the port or GLib, GTk+ and the GIMP to
native Windows, and pre-built binary packages, see
http://www.iki.fi/tml/gimp/win32/ . "Native" means that we use the
Win32 API only, and not any POSIX operating system emulation layer
except that provided by the Microsoft runtime C library. Additionally,
except that provided by the Microsoft runtime C library. Actually,
a pthreads emulation library is used.
To build GLib on Win32, you can use either the Microsoft compiler and
tools, or gcc. Both the compiler from MSVC 5.0 and from MSVC 6.0 have
been used successfully. With gcc I mean gcc-2.95 or gcc-2.95.2 as
distributed by Mumit Khan, either as a mingw version (preferred), or
running under cygwin. To successfully use gcc, follow the instructions
below. We want to use gcc -mno-cygwin, i.e. produce executables (.exe
and .dll files) that do *not* require the cygwin runtime library. This
is called "mingw".
To build GLib on Win32, you can use either gcc or the Microsoft
compiler and tools. Both the compiler from MSVC 5.0 and from MSVC 6.0
have been used successfully. However, the makefiles for MSVC are not
up-to-date, sorry. If you fix the makefile.msc files, and manage to
build with MSVC, please send the updates makefile.msc files to the
gimpwin-dev list.
With gcc I mean gcc-2.95 or gcc-2.95.2 as distributed by Mumit Khan,
either as a mingw version (preferred), or running under cygwin. To
successfully use gcc, follow the instructions below. We want to use
gcc -mno-cygwin, i.e. produce executables (.exe and .dll files) that
do *not* require the cygwin runtime library. This is called "mingw".
To test the GLib functions, go to the tests subdirectory and enter
`nmake -f makefile.msc check` or `make -f makefile.mingw check`.
......@@ -23,7 +27,8 @@ To test the GLib functions, go to the tests subdirectory and enter
If you would want to use the cygwin tools to generate executables that
*do* use the cygwin runtime, the normal Unix configuration method
should work as if on Unix. But it won't produce DLLs. At least I
haven't succeeded in that.
haven't succeeded in that. Also, I have no idea what changes are
necessary to the code for it to run successfully on cygwin.
With a little work, it might be possible to use the ./configure
mechanism also with a "mingw32" configuration.
......@@ -80,19 +85,13 @@ Where are the makefiles?
========================
If you are building from a CVS snapshot, you will not have any
makefile.msc or makefile.mingw file. You should copy the
corresponding makefile.msc.in or makefile.mingw.in file to that name,
and edit the line that sets GLIB_VER to the correct version number.
makefile.mingw or makefile.msc file. You should copy the corresponding
makefile.mingw.in or makefile.msc.in file to that name, and edit the
line that sets GLIB_VER to the correct version number.
This is done automatically when an official distribution package is
built.
Building with MSVC
==================
If using the Microsoft toolchain, build with `nmake -f
makefile.msc`. Install with `nmake -f makefile.msc install`.
Building with gcc
=================
......@@ -100,263 +99,32 @@ I use the latest and greatest gcc, gcc-2.95.2. 2.95 will also work.
Earlier version might, but you are on your own.
You can either use gcc running on cygwin, or the "pure" mingw
gcc. Using the latter is much easier. Just fetch the latest version of
gcc for mingw and the msvcrt runtime, currently from
gcc. Using the latter is much easier.
Just fetch the latest version of gcc for mingw and the msvcrt runtime,
currently from
ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/
. Download the three zip archives: the gcc-<version>-msvcrt,
.
Download the three zip archives: the gcc-<version>-msvcrt,
mingw-msvcrt-<timestamp> and binutils-<timestamp>-msvcrt, and unpack
them in a suitable directory. Set up your PATH so that the gcc from
the bin directory that got created above is the one that gets
used. You can skip steps 1--5 below. Even if you run the mingw gcc,
you still want to have cygwin to run make in.
them in a suitable directory.
Set up your PATH so that the gcc from the bin directory that got
created above is the one that gets used. You can skip steps 1--5
below. Even if you run the mingw gcc, you still want to have cygwin to
run make in.
If you want to run a cygwin-based gcc, it gets much more
complicated. We still want gcc to produce code that does not use
cygwin, but the msvcrt runtime. Read the below instruction carefully
and understand them. If you don't understand or can't follow the
instructions, you probably shouldn't want to build GLib (or GTk+ or
GIMP) yourself anyway.
0) Get and install Cygwin B20.1.
Move the include files and libraries included in Cygwin out of the
way not to mix things up... (For example, rename
/cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/lib to
lib-no-thanks and rename
/cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include to
include-no-thanks.
1) Get gcc 2.95.2 built for Cygwin B20.1 from
ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/gcc-2.95.2-cygb20.tar.gz
Install it somewhere, let's say G:\gcc-2.95.2 (//g/gcc-2.95.2 when
in Cygwin). Add //g/gcc-2.95.2/H-i586-cygwin32/bin to your
PATH. I assume you use bash below.
Replace the specs file in
//g/gcc-2.95.2/H-i586-cygwin32/lib/gcc-lib/i586-cygwin32/2.95.2/specs
with the following. (The changes are: Define __MSVCRT__, replace
the "1" versions of the crt files with the "2" ones, replace crtdll
with msvcrt. Also, extra whitespace squished. )
================ cut here ================
*asm:
*asm_final:
*cpp:
-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE} %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__} %{mno-cygwin:-iwithprefixbefore ../../../../%(mingw_include_path)/include/mingw32 -D__MSVCRT__ -D__MINGW32__=0.2}
*cc1:
%(cc1_spec)
*cc1plus:
*endfile:
*link:
%{mwindows:--subsystem windows} %{mconsole:--subsystem console} %{mdll:--dll -e _DllMainCRTStartup@12}
*lib:
%{pg:-lgmon} %{!mno-cygwin:-lcygwin} %{mno-cygwin:-lmingw32 -lmoldname -lmsvcrt} %{mwindows:-lgdi32 -lcomdlg32} -luser32 -lkernel32 -ladvapi32 -lshell32
*libgcc:
-lgcc
*startfile:
%{mdll: %{mno-cygwin:dllcrt2%O%s}} %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s} %{pg: %{!mno-cygwin:gcrt0%O%s} %{mno-cygwin:gcrt2%O%s}}}
*switches_need_spaces:
*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}
*predefines:
-Di386 -D_WIN32 -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386)
*cross_compile:
0
*version:
2.95.2
*multilib:
. !mno-cygwin;mingw32 mno-cygwin;;
*multilib_defaults:
*multilib_extra:
cygwin, but the msvcrt runtime. The way to do this can be quite
complex, and the instructions are not included here. Contact me if you
want some possibly outdated, misleading and incomplete advice.
*multilib_matches:
mno-cygwin mno-cygwin;
*linker:
collect2
*cpp_486:
%{!ansi:-Di486} -D__i486 -D__i486__
*cpp_586:
%{!ansi:-Di586 -Dpentium} -D__i586 -D__i586__ -D__pentium -D__pentium__
*cpp_k6:
%{!ansi:-Di586 -Dk6} -D__i586 -D__i586__ -D__k6 -D__k6__
*cpp_686:
%{!ansi:-Di686 -Dpentiumpro} -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__
*cpp_cpu_default:
%(cpp_586)
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{mcpu=i486:%(cpp_486)} %{m486:%(cpp_486)} %{mpentium:%(cpp_586)} %{mcpu=pentium:%(cpp_586)} %{mpentiumpro:%(cpp_686)} %{mcpu=pentiumpro:%(cpp_686)} %{mcpu=k6:%(cpp_k6)} %{!mcpu*:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386 -march=i386} %{m486:-mcpu=i486 -march=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
*mingw_include_path:
i586-cygwin32
*link_command:
%{!fsyntax-only: %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %D %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*}
}}}}}}
================ cut here ================
2) Get the Mingw32 runtime sources from
ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/gcc-2.95.2/runtime-source-19991107.zip
Unpack it somewhere, say //g/src/mingw-runtime-19991107 .
Apply the following patches:
This makes the mingwm10.dll depend on the stuff that is needed
to build it.:
================ cut here ================
diff -ru2 ./mingw/Makefile.in ../../src/mingw-runtime-19991107/mingw/Makefile.in
--- ./mingw/Makefile.in Sun Nov 07 12:19:22 1999
+++ ../../src/mingw-runtime-19991107/mingw/Makefile.in Mon Nov 08 14:55:38 1999
@@ -138,5 +138,5 @@
--base-file mingwthrd.base --output-exp mingwthrd.exp
-$(THREAD_DLL_NAME) mingwthrd.def: $(DLL_OFILES) Makefile
+$(THREAD_DLL_NAME) mingwthrd.def: $(DLL_OFILES) Makefile libmingw32.a libmoldname.a lib$(RUNTIME).a dllcrt$(CRT_ID).o
$(DLLTOOL) --as $(AS) --output-def mingwthrd.def $(DLL_OFILES)
$(CC) -Wl,--base-file=mingwthrd.base $(DLL_CC_STUFF)
================ cut here ================
This enables building the profiling gcrt2.o. I don't know how useful
it is, though, there doesn't seem to be any gprof command in cygwin.
================ cut here ================
diff -ru2 ./mingw/profile/Makefile.in ../../src/mingw-runtime-19991107/mingw/profile/Makefile.in
--- ./mingw/profile/Makefile.in Sun Nov 07 12:18:56 1999
+++ ../../src/mingw-runtime-19991107/mingw/profile/Makefile.in Mon Nov 08 12:12:12 1999
@@ -76,8 +76,8 @@
gcrt1.o: gcrt0.c
- $(CC) -U__MSVCRT__ -c -o $@ $(CPPFLAGS) $(CFLAGS) $?
+ $(CC) -U__MSVCRT__ -c -o $@ $(CPPFLAGS) $(ALL_CFLAGS) $?
gcrt2.o: gcrt0.c
- $(CC) -D__MSVCRT__ -c -o $@ $(CPPFLAGS) $(CFLAGS) $?
+ $(CC) -D__MSVCRT__ -c -o $@ $(CPPFLAGS) $(ALL_CFLAGS) $?
Makefile: Makefile.in config.status configure
================ cut here ================
This fixes a typo in wingdi.h:
================ cut here ================
diff -ru2 ./w32api/include/wingdi.h ../../src/mingw-runtime-19991107/w32api/include/wingdi.h
--- ./w32api/include/wingdi.h Thu Nov 04 03:42:40 1999
+++ ../../src/mingw-runtime-19991107/w32api/include/wingdi.h Mon Nov 08 12:48:02 1999
@@ -304,5 +304,5 @@
#define FW_BOLD 700
#define FW_EXTRABOLD 800
-#define FW_ULTRABOLD FW_EXTRABOOLD
+#define FW_ULTRABOLD FW_EXTRABOLD
#define FW_HEAVY 900
#define FW_BLACK FW_HEAVY
================ cut here ================
fpos_t should be long long with MSVCRT.DLL:
================ cut here ================
--- stdio.h~ Thu Aug 19 02:47:42 1999
+++ stdio.h Mon Jan 17 21:58:20 2000
@@ -296,6 +296,11 @@
* it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL).
* Perhaps an unsigned long? TODO?
+ * In MSVCRT.DLL it's a long long, however.
*/
+#ifdef __MSVCRT__
+typedef long long fpos_t;
+#else
typedef long fpos_t;
+#endif
int fgetpos (FILE* fileGetPosition, fpos_t* pfpos);
================ cut here ================
(I haven't checked yet if other small errors I have noticed in
previous w32api header versions have been corrected.)
3) Now you should build the mingw32 and w32api runtime and import libraries.
Go to //g/src/mingw-runtime-19991107/w32api. Enter:
CC='gcc -mno-cygwin' ./configure i586-pc-mingw32msvc
make
That should complete in a while. It should produce a lot of .a
libraries (both import libraries, and a couple of archive
libraries), and some .o files. I don't trust make install to do
what I want (especially as I didn't give any --prefix argument to
the configure...), so I install the stuff manually:
cd lib
mkdir //g/gcc-2.95.2/H-i586-cygwin32/lib/mingw32
cp *.a //g/gcc-2.95.2/H-i586-cygwin32/lib/mingw32
cp crt2.o crtdll2.o //g/gcc-2.95.2/H-i586-cygwin32/lib/mingw32
cd ../include
mkdir //g/gcc-2.95.2/H-i586-cygwin32/i586-cygwin32/include/mingw32
cp *.h //g/gcc-2.95.2/H-i586-cygwin32/i586-cygwin32/include/mingw32
Now go to ../../mingw, and run the same configure command, and do a
make:
CC='gcc -mno-cygwin' ./configure i586-pc-mingw32msvc
make
Then install the mingw32 libraries and headers:
cp *.a //g/gcc-2.95.2/H-i586-cygwin32/lib/mingw32
mkdir //g/gcc-2.95.2/H-i586-cygwin32/i586-cygwin32/include/mingw32/sys
cp include/sys/*.h //g/gcc-2.95.2/H-i586-cygwin32/i586-cygwin32/include/mingw32/sys
cp include/*.h //g/gcc-2.95.2/H-i586-cygwin32/i586-cygwin32/include/mingw32
4) Get an updated set of binutils for cygwin B20.1 from
ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/binutils-2.9.4-cygb20.tar.gz
Unpack that in your /cygnus/cygwin-b20 directory. The relevant
difference is: dlltool now parses GCC generated export directives
correctly for DATA items.
5) Whew. That hopefully should be it.
Building with MSVC
==================
Next, go back to the GLib directory and build using `make -f
makefile.mingw`. Building the dlls uses the script build-dll which
is somewhat of a hack. But I couldn't get things working in a cleaner
way.
If using the Microsoft toolchain, build with `nmake -f
makefile.msc`. Install with `nmake -f makefile.msc install`.
--Tor Lillqvist <tml@iki.fi>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment