2 # Makefile for VIM on Win32, using Cygnus gcc
3 # Last updated by Dan Sharp. Last Change: 2007 Sep 29
5 # Also read INSTALLpc.txt!
7 # This compiles Vim as a Windows application. If you want Vim to run as a
8 # Cygwin application use the Makefile (just like on Unix).
10 # GUI no or yes: set to yes if you want the GUI version (yes)
11 # PERL define to path to Perl dir to get Perl support (not defined)
12 # PERL_VER define to version of Perl being used (56)
13 # DYNAMIC_PERL no or yes: set to yes to load the Perl DLL dynamically (yes)
14 # PYTHON define to path to Python dir to get PYTHON support (not defined)
15 # PYTHON_VER define to version of Python being used (22)
16 # DYNAMIC_PYTHON no or yes: use yes to load the Python DLL dynamically (yes)
17 # TCL define to path to TCL dir to get TCL support (not defined)
18 # TCL_VER define to version of TCL being used (83)
19 # DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
20 # RUBY define to path to Ruby dir to get Ruby support (not defined)
21 # RUBY_VER define to version of Ruby being used (16)
22 # DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
23 # MZSCHEME define to path to MzScheme dir to get MZSCHEME support (not defined)
24 # MZSCHEME_VER define to version of MzScheme being used (209_000)
25 # DYNAMIC_MZSCHEME no or yes: use yes to load the MzScheme DLLs dynamically (yes)
26 # MZSCHEME_DLLS path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
27 # GETTEXT no or yes: set to yes for dynamic gettext support (yes)
28 # ICONV no or yes: set to yes for dynamic iconv support (yes)
29 # MBYTE no or yes: set to yes to include multibyte support (yes)
30 # IME no or yes: set to yes to include IME support (yes)
31 # DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes)
32 # OLE no or yes: set to yes to make OLE gvim (no)
33 # DEBUG no or yes: set to yes if you wish a DEBUGging build (no)
34 # CPUNR No longer supported, use ARCH.
35 # ARCH i386 through pentium4: select -march argument to compile with (i386)
36 # USEDLL no or yes: set to yes to use the Runtime library DLL (no)
37 # For USEDLL=yes the cygwin1.dll is required to run Vim.
38 # POSTSCRIPT no or yes: set to yes for PostScript printing (no)
39 # FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
40 # WINVER Lowest Win32 version to support. (0x0400)
41 # CSCOPE no or yes: to include cscope interface support (yes)
42 # OPTIMIZE SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
43 # NETBEANS no or yes: to include netbeans interface support (yes when GUI
45 # NBDEBUG no or yes: to include netbeans interface debugging support (no)
46 # XPM define to path to XPM dir to get XPM image support (not defined)
47 #>>>>> choose options:
94 ### See feature.h for a list of optionals.
95 ### Any other defines can be included here.
97 DEFINES
= -DWIN32
-DHAVE_PATHDEF
-DFEAT_
$(FEATURES
) \
98 -DWINVER
=$(WINVER
) -D_WIN32_WINNT
=$(WINVER
)
99 INCLUDES
= -march
=$(ARCH
) -Iproto
101 #>>>>> name of the compiler and linker, name of lib directory
105 ##############################
106 # DYNAMIC_PERL=yes and no both work
107 ##############################
109 DEFINES
+= -DFEAT_PERL
110 INCLUDES
+= -I
$(PERL
)/lib
/CORE
111 EXTRA_OBJS
+= $(OUTDIR
)/if_perl.o
121 ifeq (yes
, $(DYNAMIC_PERL
))
122 DEFINES
+= -DDYNAMIC_PERL
-DDYNAMIC_PERL_DLL
=\"perl
$(PERL_VER
).dll
\"
124 EXTRA_LIBS
+= $(PERL
)/lib
/CORE
/perl
$(PERL_VER
).lib
128 ##############################
129 # DYNAMIC_PYTHON=yes works.
130 # DYNAMIC_PYTHON=no does not (unresolved externals on link).
131 ##############################
133 DEFINES
+= -DFEAT_PYTHON
134 INCLUDES
+= -I
$(PYTHON
)/include
135 EXTRA_OBJS
+= $(OUTDIR
)/if_python.o
137 ifndef DYNAMIC_PYTHON
145 ifeq (yes
, $(DYNAMIC_PYTHON
))
146 DEFINES
+= -DDYNAMIC_PYTHON
-DDYNAMIC_PYTHON_DLL
=\"python
$(PYTHON_VER
).dll
\"
148 EXTRA_LIBS
+= $(PYTHON
)/libs
/python
$(PYTHON_VER
).lib
152 ##############################
153 # DYNAMIC_RUBY=yes works.
154 # DYNAMIC_RUBY=no does not (process exits).
155 ##############################
170 ifeq ($(RUBY_VER
), 16)
172 RUBY_PLATFORM
= i586-mswin32
174 ifndef RUBY_INSTALL_NAME
175 RUBY_INSTALL_NAME
= mswin32-ruby
$(RUBY_VER
)
179 RUBY_PLATFORM
= i386-mswin32
181 ifndef RUBY_INSTALL_NAME
182 RUBY_INSTALL_NAME
= msvcrt-ruby
$(RUBY_VER
)
186 DEFINES
+= -DFEAT_RUBY
187 INCLUDES
+= -I
$(RUBY
)/lib
/ruby
/$(RUBY_VER_LONG
)/$(RUBY_PLATFORM
)
188 EXTRA_OBJS
+= $(OUTDIR
)/if_ruby.o
190 ifeq (yes
, $(DYNAMIC_RUBY
))
191 DEFINES
+= -DDYNAMIC_RUBY
-DDYNAMIC_RUBY_DLL
=\"$(RUBY_INSTALL_NAME
).dll
\"
192 DEFINES
+= -DDYNAMIC_RUBY_VER
=$(RUBY_VER
)
194 EXTRA_LIBS
+= $(RUBY
)/lib
/$(RUBY_INSTALL_NAME
).lib
198 ##############################
199 # DYNAMIC_MZSCHEME=yes works
200 # DYNAMIC_MZSCHEME=no works too
201 ##############################
203 DEFINES
+= -DFEAT_MZSCHEME
204 INCLUDES
+= -I
$(MZSCHEME
)/include
205 EXTRA_OBJS
+= $(OUTDIR
)/if_mzsch.o
207 ifndef DYNAMIC_MZSCHEME
208 DYNAMIC_MZSCHEME
= yes
212 MZSCHEME_VER
= 209_000
215 ifeq (yes
, $(DYNAMIC_MZSCHEME
))
216 DEFINES
+= -DDYNAMIC_MZSCHEME
-DDYNAMIC_MZSCH_DLL
=\"libmzsch
$(MZSCHEME_VER
).dll
\" -DDYNAMIC_MZGC_DLL
=\"libmzgc
$(MZSCHEME_VER
).dll
\"
219 MZSCHEME_DLLS
= $(MZSCHEME
)
221 EXTRA_LIBS
+= -L
$(MZSCHEME_DLLS
) -lmzsch
$(MZSCHEME_VER
) -lmzgc
$(MZSCHEME_VER
)
225 ##############################
226 # DYNAMIC_TCL=yes and no both work.
227 ##############################
229 DEFINES
+= -DFEAT_TCL
230 INCLUDES
+= -I
$(TCL
)/include
231 EXTRA_OBJS
+= $(OUTDIR
)/if_tcl.o
241 ifeq (yes
, $(DYNAMIC_TCL
))
242 DEFINES
+= -DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL
=\"tcl
$(TCL_VER
).dll
\"
243 EXTRA_LIBS
+= $(TCL
)/lib
/tclstub
$(TCL_VER
).lib
245 EXTRA_LIBS
+= $(TCL
)/lib
/tcl
$(TCL_VER
).lib
249 ##############################
250 ifeq (yes
, $(GETTEXT
))
251 DEFINES
+= -DDYNAMIC_GETTEXT
254 ##############################
256 DEFINES
+= -DDYNAMIC_ICONV
259 ##############################
261 DEFINES
+= -DFEAT_MBYTE
264 ##############################
266 DEFINES
+= -DFEAT_MBYTE_IME
272 ifeq (yes
, $(DYNAMIC_IME
))
273 DEFINES
+= -DDYNAMIC_IME
275 EXTRA_LIBS
+= -limm32
279 ##############################
282 INCLUDES
+= -g
-fstack-check
286 ifeq ($(OPTIMIZE
), SIZE
)
289 ifeq ($(OPTIMIZE
), MAXSPEED
)
290 OPTFLAG
= -O3
-fomit-frame-pointer
-freg-struct-return
296 # A bug in the GCC <= 3.2 optimizer can cause a crash. The
297 # following option removes the problem optimization.
298 OPTFLAG
+= -fno-strength-reduce
304 ##############################
305 # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
306 # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
307 ##############################
308 ifeq (yes
, $(USEDLL
))
309 DEFINES
+= -D_MAX_PATH
=256 -D__CYGWIN__
311 INCLUDES
+= -mno-cygwin
314 ##############################
315 ifeq (yes
, $(POSTSCRIPT
))
319 ##############################
320 ifeq (yes
, $(CSCOPE
))
321 DEFINES
+= -DFEAT_CSCOPE
322 EXTRA_OBJS
+= $(OUTDIR
)/if_cscope.o
325 ##############################
328 ##############################
329 ifeq (yes
, $(NETBEANS
))
330 # Only allow NETBEANS for a GUI build.
331 DEFINES
+= -DFEAT_NETBEANS_INTG
332 EXTRA_OBJS
+= $(OUTDIR
)/netbeans.o
333 EXTRA_LIBS
+= -lwsock32
335 ifeq (yes
, $(NBDEBUG
))
337 NBDEBUG_DEP
= nbdebug.h nbdebug.c
342 ##############################
344 # Only allow XPM for a GUI build.
345 DEFINES
+= -DFEAT_XPM_W32
346 INCLUDES
+= -I
$(XPM
)/include
347 EXTRA_OBJS
+= $(OUTDIR
)/xpm_w32.o
348 EXTRA_LIBS
+= -L
$(XPM
)/lib
-lXpm
351 ##############################
352 EXE
= gvim
$(DEBUG_SUFFIX
).exe
353 OUTDIR
= gobj
$(DEBUG_SUFFIX
)
354 DEFINES
+= -DFEAT_GUI_W32
-DFEAT_CLIPBOARD
355 EXTRA_OBJS
+= $(OUTDIR
)/gui.o
$(OUTDIR
)/gui_w32.o
$(OUTDIR
)/gui_beval.o
$(OUTDIR
)/os_w32exe.o
356 EXTRA_LIBS
+= -mwindows
-lcomctl32
-lversion
358 EXE
= vim
$(DEBUG_SUFFIX
).exe
359 OUTDIR
= obj
$(DEBUG_SUFFIX
)
360 LIBS
+= -luser32
-lgdi32
-lcomdlg32
363 ##############################
365 DEFINES
+= -DFEAT_OLE
366 EXTRA_OBJS
+= $(OUTDIR
)/if_ole.o
367 EXTRA_LIBS
+= -loleaut32
-lstdc
++
370 ##############################
371 ifneq (sh.exe
, $(SHELL
))
381 #>>>>> end of choices
382 ###########################################################################
384 INCL
= vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
387 CFLAGS
= $(OPTFLAG
) $(DEFINES
) $(INCLUDES
)
389 RCFLAGS
= -O coff
$(DEFINES
)
393 $(OUTDIR
)/charset.o \
395 $(OUTDIR
)/digraph.o \
398 $(OUTDIR
)/ex_cmds.o \
399 $(OUTDIR
)/ex_cmds2.o \
400 $(OUTDIR
)/ex_docmd.o \
401 $(OUTDIR
)/ex_eval.o \
402 $(OUTDIR
)/ex_getln.o \
405 $(OUTDIR
)/getchar.o \
406 $(OUTDIR
)/hardcopy.o \
407 $(OUTDIR
)/hashtab.o \
410 $(OUTDIR
)/memfile.o \
411 $(OUTDIR
)/memline.o \
413 $(OUTDIR
)/message.o \
421 $(OUTDIR
)/os_win32.o \
422 $(OUTDIR
)/os_mswin.o \
423 $(OUTDIR
)/pathdef.o \
424 $(OUTDIR
)/popupmnu.o \
425 $(OUTDIR
)/quickfix.o \
435 $(OUTDIR
)/version.o \
440 all: $(EXE
) xxd
/xxd.exe vimrun.exe
install.exe uninstal.exe GvimExt
/gvimext.dll
442 # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
443 # linking unless calling ld directly.
444 # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
445 $(EXE
): $(OUTDIR
) $(OBJ
)
446 $(CC
) $(CFLAGS
) -o
$(EXE
) $(OBJ
) $(LIBS
) -luuid
-lole32
$(EXTRA_LIBS
)
448 xxd
/xxd.exe
: xxd
/xxd.c
449 $(MAKE
) -C xxd
-f Make_cyg.mak USEDLL
=$(USEDLL
)
451 GvimExt
/gvimext.dll
: GvimExt
/gvimext.
cpp GvimExt
/gvimext.rc GvimExt
/gvimext.h
452 $(MAKE
) -C GvimExt
-f Make_ming.mak
455 $(CC
) $(CFLAGS
) -o vimrun.exe vimrun.c
$(LIBS
)
457 install.exe
: dosinst.c
458 $(CC
) $(CFLAGS
) -o
install.exe dosinst.c
$(LIBS
) -luuid
-lole32
460 uninstal.exe
: uninstal.c
461 $(CC
) $(CFLAGS
) -o uninstal.exe uninstal.c
$(LIBS
)
467 command
/c ctags
*.c
$(INCL
)
470 -$(DEL
) $(OUTDIR
)$(DIRSLASH
)*.o
472 -$(DEL
) $(EXE
) vimrun.exe
install.exe uninstal.exe
477 $(MAKE
) -C xxd
-f Make_cyg.mak
clean
478 $(MAKE
) -C GvimExt
-f Make_ming.mak
clean
481 -$(DEL
) obj
$(DIRSLASH
)*.o
483 -$(DEL
) gobj
$(DIRSLASH
)*.o
485 -$(DEL
) objd
$(DIRSLASH
)*.o
487 -$(DEL
) gobjd
$(DIRSLASH
)*.o
491 ###########################################################################
493 $(OUTDIR
)/%.o
: %.c
$(INCL
)
494 $(CC
) -c
$(CFLAGS
) $< -o
$@
496 $(OUTDIR
)/ex_docmd.o
: ex_docmd.c
$(INCL
) ex_cmds.h
497 $(CC
) -c
$(CFLAGS
) ex_docmd.c
-o
$(OUTDIR
)/ex_docmd.o
499 $(OUTDIR
)/ex_eval.o
: ex_eval.c
$(INCL
) ex_cmds.h
500 $(CC
) -c
$(CFLAGS
) ex_eval.c
-o
$(OUTDIR
)/ex_eval.o
502 $(OUTDIR
)/if_cscope.o
: if_cscope.c
$(INCL
) if_cscope.h
503 $(CC
) -c
$(CFLAGS
) if_cscope.c
-o
$(OUTDIR
)/if_cscope.o
505 $(OUTDIR
)/if_ole.o
: if_ole.
cpp $(INCL
)
506 $(CC
) -c
$(CFLAGS
) if_ole.
cpp -o
$(OUTDIR
)/if_ole.o
508 if_perl.c
: if_perl.xs typemap
509 $(PERL
)/bin
/perl
`cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
510 -prototypes
-typemap \
511 `cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs
> $@
513 $(OUTDIR
)/if_perl.o
: if_perl.c
$(INCL
)
514 ifeq (yes
, $(USEDLL
))
515 $(CC
) -c
$(CFLAGS
) -I
/usr
/include/mingw
-D__MINGW32__ if_perl.c
-o
$(OUTDIR
)/if_perl.o
518 $(OUTDIR
)/if_ruby.o
: if_ruby.c
$(INCL
)
519 ifeq (16, $(RUBY_VER
))
520 $(CC
) -c
$(CFLAGS
) -U_WIN32 if_ruby.c
-o
$(OUTDIR
)/if_ruby.o
523 $(OUTDIR
)/netbeans.o
: netbeans.c
$(INCL
) $(NBDEBUG_DEP
)
524 $(CC
) -c
$(CFLAGS
) netbeans.c
-o
$(OUTDIR
)/netbeans.o
526 $(OUTDIR
)/vimrc.o
: vim.rc version.h gui_w32_rc.h
527 $(RC
) $(RCFLAGS
) vim.rc
-o
$(OUTDIR
)/vimrc.o
530 ifneq (sh.exe
, $(SHELL
))
531 @echo creating pathdef.c
532 @echo
'/* pathdef.c */' > pathdef.c
533 @echo
'#include "vim.h"' >> pathdef.c
534 @echo
'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
535 @echo
'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
536 @echo
'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
537 @echo
'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
538 @echo
'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
539 @echo
'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
541 @echo creating pathdef.c
542 @echo
/* pathdef.c
*/ > pathdef.c
543 @echo
#include "vim.h" >> pathdef.c
544 @echo char_u
*default_vim_dir
= (char_u
*)"$(VIMRCLOC)"; >> pathdef.c
545 @echo char_u
*default_vimruntime_dir
= (char_u
*)"$(VIMRUNTIMEDIR)"; >> pathdef.c
546 @echo char_u
*all_cflags = (char_u
*)"$(CC) $(CFLAGS)"; >> pathdef.c
547 @echo char_u
*all_lflags
= (char_u
*)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
548 @echo char_u
*compiled_user
= (char_u
*)"$(USERNAME)"; >> pathdef.c
549 @echo char_u
*compiled_sys
= (char_u
*)"$(USERDOMAIN)"; >> pathdef.c