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 ifndef MZSCHEME_PRECISE_GC
216 MZSCHEME_PRECISE_GC
=no
219 # for version 4.x we need to generate byte-code for Scheme base
220 ifndef MZSCHEME_GENERATE_BASE
221 MZSCHEME_GENERATE_BASE
=no
224 ifeq (yes
, $(DYNAMIC_MZSCHEME
))
225 DEFINES
+= -DDYNAMIC_MZSCHEME
-DDYNAMIC_MZSCH_DLL
=\"libmzsch
$(MZSCHEME_VER
).dll
\" -DDYNAMIC_MZGC_DLL
=\"libmzgc
$(MZSCHEME_VER
).dll
\"
228 MZSCHEME_DLLS
= $(MZSCHEME
)
230 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
231 MZSCHEME_LIB
=-lmzsch
$(MZSCHEME_VER
)
233 MZSCHEME_LIB
= -lmzsch
$(MZSCHEME_VER
) -lmzgc
$(MZSCHEME_VER
)
235 EXTRA_LIBS
+= -L
$(MZSCHEME_DLLS
) -L
$(MZSCHEME_DLLS
)/lib
$(MZSCHEME_LIB
)
237 ifeq (yes
,$(MZSCHEME_GENERATE_BASE
))
238 DEFINES
+= -DINCLUDE_MZSCHEME_BASE
239 MZ_EXTRA_DEP
+= mzscheme_base.c
241 ifeq (yes
,$(MZSCHEME_PRECISE_GC
))
242 DEFINES
+= -DMZ_PRECISE_GC
246 ##############################
247 # DYNAMIC_TCL=yes and no both work.
248 ##############################
250 DEFINES
+= -DFEAT_TCL
251 INCLUDES
+= -I
$(TCL
)/include
252 EXTRA_OBJS
+= $(OUTDIR
)/if_tcl.o
262 ifeq (yes
, $(DYNAMIC_TCL
))
263 DEFINES
+= -DDYNAMIC_TCL
-DDYNAMIC_TCL_DLL
=\"tcl
$(TCL_VER
).dll
\"
264 EXTRA_LIBS
+= $(TCL
)/lib
/tclstub
$(TCL_VER
).lib
266 EXTRA_LIBS
+= $(TCL
)/lib
/tcl
$(TCL_VER
).lib
270 ##############################
271 ifeq (yes
, $(GETTEXT
))
272 DEFINES
+= -DDYNAMIC_GETTEXT
275 ##############################
277 DEFINES
+= -DDYNAMIC_ICONV
280 ##############################
282 DEFINES
+= -DFEAT_MBYTE
285 ##############################
287 DEFINES
+= -DFEAT_MBYTE_IME
293 ifeq (yes
, $(DYNAMIC_IME
))
294 DEFINES
+= -DDYNAMIC_IME
296 EXTRA_LIBS
+= -limm32
300 ##############################
303 INCLUDES
+= -g
-fstack-check
307 ifeq ($(OPTIMIZE
), SIZE
)
310 ifeq ($(OPTIMIZE
), MAXSPEED
)
311 OPTFLAG
= -O3
-fomit-frame-pointer
-freg-struct-return
317 # A bug in the GCC <= 3.2 optimizer can cause a crash. The
318 # following option removes the problem optimization.
319 OPTFLAG
+= -fno-strength-reduce
325 ##############################
326 # USEDLL=yes will build a Cygwin32 executable that relies on cygwin1.dll.
327 # USEDLL=no will build a Mingw32 executable with no extra dll dependencies.
328 ##############################
329 ifeq (yes
, $(USEDLL
))
330 DEFINES
+= -D_MAX_PATH
=256 -D__CYGWIN__
332 INCLUDES
+= -mno-cygwin
335 ##############################
336 ifeq (yes
, $(POSTSCRIPT
))
340 ##############################
341 ifeq (yes
, $(CSCOPE
))
342 DEFINES
+= -DFEAT_CSCOPE
343 EXTRA_OBJS
+= $(OUTDIR
)/if_cscope.o
346 ##############################
349 ##############################
350 ifeq (yes
, $(NETBEANS
))
351 # Only allow NETBEANS for a GUI build.
352 DEFINES
+= -DFEAT_NETBEANS_INTG
353 EXTRA_OBJS
+= $(OUTDIR
)/netbeans.o
354 EXTRA_LIBS
+= -lwsock32
356 ifeq (yes
, $(NBDEBUG
))
358 NBDEBUG_DEP
= nbdebug.h nbdebug.c
363 ##############################
365 # Only allow XPM for a GUI build.
366 DEFINES
+= -DFEAT_XPM_W32
367 INCLUDES
+= -I
$(XPM
)/include
368 EXTRA_OBJS
+= $(OUTDIR
)/xpm_w32.o
369 EXTRA_LIBS
+= -L
$(XPM
)/lib
-lXpm
372 ##############################
373 EXE
= gvim
$(DEBUG_SUFFIX
).exe
374 OUTDIR
= gobj
$(DEBUG_SUFFIX
)
375 DEFINES
+= -DFEAT_GUI_W32
-DFEAT_CLIPBOARD
376 EXTRA_OBJS
+= $(OUTDIR
)/gui.o
$(OUTDIR
)/gui_w32.o
$(OUTDIR
)/gui_beval.o
$(OUTDIR
)/os_w32exe.o
377 EXTRA_LIBS
+= -mwindows
-lcomctl32
-lversion
379 EXE
= vim
$(DEBUG_SUFFIX
).exe
380 OUTDIR
= obj
$(DEBUG_SUFFIX
)
381 LIBS
+= -luser32
-lgdi32
-lcomdlg32
384 ##############################
386 DEFINES
+= -DFEAT_OLE
387 EXTRA_OBJS
+= $(OUTDIR
)/if_ole.o
388 EXTRA_LIBS
+= -loleaut32
-lstdc
++
391 ##############################
392 ifneq (sh.exe
, $(SHELL
))
402 #>>>>> end of choices
403 ###########################################################################
405 INCL
= vim.h globals.h option.h keymap.h macros.h ascii.h term.h os_win32.h \
408 CFLAGS
= $(OPTFLAG
) $(DEFINES
) $(INCLUDES
)
410 RCFLAGS
= -O coff
$(DEFINES
)
414 $(OUTDIR
)/charset.o \
416 $(OUTDIR
)/digraph.o \
419 $(OUTDIR
)/ex_cmds.o \
420 $(OUTDIR
)/ex_cmds2.o \
421 $(OUTDIR
)/ex_docmd.o \
422 $(OUTDIR
)/ex_eval.o \
423 $(OUTDIR
)/ex_getln.o \
426 $(OUTDIR
)/getchar.o \
427 $(OUTDIR
)/hardcopy.o \
428 $(OUTDIR
)/hashtab.o \
431 $(OUTDIR
)/memfile.o \
432 $(OUTDIR
)/memline.o \
434 $(OUTDIR
)/message.o \
442 $(OUTDIR
)/os_win32.o \
443 $(OUTDIR
)/os_mswin.o \
444 $(OUTDIR
)/pathdef.o \
445 $(OUTDIR
)/popupmnu.o \
446 $(OUTDIR
)/quickfix.o \
456 $(OUTDIR
)/version.o \
461 all: $(EXE
) xxd
/xxd.exe vimrun.exe
install.exe uninstal.exe GvimExt
/gvimext.dll
463 # According to the Cygwin doc 1.2 FAQ, kernel32 should not be specified for
464 # linking unless calling ld directly.
465 # See /usr/doc/cygwin-doc-1.2/html/faq_toc.html#TOC93 for more information.
466 $(EXE
): $(OUTDIR
) $(OBJ
)
467 $(CC
) $(CFLAGS
) -o
$(EXE
) $(OBJ
) $(LIBS
) -luuid
-lole32
$(EXTRA_LIBS
)
469 xxd
/xxd.exe
: xxd
/xxd.c
470 $(MAKE
) -C xxd
-f Make_cyg.mak USEDLL
=$(USEDLL
)
472 GvimExt
/gvimext.dll
: GvimExt
/gvimext.
cpp GvimExt
/gvimext.rc GvimExt
/gvimext.h
473 $(MAKE
) -C GvimExt
-f Make_ming.mak
476 $(CC
) $(CFLAGS
) -o vimrun.exe vimrun.c
$(LIBS
)
478 install.exe
: dosinst.c
479 $(CC
) $(CFLAGS
) -o
install.exe dosinst.c
$(LIBS
) -luuid
-lole32
481 uninstal.exe
: uninstal.c
482 $(CC
) $(CFLAGS
) -o uninstal.exe uninstal.c
$(LIBS
)
488 command
/c ctags
*.c
$(INCL
)
491 -$(DEL
) $(OUTDIR
)$(DIRSLASH
)*.o
493 -$(DEL
) $(EXE
) vimrun.exe
install.exe uninstal.exe
498 -$(DEL
) mzscheme_base.c
501 $(MAKE
) -C xxd
-f Make_cyg.mak
clean
502 $(MAKE
) -C GvimExt
-f Make_ming.mak
clean
505 -$(DEL
) obj
$(DIRSLASH
)*.o
507 -$(DEL
) gobj
$(DIRSLASH
)*.o
509 -$(DEL
) objd
$(DIRSLASH
)*.o
511 -$(DEL
) gobjd
$(DIRSLASH
)*.o
515 ###########################################################################
517 $(OUTDIR
)/%.o
: %.c
$(INCL
)
518 $(CC
) -c
$(CFLAGS
) $< -o
$@
520 $(OUTDIR
)/ex_docmd.o
: ex_docmd.c
$(INCL
) ex_cmds.h
521 $(CC
) -c
$(CFLAGS
) ex_docmd.c
-o
$(OUTDIR
)/ex_docmd.o
523 $(OUTDIR
)/ex_eval.o
: ex_eval.c
$(INCL
) ex_cmds.h
524 $(CC
) -c
$(CFLAGS
) ex_eval.c
-o
$(OUTDIR
)/ex_eval.o
526 $(OUTDIR
)/if_cscope.o
: if_cscope.c
$(INCL
) if_cscope.h
527 $(CC
) -c
$(CFLAGS
) if_cscope.c
-o
$(OUTDIR
)/if_cscope.o
529 $(OUTDIR
)/if_ole.o
: if_ole.
cpp $(INCL
)
530 $(CC
) -c
$(CFLAGS
) if_ole.
cpp -o
$(OUTDIR
)/if_ole.o
532 if_perl.c
: if_perl.xs typemap
533 $(PERL
)/bin
/perl
`cygpath -d $(PERL)/lib/ExtUtils/xsubpp` \
534 -prototypes
-typemap \
535 `cygpath -d $(PERL)/lib/ExtUtils/typemap` if_perl.xs
> $@
537 $(OUTDIR
)/if_perl.o
: if_perl.c
$(INCL
)
538 ifeq (yes
, $(USEDLL
))
539 $(CC
) -c
$(CFLAGS
) -I
/usr
/include/mingw
-D__MINGW32__ if_perl.c
-o
$(OUTDIR
)/if_perl.o
542 $(OUTDIR
)/if_ruby.o
: if_ruby.c
$(INCL
)
543 ifeq (16, $(RUBY_VER
))
544 $(CC
) -c
$(CFLAGS
) -U_WIN32 if_ruby.c
-o
$(OUTDIR
)/if_ruby.o
547 $(OUTDIR
)/netbeans.o
: netbeans.c
$(INCL
) $(NBDEBUG_DEP
)
548 $(CC
) -c
$(CFLAGS
) netbeans.c
-o
$(OUTDIR
)/netbeans.o
550 $(OUTDIR
)/if_mzsch.o
: if_mzsch.c
$(INCL
) if_mzsch.h
$(MZ_EXTRA_DEP
)
551 $(CC
) -c
$(CFLAGS
) if_mzsch.c
-o
$(OUTDIR
)/if_mzsch.o
553 $(OUTDIR
)/vimrc.o
: vim.rc version.h gui_w32_rc.h
554 $(RC
) $(RCFLAGS
) vim.rc
-o
$(OUTDIR
)/vimrc.o
557 $(MZSCHEME
)/mzc
--c-mods mzscheme_base.c
++lib scheme
/base
560 ifneq (sh.exe
, $(SHELL
))
561 @echo creating pathdef.c
562 @echo
'/* pathdef.c */' > pathdef.c
563 @echo
'#include "vim.h"' >> pathdef.c
564 @echo
'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
565 @echo
'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
566 @echo
'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
567 @echo
'char_u *all_lflags = (char_u *)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)";' >> pathdef.c
568 @echo
'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
569 @echo
'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
571 @echo creating pathdef.c
572 @echo
/* pathdef.c
*/ > pathdef.c
573 @echo
#include "vim.h" >> pathdef.c
574 @echo char_u
*default_vim_dir
= (char_u
*)"$(VIMRCLOC)"; >> pathdef.c
575 @echo char_u
*default_vimruntime_dir
= (char_u
*)"$(VIMRUNTIMEDIR)"; >> pathdef.c
576 @echo char_u
*all_cflags = (char_u
*)"$(CC) $(CFLAGS)"; >> pathdef.c
577 @echo char_u
*all_lflags
= (char_u
*)"$(CC) -s -o $(EXE) $(LIBS) -luuid -lole32 $(EXTRA_LIBS)"; >> pathdef.c
578 @echo char_u
*compiled_user
= (char_u
*)"$(USERNAME)"; >> pathdef.c
579 @echo char_u
*compiled_sys
= (char_u
*)"$(USERDOMAIN)"; >> pathdef.c