2 # Makefile for VIM on Win32, using Cygnus gcc
3 # Last updated by Dan Sharp. Last Change: 2010 Feb 24
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
37 # USEDLL no or yes: set to yes to use the Runtime library DLL (no)
38 # For USEDLL=yes the cygwin1.dll is required to run Vim.
39 # "no" does not work with latest version of Cygwin, use
40 # Make_ming.mak instead. Or set CC to gcc-3.
41 # POSTSCRIPT no or yes: set to yes for PostScript printing (no)
42 # FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
43 # WINVER Lowest Win32 version to support. (0x0400)
44 # CSCOPE no or yes: to include cscope interface support (yes)
45 # OPTIMIZE SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
46 # NETBEANS no or yes: to include netbeans interface support (yes when GUI
48 # NBDEBUG no or yes: to include netbeans interface debugging support (no)
49 # XPM define to path to XPM dir to get XPM image support (not defined)
50 #>>>>> choose options:
97 ### See feature.h for a list of optionals.
98 ### Any other defines can be included here.
100 DEFINES
= -DWIN32
-DHAVE_PATHDEF
-DFEAT_
$(FEATURES
) \
101 -DWINVER
=$(WINVER
) -D_WIN32_WINNT
=$(WINVER
)
102 INCLUDES
= -march
=$(ARCH
) -Iproto
104 #>>>>> name of the compiler and linker, name of lib directory
109 ##############################
110 # DYNAMIC_PERL=yes and no both work
111 ##############################
113 DEFINES
+= -DFEAT_PERL
114 INCLUDES
+= -I
$(PERL
)/lib
/CORE
115 EXTRA_OBJS
+= $(OUTDIR
)/if_perl.o
125 ifeq (yes
, $(DYNAMIC_PERL
))
126 DEFINES
+= -DDYNAMIC_PERL
-DDYNAMIC_PERL_DLL
=\"perl
$(PERL_VER
).dll
\"
128 EXTRA_LIBS
+= $(PERL
)/lib
/CORE
/perl
$(PERL_VER
).lib
132 ##############################
133 # DYNAMIC_PYTHON=yes works.
134 # DYNAMIC_PYTHON=no does not (unresolved externals on link).
135 ##############################
137 DEFINES
+= -DFEAT_PYTHON
138 INCLUDES
+= -I
$(PYTHON
)/include
139 EXTRA_OBJS
+= $(OUTDIR
)/if_python.o
141 ifndef DYNAMIC_PYTHON
149 ifeq (yes
, $(DYNAMIC_PYTHON
))
150 DEFINES
+= -DDYNAMIC_PYTHON
-DDYNAMIC_PYTHON_DLL
=\"python
$(PYTHON_VER
).dll
\"
152 EXTRA_LIBS
+= $(PYTHON
)/libs
/python
$(PYTHON_VER
).lib
156 ##############################
157 # DYNAMIC_RUBY=yes works.
158 # DYNAMIC_RUBY=no does not (process exits).
159 ##############################
174 ifeq ($(RUBY_VER
), 16)
176 RUBY_PLATFORM
= i586-mswin32
178 ifndef RUBY_INSTALL_NAME
179 RUBY_INSTALL_NAME
= mswin32-ruby
$(RUBY_VER
)
183 RUBY_PLATFORM
= i386-mswin32
185 ifndef RUBY_INSTALL_NAME
186 RUBY_INSTALL_NAME
= msvcrt-ruby
$(RUBY_VER
)
190 DEFINES
+= -DFEAT_RUBY
191 INCLUDES
+= -I
$(RUBY
)/lib
/ruby
/$(RUBY_VER_LONG
)/$(RUBY_PLATFORM
)
192 EXTRA_OBJS
+= $(OUTDIR
)/if_ruby.o
194 ifeq (yes
, $(DYNAMIC_RUBY
))
195 DEFINES
+= -DDYNAMIC_RUBY
-DDYNAMIC_RUBY_DLL
=\"$(RUBY_INSTALL_NAME
).dll
\"
196 DEFINES
+= -DDYNAMIC_RUBY_VER
=$(RUBY_VER
)
198 EXTRA_LIBS
+= $(RUBY
)/lib
/$(RUBY_INSTALL_NAME
).lib
202 ##############################
203 # DYNAMIC_MZSCHEME=yes works
204 # DYNAMIC_MZSCHEME=no works too
205 ##############################
207 DEFINES
+= -DFEAT_MZSCHEME
208 INCLUDES
+= -I
$(MZSCHEME
)/include
209 EXTRA_OBJS
+= $(OUTDIR
)/if_mzsch.o
211 ifndef DYNAMIC_MZSCHEME
212 DYNAMIC_MZSCHEME
= yes
216 MZSCHEME_VER
= 209_000
219 ifndef MZSCHEME_PRECISE_GC
220 MZSCHEME_PRECISE_GC
=no
223 # for version 4.x we need to generate byte-code for Scheme base
224 ifndef MZSCHEME_GENERATE_BASE
225 MZSCHEME_GENERATE_BASE
=no
228 ifeq (yes
, $(DYNAMIC_MZSCHEME
))
229 DEFINES
+= -DDYNAMIC_MZSCHEME
-DDYNAMIC_MZSCH_DLL
=\"libmzsch
$(MZSCHEME_VER
).dll
\" -DDYNAMIC_MZGC_DLL
=\"libmzgc
$(MZSCHEME_VER
).dll
\"
232 MZSCHEME_DLLS
= $(MZSCHEME
)
234 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
235 MZSCHEME_LIB
=-lmzsch
$(MZSCHEME_VER
)
237 MZSCHEME_LIB
= -lmzsch
$(MZSCHEME_VER
) -lmzgc
$(MZSCHEME_VER
)
239 EXTRA_LIBS
+= -L
$(MZSCHEME_DLLS
) -L
$(MZSCHEME_DLLS
)/lib
$(MZSCHEME_LIB
)
241 ifeq (yes
,$(MZSCHEME_GENERATE_BASE
))
242 DEFINES
+= -DINCLUDE_MZSCHEME_BASE
243 MZ_EXTRA_DEP
+= mzscheme_base.c
245 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
246 DEFINES
+= -DMZ_PRECISE_GC
250 ##############################
251 # DYNAMIC_TCL=yes and no both work.
252 ##############################
254 DEFINES
+= -DFEAT_TCL
255 INCLUDES
+= -I
$(TCL
)/include
256 EXTRA_OBJS
+= $(OUTDIR
)/if_tcl.o
266 ifeq (yes
, $(DYNAMIC_TCL
))
267 DEFINES
+= -DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL
=\"tcl
$(TCL_VER
).dll
\"
268 EXTRA_LIBS
+= $(TCL
)/lib
/tclstub
$(TCL_VER
).lib
270 EXTRA_LIBS
+= $(TCL
)/lib
/tcl
$(TCL_VER
).lib
274 ##############################
275 ifeq (yes
, $(GETTEXT
))
276 DEFINES
+= -DDYNAMIC_GETTEXT
279 ##############################
281 DEFINES
+= -DDYNAMIC_ICONV
284 ##############################
286 DEFINES
+= -DFEAT_MBYTE
289 ##############################
291 DEFINES
+= -DFEAT_MBYTE_IME
297 ifeq (yes
, $(DYNAMIC_IME
))
298 DEFINES
+= -DDYNAMIC_IME
300 EXTRA_LIBS
+= -limm32
304 ##############################
307 INCLUDES
+= -g
-fstack-check
311 ifeq ($(OPTIMIZE
), SIZE
)
314 ifeq ($(OPTIMIZE
), MAXSPEED
)
315 OPTFLAG
= -O3
-fomit-frame-pointer
-freg-struct-return
321 # A bug in the GCC <= 3.2 optimizer can cause a crash. The
322 # following option removes the problem optimization.
323 OPTFLAG
+= -fno-strength-reduce
329 ##############################
330 # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
331 # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
332 ##############################
333 ifeq (yes
, $(USEDLL
))
334 DEFINES
+= -D_MAX_PATH
=256 -D__CYGWIN__
336 INCLUDES
+= -mno-cygwin
339 ##############################
340 ifeq (yes
, $(POSTSCRIPT
))
344 ##############################
345 ifeq (yes
, $(CSCOPE
))
346 DEFINES
+= -DFEAT_CSCOPE
347 EXTRA_OBJS
+= $(OUTDIR
)/if_cscope.o
350 ##############################
353 ##############################
354 ifeq (yes
, $(NETBEANS
))
355 # Only allow NETBEANS for a GUI build.
356 DEFINES
+= -DFEAT_NETBEANS_INTG
357 EXTRA_OBJS
+= $(OUTDIR
)/netbeans.o
358 EXTRA_LIBS
+= -lwsock32
360 ifeq (yes
, $(NBDEBUG
))
362 NBDEBUG_DEP
= nbdebug.h nbdebug.c
367 ##############################
369 # Only allow XPM for a GUI build.
370 DEFINES
+= -DFEAT_XPM_W32
371 INCLUDES
+= -I
$(XPM
)/include
372 EXTRA_OBJS
+= $(OUTDIR
)/xpm_w32.o
373 EXTRA_LIBS
+= -L
$(XPM
)/lib
-lXpm
376 ##############################
377 EXE
= gvim
$(DEBUG_SUFFIX
).exe
378 OUTDIR
= gobj
$(DEBUG_SUFFIX
)
379 DEFINES
+= -DFEAT_GUI_W32
-DFEAT_CLIPBOARD
380 EXTRA_OBJS
+= $(OUTDIR
)/gui.o
$(OUTDIR
)/gui_w32.o
$(OUTDIR
)/gui_beval.o
$(OUTDIR
)/os_w32exe.o
381 EXTRA_LIBS
+= -mwindows
-lcomctl32
-lversion
383 EXE
= vim
$(DEBUG_SUFFIX
).exe
384 OUTDIR
= obj
$(DEBUG_SUFFIX
)
385 LIBS
+= -luser32
-lgdi32
-lcomdlg32
388 ##############################
390 DEFINES
+= -DFEAT_OLE
391 EXTRA_OBJS
+= $(OUTDIR
)/if_ole.o
392 EXTRA_LIBS
+= -loleaut32
-lstdc
++
395 ##############################
396 ifneq (sh.exe
, $(SHELL
))
406 #>>>>> end of choices
407 ###########################################################################
409 INCL
= vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
412 CFLAGS
= $(OPTFLAG
) $(DEFINES
) $(INCLUDES
)
414 RCFLAGS
= -O coff
$(DEFINES
)
418 $(OUTDIR
)/charset.o \
420 $(OUTDIR
)/digraph.o \
423 $(OUTDIR
)/ex_cmds.o \
424 $(OUTDIR
)/ex_cmds2.o \
425 $(OUTDIR
)/ex_docmd.o \
426 $(OUTDIR
)/ex_eval.o \
427 $(OUTDIR
)/ex_getln.o \
430 $(OUTDIR
)/getchar.o \
431 $(OUTDIR
)/hardcopy.o \
432 $(OUTDIR
)/hashtab.o \
435 $(OUTDIR
)/memfile.o \
436 $(OUTDIR
)/memline.o \
438 $(OUTDIR
)/message.o \
446 $(OUTDIR
)/os_win32.o \
447 $(OUTDIR
)/os_mswin.o \
448 $(OUTDIR
)/pathdef.o \
449 $(OUTDIR
)/popupmnu.o \
450 $(OUTDIR
)/quickfix.o \
460 $(OUTDIR
)/version.o \
465 all: $(EXE
) xxd
/xxd.exe vimrun.exe
install.exe uninstal.exe GvimExt
/gvimext.dll
467 # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
468 # linking unless calling ld directly.
469 # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
470 $(EXE
): $(OUTDIR
) $(OBJ
)
471 $(CC
) $(CFLAGS
) -o
$(EXE
) $(OBJ
) $(LIBS
) -luuid
-lole32
$(EXTRA_LIBS
)
473 xxd
/xxd.exe
: xxd
/xxd.c
474 $(MAKE
) -C xxd
-f Make_cyg.mak CC
=$(CC
) USEDLL
=$(USEDLL
)
476 GvimExt
/gvimext.dll
: GvimExt
/gvimext.
cpp GvimExt
/gvimext.rc GvimExt
/gvimext.h
477 $(MAKE
) -C GvimExt
-f Make_ming.mak CROSS_COMPILE
=$(CROSS_COMPILE
)
480 $(CC
) $(CFLAGS
) -o vimrun.exe vimrun.c
$(LIBS
)
482 install.exe
: dosinst.c
483 $(CC
) $(CFLAGS
) -o
install.exe dosinst.c
$(LIBS
) -luuid
-lole32
485 uninstal.exe
: uninstal.c
486 $(CC
) $(CFLAGS
) -o uninstal.exe uninstal.c
$(LIBS
)
492 command
/c ctags
*.c
$(INCL
)
495 -$(DEL
) $(OUTDIR
)$(DIRSLASH
)*.o
497 -$(DEL
) $(EXE
) vimrun.exe
install.exe uninstal.exe
502 -$(DEL
) mzscheme_base.c
505 $(MAKE
) -C xxd
-f Make_cyg.mak
clean
506 $(MAKE
) -C GvimExt
-f Make_ming.mak
clean
509 -$(DEL
) obj
$(DIRSLASH
)*.o
511 -$(DEL
) gobj
$(DIRSLASH
)*.o
513 -$(DEL
) objd
$(DIRSLASH
)*.o
515 -$(DEL
) gobjd
$(DIRSLASH
)*.o
519 ###########################################################################
521 $(OUTDIR
)/%.o
: %.c
$(INCL
)
522 $(CC
) -c
$(CFLAGS
) $< -o
$@
524 $(OUTDIR
)/ex_docmd.o
: ex_docmd.c
$(INCL
) ex_cmds.h
525 $(CC
) -c
$(CFLAGS
) ex_docmd.c
-o
$(OUTDIR
)/ex_docmd.o
527 $(OUTDIR
)/ex_eval.o
: ex_eval.c
$(INCL
) ex_cmds.h
528 $(CC
) -c
$(CFLAGS
) ex_eval.c
-o
$(OUTDIR
)/ex_eval.o
530 $(OUTDIR
)/if_cscope.o
: if_cscope.c
$(INCL
) if_cscope.h
531 $(CC
) -c
$(CFLAGS
) if_cscope.c
-o
$(OUTDIR
)/if_cscope.o
533 $(OUTDIR
)/if_ole.o
: if_ole.
cpp $(INCL
)
534 $(CC
) -c
$(CFLAGS
) if_ole.
cpp -o
$(OUTDIR
)/if_ole.o
536 if_perl.c
: if_perl.xs typemap
537 $(PERL
)/bin
/perl
`cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
538 -prototypes
-typemap \
539 `cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs
> $@
541 $(OUTDIR
)/if_perl.o
: if_perl.c
$(INCL
)
542 ifeq (yes
, $(USEDLL
))
543 $(CC
) -c
$(CFLAGS
) -I
/usr
/include/mingw
-D__MINGW32__ if_perl.c
-o
$(OUTDIR
)/if_perl.o
546 $(OUTDIR
)/if_ruby.o
: if_ruby.c
$(INCL
)
547 ifeq (16, $(RUBY_VER
))
548 $(CC
) -c
$(CFLAGS
) -U_WIN32 if_ruby.c
-o
$(OUTDIR
)/if_ruby.o
551 $(OUTDIR
)/netbeans.o
: netbeans.c
$(INCL
) $(NBDEBUG_DEP
)
552 $(CC
) -c
$(CFLAGS
) netbeans.c
-o
$(OUTDIR
)/netbeans.o
554 $(OUTDIR
)/if_mzsch.o
: if_mzsch.c
$(INCL
) if_mzsch.h
$(MZ_EXTRA_DEP
)
555 $(CC
) -c
$(CFLAGS
) if_mzsch.c
-o
$(OUTDIR
)/if_mzsch.o
557 $(OUTDIR
)/vimrc.o
: vim.rc version.h gui_w32_rc.h
558 $(RC
) $(RCFLAGS
) vim.rc
-o
$(OUTDIR
)/vimrc.o
561 $(MZSCHEME
)/mzc
--c-mods mzscheme_base.c
++lib scheme
/base
564 ifneq (sh.exe
, $(SHELL
))
565 @echo creating pathdef.c
566 @echo
'/* pathdef.c */' > pathdef.c
567 @echo
'#include "vim.h"' >> pathdef.c
568 @echo
'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
569 @echo
'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
570 @echo
'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
571 @echo
'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
572 @echo
'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
573 @echo
'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
575 @echo creating pathdef.c
576 @echo
/* pathdef.c
*/ > pathdef.c
577 @echo
#include "vim.h" >> pathdef.c
578 @echo char_u
*default_vim_dir
= (char_u
*)"$(VIMRCLOC)"; >> pathdef.c
579 @echo char_u
*default_vimruntime_dir
= (char_u
*)"$(VIMRUNTIMEDIR)"; >> pathdef.c
580 @echo char_u
*all_cflags = (char_u
*)"$(CC) $(CFLAGS)"; >> pathdef.c
581 @echo char_u
*all_lflags
= (char_u
*)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
582 @echo char_u
*compiled_user
= (char_u
*)"$(USERNAME)"; >> pathdef.c
583 @echo char_u
*compiled_sys
= (char_u
*)"$(USERDOMAIN)"; >> pathdef.c