I've been trying to make Vim 7
compile with the
Microsoft Visual C++ 2003 Toolkit,
as a favor to Bram Moolenaar, the primary author of Vim.
He wants to be able to use the free compiler as the
primary build tool for the Win32 version of Vim.
Oh. My. God.
The VC2003 toolkit may include a full optimizing compiler,
but it's certainly far from a complete system for building
Windows binaries.
First, I discovered that it came only with the C library headers,
but not the Windows headers. That was easily rectified. Download the
Platform SDK.
Just the Windows Core SDK subset. This also got me nmake.
At this point, I was able to compile Vim, but not to link it.
The linker required cvtres.exe, to link some resources.
Some googling showed me that this is included in the .NET Runtime.
The main Vim executable now linked, but the shell extension DLL didn't.
I didn't have msvcrt.lib! It took me more detective work to learn
that I'd have to install the .NET Framework SDK to get msvcrt.lib. There are several clever hacks out there
that generate msvcrt.lib from msvcrt.dll, with the help
of link -dump -exports and a sed script,
but these do not include the all-important _DllMainCRTStartup@12,
the real entrypoint for DLLs linked with msvcrt.
All the necessary steps for getting the downloads are summarized on the
Code::Blocks wiki. Code::Blocks is an open-source IDE that can host the
VC2003 toolkit, GCC, and a number of other compilers.
So why bother with the VC2003 toolkit, since
Visual C++ 2005 Express Edition
is freely downloadable?
The main reason is that it's free only for the first year,
and Bram wants something that will still be available after
November 2006, so that anyone can compile it.
I have also ported Vim 7 to compile with VC2005 Express.
It was fairly straightforward, after I had added the following
#if _MSC_VER >= 1400
# define _CRT_SECURE_NO_DEPRECATE
# define _CRT_NONSTDC_NO_DEPRECATE
#endif
to shut up the warnings about deprecated CRT functions.
I also had to make it link with libcmt.lib (multithreaded) instead of libc.lib,
as the single-threaded static library is gone.
I still need to make sure that everything continues to work with
the retail compilers, VC6, VC7.1, and VC8, before passing my changes
back to Bram. Sigh.
Update #1: I almost forgot. VC2005 Express also requires the
Platform SDK to build Vim.
I'll send the diffs to Bram in about a week. I'm too busy to clean everything up this week.
Update #2 (2006/03/12): I sent updates to Bram a week ago
and he's checked them into the Vim7 source tree. Be sure to read
src/INSTALLpc.txt, section 1, for details on compiling Vim
with VC5-VC8.
Update #3 (2006/04/22): VC2005 Express is now free
forever.
Vim7 is in beta and will be released soon, and Bram doesn't want to switch compilers at this point.