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 # LUA define to path to Lua dir to get Lua support (not defined)
28 # LUA_VER define to version of Lua being used (51)
29 # DYNAMIC_LUA no or yes: use yes to load the Lua DLL dynamically (yes)
30 # GETTEXT no or yes: set to yes for dynamic gettext support (yes)
31 # ICONV no or yes: set to yes for dynamic iconv support (yes)
32 # MBYTE no or yes: set to yes to include multibyte support (yes)
33 # IME no or yes: set to yes to include IME support (yes)
34 # DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes)
35 # OLE no or yes: set to yes to make OLE gvim (no)
36 # DEBUG no or yes: set to yes if you wish a DEBUGging build (no)
37 # CPUNR No longer supported, use ARCH.
38 # ARCH i386 through pentium4: select -march argument to compile with (i386)
39 # USEDLL no or yes: set to yes to use the Runtime library DLL (no)
40 # For USEDLL=yes the cygwin1.dll is required to run Vim.
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
108 ##############################
109 # DYNAMIC_PERL=yes and no both work
110 ##############################
112 DEFINES
+= -DFEAT_PERL
113 INCLUDES
+= -I
$(PERL
)/lib
/CORE
114 EXTRA_OBJS
+= $(OUTDIR
)/if_perl.o
124 ifeq (yes
, $(DYNAMIC_PERL
))
125 DEFINES
+= -DDYNAMIC_PERL
-DDYNAMIC_PERL_DLL
=\"perl
$(PERL_VER
).dll
\"
127 EXTRA_LIBS
+= $(PERL
)/lib
/CORE
/perl
$(PERL_VER
).lib
131 ##############################
132 # DYNAMIC_PYTHON=yes works.
133 # DYNAMIC_PYTHON=no does not (unresolved externals on link).
134 ##############################
136 DEFINES
+= -DFEAT_PYTHON
137 INCLUDES
+= -I
$(PYTHON
)/include
138 EXTRA_OBJS
+= $(OUTDIR
)/if_python.o
140 ifndef DYNAMIC_PYTHON
148 ifeq (yes
, $(DYNAMIC_PYTHON
))
149 DEFINES
+= -DDYNAMIC_PYTHON
-DDYNAMIC_PYTHON_DLL
=\"python
$(PYTHON_VER
).dll
\"
151 EXTRA_LIBS
+= $(PYTHON
)/libs
/python
$(PYTHON_VER
).lib
155 ##############################
156 # DYNAMIC_RUBY=yes works.
157 # DYNAMIC_RUBY=no does not (process exits).
158 ##############################
173 ifeq ($(RUBY_VER
), 16)
175 RUBY_PLATFORM
= i586-mswin32
177 ifndef RUBY_INSTALL_NAME
178 RUBY_INSTALL_NAME
= mswin32-ruby
$(RUBY_VER
)
182 RUBY_PLATFORM
= i386-mswin32
184 ifndef RUBY_INSTALL_NAME
185 RUBY_INSTALL_NAME
= msvcrt-ruby
$(RUBY_VER
)
189 DEFINES
+= -DFEAT_RUBY
190 INCLUDES
+= -I
$(RUBY
)/lib
/ruby
/$(RUBY_VER_LONG
)/$(RUBY_PLATFORM
)
191 EXTRA_OBJS
+= $(OUTDIR
)/if_ruby.o
193 ifeq (yes
, $(DYNAMIC_RUBY
))
194 DEFINES
+= -DDYNAMIC_RUBY
-DDYNAMIC_RUBY_DLL
=\"$(RUBY_INSTALL_NAME
).dll
\"
195 DEFINES
+= -DDYNAMIC_RUBY_VER
=$(RUBY_VER
)
197 EXTRA_LIBS
+= $(RUBY
)/lib
/$(RUBY_INSTALL_NAME
).lib
201 ##############################
202 # DYNAMIC_MZSCHEME=yes works
203 # DYNAMIC_MZSCHEME=no works too
204 ##############################
206 DEFINES
+= -DFEAT_MZSCHEME
207 INCLUDES
+= -I
$(MZSCHEME
)/include
208 EXTRA_OBJS
+= $(OUTDIR
)/if_mzsch.o
210 ifndef DYNAMIC_MZSCHEME
211 DYNAMIC_MZSCHEME
= yes
215 MZSCHEME_VER
= 209_000
218 ifndef MZSCHEME_PRECISE_GC
219 MZSCHEME_PRECISE_GC
=no
222 # for version 4.x we need to generate byte-code for Scheme base
223 ifndef MZSCHEME_GENERATE_BASE
224 MZSCHEME_GENERATE_BASE
=no
227 ifeq (yes
, $(DYNAMIC_MZSCHEME
))
228 DEFINES
+= -DDYNAMIC_MZSCHEME
-DDYNAMIC_MZSCH_DLL
=\"libmzsch
$(MZSCHEME_VER
).dll
\" -DDYNAMIC_MZGC_DLL
=\"libmzgc
$(MZSCHEME_VER
).dll
\"
231 MZSCHEME_DLLS
= $(MZSCHEME
)
233 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
234 MZSCHEME_LIB
=-lmzsch
$(MZSCHEME_VER
)
236 MZSCHEME_LIB
= -lmzsch
$(MZSCHEME_VER
) -lmzgc
$(MZSCHEME_VER
)
238 EXTRA_LIBS
+= -L
$(MZSCHEME_DLLS
) -L
$(MZSCHEME_DLLS
)/lib
$(MZSCHEME_LIB
)
240 ifeq (yes
,$(MZSCHEME_GENERATE_BASE
))
241 DEFINES
+= -DINCLUDE_MZSCHEME_BASE
242 MZ_EXTRA_DEP
+= mzscheme_base.c
244 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
245 DEFINES
+= -DMZ_PRECISE_GC
249 ##############################
250 # DYNAMIC_TCL=yes and no both work.
251 ##############################
253 DEFINES
+= -DFEAT_TCL
254 INCLUDES
+= -I
$(TCL
)/include
255 EXTRA_OBJS
+= $(OUTDIR
)/if_tcl.o
265 ifeq (yes
, $(DYNAMIC_TCL
))
266 DEFINES
+= -DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL
=\"tcl
$(TCL_VER
).dll
\"
267 EXTRA_LIBS
+= $(TCL
)/lib
/tclstub
$(TCL_VER
).lib
269 EXTRA_LIBS
+= $(TCL
)/lib
/tcl
$(TCL_VER
).lib
273 ##############################
274 # DYNAMIC_LUA=yes works.
275 # DYNAMIC_LUA=no does not (unresolved externals on link).
276 ##############################
278 DEFINES
+= -DFEAT_LUA
279 INCLUDES
+= -I
$(LUA
)/include
280 EXTRA_OBJS
+= $(OUTDIR
)/if_lua.o
290 ifeq (yes
, $(DYNAMIC_LUA
))
291 DEFINES
+= -DDYNAMIC_LUA
-DDYNAMIC_LUA_DLL
=\"lua
$(LUA_VER
).dll
\"
293 EXTRA_LIBS
+= $(LUA
)/lib
/lua
$(LUA_VER
).lib
297 ##############################
298 ifeq (yes
, $(GETTEXT
))
299 DEFINES
+= -DDYNAMIC_GETTEXT
302 ##############################
304 DEFINES
+= -DDYNAMIC_ICONV
307 ##############################
309 DEFINES
+= -DFEAT_MBYTE
312 ##############################
314 DEFINES
+= -DFEAT_MBYTE_IME
320 ifeq (yes
, $(DYNAMIC_IME
))
321 DEFINES
+= -DDYNAMIC_IME
323 EXTRA_LIBS
+= -limm32
327 ##############################
330 INCLUDES
+= -g
-fstack-check
334 ifeq ($(OPTIMIZE
), SIZE
)
337 ifeq ($(OPTIMIZE
), MAXSPEED
)
338 OPTFLAG
= -O3
-fomit-frame-pointer
-freg-struct-return
344 # A bug in the GCC <= 3.2 optimizer can cause a crash. The
345 # following option removes the problem optimization.
346 OPTFLAG
+= -fno-strength-reduce
352 ##############################
353 # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
354 # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
355 ##############################
356 ifeq (yes
, $(USEDLL
))
357 DEFINES
+= -D_MAX_PATH
=256 -D__CYGWIN__
359 INCLUDES
+= -mno-cygwin
362 ##############################
363 ifeq (yes
, $(POSTSCRIPT
))
367 ##############################
368 ifeq (yes
, $(CSCOPE
))
369 DEFINES
+= -DFEAT_CSCOPE
370 EXTRA_OBJS
+= $(OUTDIR
)/if_cscope.o
373 ##############################
376 ##############################
377 ifeq (yes
, $(NETBEANS
))
378 # Only allow NETBEANS for a GUI build.
379 DEFINES
+= -DFEAT_NETBEANS_INTG
380 EXTRA_OBJS
+= $(OUTDIR
)/netbeans.o
381 EXTRA_LIBS
+= -lwsock32
383 ifeq (yes
, $(NBDEBUG
))
385 NBDEBUG_DEP
= nbdebug.h nbdebug.c
390 ##############################
392 # Only allow XPM for a GUI build.
393 DEFINES
+= -DFEAT_XPM_W32
394 INCLUDES
+= -I
$(XPM
)/include
395 EXTRA_OBJS
+= $(OUTDIR
)/xpm_w32.o
396 EXTRA_LIBS
+= -L
$(XPM
)/lib
-lXpm
399 ##############################
400 EXE
= gvim
$(DEBUG_SUFFIX
).exe
401 OUTDIR
= gobj
$(DEBUG_SUFFIX
)
402 DEFINES
+= -DFEAT_GUI_W32
-DFEAT_CLIPBOARD
403 EXTRA_OBJS
+= $(OUTDIR
)/gui.o
$(OUTDIR
)/gui_w32.o
$(OUTDIR
)/gui_beval.o
$(OUTDIR
)/os_w32exe.o
404 EXTRA_LIBS
+= -mwindows
-lcomctl32
-lversion
406 EXE
= vim
$(DEBUG_SUFFIX
).exe
407 OUTDIR
= obj
$(DEBUG_SUFFIX
)
408 LIBS
+= -luser32
-lgdi32
-lcomdlg32
411 ##############################
413 DEFINES
+= -DFEAT_OLE
414 EXTRA_OBJS
+= $(OUTDIR
)/if_ole.o
415 EXTRA_LIBS
+= -loleaut32
-lstdc
++
418 ##############################
419 ifneq (sh.exe
, $(SHELL
))
429 #>>>>> end of choices
430 ###########################################################################
432 INCL
= vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
435 CFLAGS
= $(OPTFLAG
) $(DEFINES
) $(INCLUDES
)
437 RCFLAGS
= -O coff
$(DEFINES
)
441 $(OUTDIR
)/charset.o \
443 $(OUTDIR
)/digraph.o \
446 $(OUTDIR
)/ex_cmds.o \
447 $(OUTDIR
)/ex_cmds2.o \
448 $(OUTDIR
)/ex_docmd.o \
449 $(OUTDIR
)/ex_eval.o \
450 $(OUTDIR
)/ex_getln.o \
453 $(OUTDIR
)/getchar.o \
454 $(OUTDIR
)/hardcopy.o \
455 $(OUTDIR
)/hashtab.o \
458 $(OUTDIR
)/memfile.o \
459 $(OUTDIR
)/memline.o \
461 $(OUTDIR
)/message.o \
469 $(OUTDIR
)/os_win32.o \
470 $(OUTDIR
)/os_mswin.o \
471 $(OUTDIR
)/pathdef.o \
472 $(OUTDIR
)/popupmnu.o \
473 $(OUTDIR
)/quickfix.o \
483 $(OUTDIR
)/version.o \
488 all: $(EXE
) xxd
/xxd.exe vimrun.exe
install.exe uninstal.exe GvimExt
/gvimext.dll
490 # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
491 # linking unless calling ld directly.
492 # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
493 $(EXE
): $(OUTDIR
) $(OBJ
)
494 $(CC
) $(CFLAGS
) -o
$(EXE
) $(OBJ
) $(LIBS
) -luuid
-lole32
$(EXTRA_LIBS
)
496 xxd
/xxd.exe
: xxd
/xxd.c
497 $(MAKE
) -C xxd
-f Make_cyg.mak USEDLL
=$(USEDLL
)
499 GvimExt
/gvimext.dll
: GvimExt
/gvimext.
cpp GvimExt
/gvimext.rc GvimExt
/gvimext.h
500 $(MAKE
) -C GvimExt
-f Make_ming.mak
503 $(CC
) $(CFLAGS
) -o vimrun.exe vimrun.c
$(LIBS
)
505 install.exe
: dosinst.c
506 $(CC
) $(CFLAGS
) -o
install.exe dosinst.c
$(LIBS
) -luuid
-lole32
508 uninstal.exe
: uninstal.c
509 $(CC
) $(CFLAGS
) -o uninstal.exe uninstal.c
$(LIBS
)
515 command
/c ctags
*.c
$(INCL
)
518 -$(DEL
) $(OUTDIR
)$(DIRSLASH
)*.o
520 -$(DEL
) $(EXE
) vimrun.exe
install.exe uninstal.exe
525 -$(DEL
) mzscheme_base.c
528 $(MAKE
) -C xxd
-f Make_cyg.mak
clean
529 $(MAKE
) -C GvimExt
-f Make_ming.mak
clean
532 -$(DEL
) obj
$(DIRSLASH
)*.o
534 -$(DEL
) gobj
$(DIRSLASH
)*.o
536 -$(DEL
) objd
$(DIRSLASH
)*.o
538 -$(DEL
) gobjd
$(DIRSLASH
)*.o
542 ###########################################################################
544 $(OUTDIR
)/%.o
: %.c
$(INCL
)
545 $(CC
) -c
$(CFLAGS
) $< -o
$@
547 $(OUTDIR
)/ex_docmd.o
: ex_docmd.c
$(INCL
) ex_cmds.h
548 $(CC
) -c
$(CFLAGS
) ex_docmd.c
-o
$(OUTDIR
)/ex_docmd.o
550 $(OUTDIR
)/ex_eval.o
: ex_eval.c
$(INCL
) ex_cmds.h
551 $(CC
) -c
$(CFLAGS
) ex_eval.c
-o
$(OUTDIR
)/ex_eval.o
553 $(OUTDIR
)/if_cscope.o
: if_cscope.c
$(INCL
) if_cscope.h
554 $(CC
) -c
$(CFLAGS
) if_cscope.c
-o
$(OUTDIR
)/if_cscope.o
556 $(OUTDIR
)/if_ole.o
: if_ole.
cpp $(INCL
)
557 $(CC
) -c
$(CFLAGS
) if_ole.
cpp -o
$(OUTDIR
)/if_ole.o
559 if_perl.c
: if_perl.xs typemap
560 $(PERL
)/bin
/perl
`cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
561 -prototypes
-typemap \
562 `cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs
> $@
564 $(OUTDIR
)/if_perl.o
: if_perl.c
$(INCL
)
565 ifeq (yes
, $(USEDLL
))
566 $(CC
) -c
$(CFLAGS
) -I
/usr
/include/mingw
-D__MINGW32__ if_perl.c
-o
$(OUTDIR
)/if_perl.o
569 $(OUTDIR
)/if_ruby.o
: if_ruby.c
$(INCL
)
570 ifeq (16, $(RUBY_VER
))
571 $(CC
) -c
$(CFLAGS
) -U_WIN32 if_ruby.c
-o
$(OUTDIR
)/if_ruby.o
574 $(OUTDIR
)/netbeans.o
: netbeans.c
$(INCL
) $(NBDEBUG_DEP
)
575 $(CC
) -c
$(CFLAGS
) netbeans.c
-o
$(OUTDIR
)/netbeans.o
577 $(OUTDIR
)/if_mzsch.o
: if_mzsch.c
$(INCL
) if_mzsch.h
$(MZ_EXTRA_DEP
)
578 $(CC
) -c
$(CFLAGS
) if_mzsch.c
-o
$(OUTDIR
)/if_mzsch.o
580 $(OUTDIR
)/vimrc.o
: vim.rc version.h gui_w32_rc.h
581 $(RC
) $(RCFLAGS
) vim.rc
-o
$(OUTDIR
)/vimrc.o
584 $(MZSCHEME
)/mzc
--c-mods mzscheme_base.c
++lib scheme
/base
587 ifneq (sh.exe
, $(SHELL
))
588 @echo creating pathdef.c
589 @echo
'/* pathdef.c */' > pathdef.c
590 @echo
'#include "vim.h"' >> pathdef.c
591 @echo
'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
592 @echo
'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
593 @echo
'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
594 @echo
'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
595 @echo
'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
596 @echo
'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
598 @echo creating pathdef.c
599 @echo
/* pathdef.c
*/ > pathdef.c
600 @echo
#include "vim.h" >> pathdef.c
601 @echo char_u
*default_vim_dir
= (char_u
*)"$(VIMRCLOC)"; >> pathdef.c
602 @echo char_u
*default_vimruntime_dir
= (char_u
*)"$(VIMRUNTIMEDIR)"; >> pathdef.c
603 @echo char_u
*all_cflags = (char_u
*)"$(CC) $(CFLAGS)"; >> pathdef.c
604 @echo char_u
*all_lflags
= (char_u
*)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
605 @echo char_u
*compiled_user
= (char_u
*)"$(USERNAME)"; >> pathdef.c
606 @echo char_u
*compiled_sys
= (char_u
*)"$(USERDOMAIN)"; >> pathdef.c