blob: ca50d371dd1b88ac9b99e1cdb1f04d2a8c0a4436 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
2# Info at http://www.mingw.org
3# Also requires 'GNU make 3.77', which you can get through a link
4# to 'JanJaap's page from the above page.
5# Get missing libraries from http://gnuwin32.sf.net.
6#
7# Tested on Win32 NT 4 and Win95.
8#
9# To make everything, just 'make -f Make_ming.mak'
10# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
11# After a run, you can 'make -f Make_ming.mak clean' to clean up
12#
13# NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
14# it's just run out of memory or something. Run again, and it will continue
15# with 'xxd'.
16#
Bram Moolenaar91856272012-02-29 16:56:39 +010017# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
18# using the excellent UPX compressor:
Bram Moolenaar071d4272004-06-13 20:20:40 +000019# http://upx.sourceforge.net/
Bram Moolenaar91856272012-02-29 16:56:39 +010020# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
21# http://www.matcode.com/mpress.htm
Bram Moolenaar071d4272004-06-13 20:20:40 +000022#
23# Maintained by Ron Aaron <ronaharon@yahoo.com>
24# updated 2003 Jan 20
25
26#>>>>> choose options:
27# set to yes for a debug build
28DEBUG=no
Bram Moolenaar7263a772007-05-10 17:35:54 +000029# set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
Bram Moolenaar071d4272004-06-13 20:20:40 +000030OPTIMIZE=MAXSPEED
31# set to yes to make gvim, no for vim
32GUI=yes
33# FEATURES=[TINY | SMALL | NORMAL | BIG | HUGE]
34# set to TINY to make minimal version (few features)
35FEATURES=BIG
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000036# set to one of i386, i486, i586, i686 as the minimum target processor
Bram Moolenaar071d4272004-06-13 20:20:40 +000037ARCH=i386
38# set to yes to cross-compile from unix; no=native Windows
39CROSS=no
40# set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
41#ICONV="."
42ICONV=yes
43GETTEXT=yes
44# set to yes to include multibyte support
45MBYTE=yes
46# set to yes to include IME support
47IME=yes
48DYNAMIC_IME=yes
49# set to yes to enable writing a postscript file with :hardcopy
50POSTSCRIPT=no
51# set to yes to enable OLE support
52OLE=no
53# Set the default $(WINVER) to make it work with pre-Win2k
54WINVER = 0x0400
55# Set to yes to enable Cscope support
56CSCOPE=yes
57# Set to yes to enable Netbeans support
58NETBEANS=$(GUI)
59
60
Bram Moolenaarb0d3f872010-12-30 14:50:52 +010061# Link against the shared version of libstdc++ by default. Set
62# STATIC_STDCPLUS to "yes" to link against static version instead.
63ifndef STATIC_STDCPLUS
64STATIC_STDCPLUS=no
65endif
66
Bram Moolenaar071d4272004-06-13 20:20:40 +000067# If the user doesn't want gettext, undefine it.
68ifeq (no, $(GETTEXT))
69GETTEXT=
70endif
71# Added by E.F. Amatria <eferna1@platea.ptic.mec.es> 2001 Feb 23
72# Uncomment the first line and one of the following three if you want Native Language
73# Support. You'll need gnu_gettext.win32, a MINGW32 Windows PORT of gettext by
74# Franco Bez <franco.bez@gmx.de>. It may be found at
75# http://home.a-city.de/franco.bez/gettext/gettext_win32_en.html
76# Tested with mingw32 with GCC-2.95.2 on Win98
77# Updated 2001 Jun 9
78#GETTEXT=c:/gettext.win32.msvcrt
79#STATIC_GETTEXT=USE_STATIC_GETTEXT
80#DYNAMIC_GETTEXT=USE_GETTEXT_DLL
81#DYNAMIC_GETTEXT=USE_SAFE_GETTEXT_DLL
82SAFE_GETTEXT_DLL_OBJ = $(GETTEXT)/src/safe_gettext_dll/safe_gettext_dll.o
83# Alternatively, if you uncomment the two following lines, you get a "safe" version
84# without linking the safe_gettext_dll.o object file.
85#DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
86#GETTEXT_DYNAMIC=gnu_gettext.dll
87INTLPATH=$(GETTEXT)/lib/mingw32
88INTLLIB=gnu_gettext
89
90# If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
91# or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
Bram Moolenaarc16756d2011-06-19 01:30:07 +020092# uncomment the following, but I can't build a static version with them, ?-(|
Bram Moolenaar071d4272004-06-13 20:20:40 +000093#GETTEXT=c:/gettext-0.10.37-20010430
94#STATIC_GETTEXT=USE_STATIC_GETTEXT
95#DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
96#INTLPATH=$(GETTEXT)/lib
97#INTLLIB=intl
98
99# uncomment 'PERL' if you want a perl-enabled version
100#PERL=C:/perl
101ifdef PERL
102ifndef PERL_VER
103PERL_VER=56
104endif
105ifndef DYNAMIC_PERL
106DYNAMIC_PERL=yes
107endif
108# on Linux, for cross-compile, it's here:
109#PERLLIB=/home/ron/ActivePerl/lib
110# on NT, it's here:
111PERLLIB=$(PERL)/lib
112PERLLIBS=$(PERLLIB)/Core
Bram Moolenaar08c51aa2011-10-12 14:11:45 +0200113XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
114XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
Bram Moolenaar612af432011-09-14 10:49:46 +0200115ifeq "$(XSUBPP_EXISTS)" ""
Bram Moolenaar08c51aa2011-10-12 14:11:45 +0200116XSUBPP=perl $(XSUBPPTRY)
Bram Moolenaar612af432011-09-14 10:49:46 +0200117else
118XSUBPP=xsubpp
119endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120endif
121
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200122# uncomment 'LUA' if you want a Lua-enabled version
123#LUA=/usr/local
124ifdef LUA
125ifndef DYNAMIC_LUA
126DYNAMIC_LUA=yes
127endif
128
129ifndef LUA_VER
130LUA_VER=51
131endif
132
133ifeq (no,$(DYNAMIC_LUA))
134LUA_LIB = -L$(LUA)/lib -llua
135endif
136
137endif
138
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000139# uncomment 'MZSCHEME' if you want a MzScheme-enabled version
140#MZSCHEME=d:/plt
141ifdef MZSCHEME
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000142ifndef DYNAMIC_MZSCHEME
143DYNAMIC_MZSCHEME=yes
144endif
145
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000146ifndef MZSCHEME_VER
147MZSCHEME_VER=205_000
148endif
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000149
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000150ifndef MZSCHEME_PRECISE_GC
151MZSCHEME_PRECISE_GC=no
152endif
153
154# for version 4.x we need to generate byte-code for Scheme base
155ifndef MZSCHEME_GENERATE_BASE
156MZSCHEME_GENERATE_BASE=no
157endif
158
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100159ifndef MZSCHEME_USE_RACKET
160MZSCHEME_MAIN_LIB=mzsch
161else
162MZSCHEME_MAIN_LIB=racket
163endif
164
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000165ifeq (no,$(DYNAMIC_MZSCHEME))
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000166ifeq (yes,$(MZSCHEME_PRECISE_GC))
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100167MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000168else
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100169MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000170endif
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000171# the modern MinGW can dynamically link to dlls directly.
172# point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000173ifndef MZSCHEME_DLLS
174MZSCHEME_DLLS=$(MZSCHEME)
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000175endif
Bram Moolenaar2d6db762009-09-11 10:49:58 +0000176MZSCHEME_LIBDIR=-L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)\lib
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000177endif
178
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000179endif
180
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181# Python support -- works with the ActiveState python 2.0 release (and others
182# too, probably)
183#
184# uncomment 'PYTHON' to make python-enabled version
185# Put the path to the python distro here. If cross compiling from Linux, you
186# will also need to convert the header files to unix instead of dos format:
187# for fil in *.h ; do vim -e -c 'set ff=unix|w|q' $fil
188# and also, you will need to make a mingw32 'libpython20.a' to link with:
189# cd $PYTHON/libs
190# pexports python20.dll > python20.def
191# dlltool -d python20.def -l libpython20.a
192# on my Linux box, I put the Python stuff here:
193#PYTHON=/home/ron/ActivePython-2.0.0-202/src/Core
194# on my NT box, it's here:
195#PYTHON=c:/python20
196
197ifdef PYTHON
198ifndef DYNAMIC_PYTHON
199DYNAMIC_PYTHON=yes
200endif
201
202ifndef PYTHON_VER
203PYTHON_VER=22
204endif
205
206ifeq (no,$(DYNAMIC_PYTHON))
207PYTHONLIB=-L$(PYTHON)/libs -lpython$(PYTHON_VER)
208endif
209# my include files are in 'win32inc' on Linux, and 'include' in the standard
210# NT distro (ActiveState)
211ifeq ($(CROSS),no)
212PYTHONINC=-I $(PYTHON)/include
213else
214PYTHONINC=-I $(PYTHON)/win32inc
215endif
216endif
217
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200218#PYTHON3: See comment for Python 2 above
219
220ifdef PYTHON3
221ifndef DYNAMIC_PYTHON3
222DYNAMIC_PYTHON3=yes
223endif
224
225ifndef PYTHON3_VER
226PYTHON3_VER=31
227endif
228
229ifeq (no,$(DYNAMIC_PYTHON3))
230PYTHON3LIB=-L$(PYTHON3)/libs -lPYTHON$(PYTHON3_VER)
231endif
232
233ifeq ($(CROSS),no)
234PYTHON3INC=-I $(PYTHON3)/include
235else
236PYTHON3INC=-I $(PYTHON3)/win32inc
237endif
238endif
239
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240# TCL interface:
241# TCL=[Path to TCL directory]
242# DYNAMIC_TCL=yes (to load the TCL DLL dynamically)
243# TCL_VER=[TCL version, eg 83, 84] (default is 83)
244#TCL=c:/tcl
245ifdef TCL
246ifndef DYNAMIC_TCL
247DYNAMIC_TCL=yes
248endif
249ifndef TCL_VER
250TCL_VER = 83
251endif
252TCLINC += -I$(TCL)/include
253endif
254
255
256# Ruby interface:
257# RUBY=[Path to Ruby directory]
258# DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
259# RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
260# RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
261# You must set RUBY_VER_LONG when change RUBY_VER.
262#RUBY=c:/ruby
263ifdef RUBY
264ifndef DYNAMIC_RUBY
265DYNAMIC_RUBY=yes
266endif
267# Set default value
268ifndef RUBY_VER
269RUBY_VER = 16
270endif
271ifndef RUBY_VER_LONG
272RUBY_VER_LONG = 1.6
273endif
274
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100275ifndef RUBY_PLATFORM
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276ifeq ($(RUBY_VER), 16)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277RUBY_PLATFORM = i586-mswin32
Bram Moolenaar8c79caf2010-03-17 17:25:09 +0100278else
279ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100280RUBY_PLATFORM = i386-mingw32
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281else
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282RUBY_PLATFORM = i386-mswin32
283endif
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100284endif
Bram Moolenaar8c79caf2010-03-17 17:25:09 +0100285endif
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100286
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287ifndef RUBY_INSTALL_NAME
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100288ifeq ($(RUBY_VER), 16)
289RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
290else
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
292endif
293endif
294
Bram Moolenaar66ca3202010-03-10 13:20:40 +0100295RUBYINC =-I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296ifeq (no, $(DYNAMIC_RUBY))
297RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
298endif
299
300endif # RUBY
301
302# See feature.h for a list of options.
303# Any other defines can be included here.
304DEF_GUI=-DFEAT_GUI_W32 -DFEAT_CLIPBOARD
305DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
306 -DHAVE_PATHDEF -DFEAT_$(FEATURES)
307ifeq ($(CROSS),yes)
Bram Moolenaar48f80c22010-02-24 15:08:27 +0100308# cross-compiler prefix:
309CROSS_COMPILE = i586-pc-mingw32msvc-
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310DEL = rm
Bram Moolenaar0cf6f542005-01-16 21:59:36 +0000311MKDIR = mkdir -p
Bram Moolenaar48f80c22010-02-24 15:08:27 +0100312DIRSLASH = /
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313else
314# normal (Windows) compilation:
Bram Moolenaar48f80c22010-02-24 15:08:27 +0100315CROSS_COMPILE =
Bram Moolenaar86ce1cc2010-02-26 22:05:22 +0100316ifneq (sh.exe, $(SHELL))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317DEL = rm
Bram Moolenaar0cf6f542005-01-16 21:59:36 +0000318MKDIR = mkdir -p
Bram Moolenaar071d4272004-06-13 20:20:40 +0000319DIRSLASH = /
320else
321DEL = del
Bram Moolenaar0cf6f542005-01-16 21:59:36 +0000322MKDIR = mkdir
Bram Moolenaar071d4272004-06-13 20:20:40 +0000323DIRSLASH = \\
324endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000325endif
Bram Moolenaar48f80c22010-02-24 15:08:27 +0100326CC := $(CROSS_COMPILE)gcc
Bram Moolenaarb0d3f872010-12-30 14:50:52 +0100327WINDRES := $(CROSS_COMPILE)windres
328WINDRES_CC = $(CC)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329
330#>>>>> end of choices
331###########################################################################
332
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000333CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
Bram Moolenaarb0d3f872010-12-30 14:50:52 +0100334WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335
336ifdef GETTEXT
Bram Moolenaar8cd06ca2005-02-28 22:44:58 +0000337DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
Bram Moolenaar071d4272004-06-13 20:20:40 +0000338GETTEXTINCLUDE = $(GETTEXT)/include
339GETTEXTLIB = $(INTLPATH)
340ifeq (yes, $(GETTEXT))
Bram Moolenaar8cd06ca2005-02-28 22:44:58 +0000341DEFINES += -DDYNAMIC_GETTEXT
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342else
343ifdef DYNAMIC_GETTEXT
Bram Moolenaar8cd06ca2005-02-28 22:44:58 +0000344DEFINES += -D$(DYNAMIC_GETTEXT)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345ifdef GETTEXT_DYNAMIC
346DEFINES += -DGETTEXT_DYNAMIC -DGETTEXT_DLL=\"$(GETTEXT_DYNAMIC)\"
347endif
348endif
349endif
350endif
351
352ifdef PERL
353CFLAGS += -I$(PERLLIBS) -DFEAT_PERL -L$(PERLLIBS)
354ifeq (yes, $(DYNAMIC_PERL))
355CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
356endif
357endif
358
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200359ifdef LUA
360CFLAGS += -I$(LUA)/include -DFEAT_LUA
361ifeq (yes, $(DYNAMIC_LUA))
362CFLAGS += -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
363endif
364endif
365
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000366ifdef MZSCHEME
367CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000368ifeq (yes, $(DYNAMIC_MZSCHEME))
Bram Moolenaar2d0860d2010-11-03 21:59:30 +0100369CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
Bram Moolenaar281bdce2005-01-25 21:53:18 +0000370endif
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000371endif
372
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373ifdef RUBY
374CFLAGS += -DFEAT_RUBY $(RUBYINC)
375ifeq (yes, $(DYNAMIC_RUBY))
376CFLAGS += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
377CFLAGS += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
378endif
379endif
380
381ifdef PYTHON
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200382CFLAGS += -DFEAT_PYTHON
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383ifeq (yes, $(DYNAMIC_PYTHON))
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200384CFLAGS += -DDYNAMIC_PYTHON
385endif
386endif
387
388ifdef PYTHON3
389CFLAGS += -DFEAT_PYTHON3
390ifeq (yes, $(DYNAMIC_PYTHON3))
391CFLAGS += -DDYNAMIC_PYTHON3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392endif
393endif
394
395ifdef TCL
396CFLAGS += -DFEAT_TCL $(TCLINC)
397ifeq (yes, $(DYNAMIC_TCL))
398CFLAGS += -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
399endif
400endif
401
402ifeq ($(POSTSCRIPT),yes)
403DEFINES += -DMSWINPS
404endif
405
406ifeq (yes, $(OLE))
407DEFINES += -DFEAT_OLE
408endif
409
410ifeq ($(CSCOPE),yes)
411DEFINES += -DFEAT_CSCOPE
412endif
413
414ifeq ($(NETBEANS),yes)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000415# Only allow NETBEANS for a GUI build.
416ifeq (yes, $(GUI))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417DEFINES += -DFEAT_NETBEANS_INTG
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000418
419ifeq ($(NBDEBUG), yes)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420DEFINES += -DNBDEBUG
421NBDEBUG_INCL = nbdebug.h
422NBDEBUG_SRC = nbdebug.c
423endif
424endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000425endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426
427ifdef XPM
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000428# Only allow XPM for a GUI build.
429ifeq (yes, $(GUI))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
431endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000432endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433
434ifeq ($(DEBUG),yes)
435CFLAGS += -g -fstack-check
436DEBUG_SUFFIX=d
437else
438ifeq ($(OPTIMIZE), SIZE)
439CFLAGS += -Os
440else
441ifeq ($(OPTIMIZE), MAXSPEED)
442CFLAGS += -O3
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000443CFLAGS += -fomit-frame-pointer -freg-struct-return
Bram Moolenaar071d4272004-06-13 20:20:40 +0000444else # SPEED
445CFLAGS += -O2
446endif
447endif
448CFLAGS += -s
449endif
450
Bram Moolenaara3ffd9c2005-07-21 21:03:15 +0000451LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion
Bram Moolenaar44ecf652005-03-07 23:09:59 +0000452GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453OBJ = \
Bram Moolenaaredac1852010-05-18 20:34:20 +0200454 $(OUTDIR)/blowfish.o \
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455 $(OUTDIR)/buffer.o \
456 $(OUTDIR)/charset.o \
457 $(OUTDIR)/diff.o \
458 $(OUTDIR)/digraph.o \
459 $(OUTDIR)/edit.o \
460 $(OUTDIR)/eval.o \
461 $(OUTDIR)/ex_cmds.o \
462 $(OUTDIR)/ex_cmds2.o \
463 $(OUTDIR)/ex_docmd.o \
464 $(OUTDIR)/ex_eval.o \
465 $(OUTDIR)/ex_getln.o \
466 $(OUTDIR)/fileio.o \
467 $(OUTDIR)/fold.o \
468 $(OUTDIR)/getchar.o \
Bram Moolenaar58d98232005-07-23 22:25:46 +0000469 $(OUTDIR)/hardcopy.o \
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000470 $(OUTDIR)/hashtab.o \
Bram Moolenaar071d4272004-06-13 20:20:40 +0000471 $(OUTDIR)/main.o \
472 $(OUTDIR)/mark.o \
473 $(OUTDIR)/memfile.o \
474 $(OUTDIR)/memline.o \
475 $(OUTDIR)/menu.o \
476 $(OUTDIR)/message.o \
477 $(OUTDIR)/misc1.o \
478 $(OUTDIR)/misc2.o \
479 $(OUTDIR)/move.o \
480 $(OUTDIR)/mbyte.o \
481 $(OUTDIR)/normal.o \
482 $(OUTDIR)/ops.o \
483 $(OUTDIR)/option.o \
484 $(OUTDIR)/os_win32.o \
485 $(OUTDIR)/os_mswin.o \
486 $(OUTDIR)/pathdef.o \
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000487 $(OUTDIR)/popupmnu.o \
Bram Moolenaar071d4272004-06-13 20:20:40 +0000488 $(OUTDIR)/quickfix.o \
489 $(OUTDIR)/regexp.o \
490 $(OUTDIR)/screen.o \
491 $(OUTDIR)/search.o \
Bram Moolenaaredac1852010-05-18 20:34:20 +0200492 $(OUTDIR)/sha256.o \
Bram Moolenaar6bb68362005-03-22 23:03:44 +0000493 $(OUTDIR)/spell.o \
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494 $(OUTDIR)/syntax.o \
495 $(OUTDIR)/tag.o \
496 $(OUTDIR)/term.o \
497 $(OUTDIR)/ui.o \
498 $(OUTDIR)/undo.o \
499 $(OUTDIR)/version.o \
500 $(OUTDIR)/vimrc.o \
501 $(OUTDIR)/window.o
502
503ifdef PERL
504OBJ += $(OUTDIR)/if_perl.o
505endif
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200506ifdef LUA
507OBJ += $(OUTDIR)/if_lua.o
508endif
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000509ifdef MZSCHEME
510OBJ += $(OUTDIR)/if_mzsch.o
511MZSCHEME_INCL = if_mzsch.h
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000512ifeq (yes,$(MZSCHEME_GENERATE_BASE))
513CFLAGS += -DINCLUDE_MZSCHEME_BASE
514MZ_EXTRA_DEP += mzscheme_base.c
515endif
516ifeq (yes,$(MZSCHEME_PRECISE_GC))
517CFLAGS += -DMZ_PRECISE_GC
518endif
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000519endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520ifdef PYTHON
521OBJ += $(OUTDIR)/if_python.o
522endif
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200523ifdef PYTHON3
524OBJ += $(OUTDIR)/if_python3.o
525endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526ifdef RUBY
527OBJ += $(OUTDIR)/if_ruby.o
528endif
529ifdef TCL
530OBJ += $(OUTDIR)/if_tcl.o
531endif
532ifeq ($(CSCOPE),yes)
533OBJ += $(OUTDIR)/if_cscope.o
534endif
535ifeq ($(NETBEANS),yes)
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000536# Only allow NETBEANS for a GUI build.
537ifeq (yes, $(GUI))
Bram Moolenaar44ecf652005-03-07 23:09:59 +0000538OBJ += $(OUTDIR)/netbeans.o
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539LIB += -lwsock32
540endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000541endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000542ifdef XPM
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000543# Only allow XPM for a GUI build.
544ifeq (yes, $(GUI))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000545OBJ += $(OUTDIR)/xpm_w32.o
546# You'll need libXpm.a from http://gnuwin32.sf.net
547LIB += -L $(XPM)/lib -lXpm
548endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000549endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550
551
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000552ifdef MZSCHEME
553MZSCHEME_SUFFIX = Z
554endif
555
Bram Moolenaar071d4272004-06-13 20:20:40 +0000556ifeq ($(GUI),yes)
557TARGET := gvim$(DEBUG_SUFFIX).exe
558DEFINES += $(DEF_GUI)
559OBJ += $(GUIOBJ)
560LFLAGS += -mwindows
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000561OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562else
563TARGET := vim$(DEBUG_SUFFIX).exe
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000564OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000565endif
566
567ifdef GETTEXT
568ifneq (yes, $(GETTEXT))
569CFLAGS += -I$(GETTEXTINCLUDE)
570ifndef STATIC_GETTEXT
571LIB += -L$(GETTEXTLIB) -l$(INTLLIB)
572ifeq (USE_SAFE_GETTEXT_DLL, $(DYNAMIC_GETTEXT))
573OBJ+=$(SAFE_GETTEXT_DLL_OBJ)
574endif
575else
576LIB += -L$(GETTEXTLIB) -lintl
577endif
578endif
579endif
580
581ifdef PERL
582ifeq (no, $(DYNAMIC_PERL))
583LIB += -lperl$(PERL_VER)
584endif
585endif
586
587ifdef TCL
588LIB += -L$(TCL)/lib
589ifeq (yes, $(DYNAMIC_TCL))
590LIB += -ltclstub$(TCL_VER)
591else
592LIB += -ltcl$(TCL_VER)
593endif
594endif
595
596ifeq (yes, $(OLE))
Bram Moolenaarb0d3f872010-12-30 14:50:52 +0100597LIB += -loleaut32
Bram Moolenaar071d4272004-06-13 20:20:40 +0000598OBJ += $(OUTDIR)/if_ole.o
Bram Moolenaarb0d3f872010-12-30 14:50:52 +0100599ifeq (yes, $(STATIC_STDCPLUS))
600LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
601else
602LIB += -lstdc++
603endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604endif
605
606ifeq (yes, $(MBYTE))
607DEFINES += -DFEAT_MBYTE
608endif
609
610ifeq (yes, $(IME))
611DEFINES += -DFEAT_MBYTE_IME
612ifeq (yes, $(DYNAMIC_IME))
613DEFINES += -DDYNAMIC_IME
614else
615LIB += -limm32
616endif
617endif
618
619ifdef ICONV
620ifneq (yes, $(ICONV))
621LIB += -L$(ICONV)
622CFLAGS += -I$(ICONV)
623endif
624DEFINES+=-DDYNAMIC_ICONV
625endif
626
627all: $(TARGET) vimrun.exe xxd/xxd.exe install.exe uninstal.exe GvimExt/gvimext.dll
628
629vimrun.exe: vimrun.c
630 $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
631
632install.exe: dosinst.c
633 $(CC) $(CFLAGS) -o install.exe dosinst.c $(LIB) -lole32 -luuid
634
635uninstal.exe: uninstal.c
636 $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
637
638$(TARGET): $(OUTDIR) $(OBJ)
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200639 $(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000640
641upx: exes
642 upx gvim.exe
643 upx vim.exe
644
Bram Moolenaar91856272012-02-29 16:56:39 +0100645mpress: exes
646 mpress gvim.exe
647 mpress vim.exe
648
Bram Moolenaar071d4272004-06-13 20:20:40 +0000649xxd/xxd.exe: xxd/xxd.c
Bram Moolenaar2369e352011-09-30 16:56:02 +0200650 $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000651
652GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
Bram Moolenaar48f80c22010-02-24 15:08:27 +0100653 $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000654
655clean:
656 -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
657 -$(DEL) $(OUTDIR)$(DIRSLASH)*.res
658 -rmdir $(OUTDIR)
659 -$(DEL) *.exe
660 -$(DEL) pathdef.c
661ifdef PERL
662 -$(DEL) if_perl.c
663endif
Bram Moolenaar2d6db762009-09-11 10:49:58 +0000664ifdef MZSCHEME
665 -$(DEL) mzscheme_base.c
666endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000667 $(MAKE) -C GvimExt -f Make_ming.mak clean
Bram Moolenaar2369e352011-09-30 16:56:02 +0200668 $(MAKE) -C xxd -f Make_ming.mak clean
Bram Moolenaar071d4272004-06-13 20:20:40 +0000669
670###########################################################################
671INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
672 structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
673 gui.h
674
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200675$(OUTDIR)/if_python.o : if_python.c $(INCL)
676 $(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
677
678$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
679 $(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
680
Bram Moolenaar071d4272004-06-13 20:20:40 +0000681$(OUTDIR)/%.o : %.c $(INCL)
682 $(CC) -c $(CFLAGS) $< -o $@
683
Bram Moolenaarca628612012-03-28 17:43:11 +0200684$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
685 $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
686 --input-format=rc --output-format=coff -i vim.rc -o $@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000687
688$(OUTDIR):
Bram Moolenaar0cf6f542005-01-16 21:59:36 +0000689 $(MKDIR) $(OUTDIR)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690
691$(OUTDIR)/ex_docmd.o: ex_docmd.c $(INCL) ex_cmds.h
692 $(CC) -c $(CFLAGS) ex_docmd.c -o $(OUTDIR)/ex_docmd.o
693
694$(OUTDIR)/ex_eval.o: ex_eval.c $(INCL) ex_cmds.h
695 $(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
696
697$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
698 $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
699
Bram Moolenaar8c69d532007-08-12 13:25:01 +0000700# Remove -D__IID_DEFINED__ for newer versions of the w32api
Bram Moolenaar071d4272004-06-13 20:20:40 +0000701$(OUTDIR)/if_ole.o: if_ole.cpp $(INCL)
Bram Moolenaar8c69d532007-08-12 13:25:01 +0000702 $(CC) $(CFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
Bram Moolenaar071d4272004-06-13 20:20:40 +0000703
704$(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
705ifeq (16, $(RUBY))
706 $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
707endif
708
709if_perl.c: if_perl.xs typemap
Bram Moolenaar612af432011-09-14 10:49:46 +0200710 $(XSUBPP) -prototypes -typemap \
Bram Moolenaar071d4272004-06-13 20:20:40 +0000711 $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
712
713$(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
714 $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
715
Bram Moolenaar9e70cf12009-05-26 20:59:55 +0000716$(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
717 $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
718
719mzscheme_base.c:
720 $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
721
Bram Moolenaar071d4272004-06-13 20:20:40 +0000722pathdef.c: $(INCL)
723ifneq (sh.exe, $(SHELL))
724 @echo creating pathdef.c
725 @echo '/* pathdef.c */' > pathdef.c
726 @echo '#include "vim.h"' >> pathdef.c
727 @echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' >> pathdef.c
728 @echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' >> pathdef.c
729 @echo 'char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)";' >> pathdef.c
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200730 @echo 'char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)";' >> pathdef.c
Bram Moolenaar071d4272004-06-13 20:20:40 +0000731 @echo 'char_u *compiled_user = (char_u *)"$(USERNAME)";' >> pathdef.c
732 @echo 'char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";' >> pathdef.c
733else
734 @echo creating pathdef.c
735 @echo /* pathdef.c */ > pathdef.c
736 @echo #include "vim.h" >> pathdef.c
737 @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)"; >> pathdef.c
738 @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)"; >> pathdef.c
739 @echo char_u *all_cflags = (char_u *)"$(CC) $(CFLAGS)"; >> pathdef.c
Bram Moolenaarbd5e15f2010-07-17 21:19:38 +0200740 @echo char_u *all_lflags = (char_u *)"$(CC) $(CFLAGS) $(LFLAGS) -o $(TARGET) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)"; >> pathdef.c
Bram Moolenaar071d4272004-06-13 20:20:40 +0000741 @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> pathdef.c
742 @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> pathdef.c
743endif