xref: /Universal-ctags/mk_mvc.mak (revision 3490d7a1080a60b3d85196a41fe221723f916f61)
1#
2# Makefile for Win32 using Microsoft Visual Studio 2013
3#
4# To use from the command line:
5# 1. From the Start Menu "Visual Studio 2013" -> "Visual Studio Tools" -> "VS2013 x86 Native Tools Command Prompt"
6# 2. In the command prompt that opens goto the directory containing the sources
7# 3. Execute: nmake -f mk_mvc.mak
8#
9
10OBJEXT = obj
11include source.mak
12
13COMMON_DEFINES =
14DEFINES = -DWIN32 $(COMMON_DEFINES) -DHAVE_REPOINFO_H -DHAVE_PACKCC -DREADTAGS_DSL
15INCLUDES = -I. -Ignulib -Imain -Iparsers -Ilibreadtags -Idsl
16OPT = /O2 /WX
17PACKCC = packcc.exe
18GNULIB_OBJS = $(MVC_GNULIB_SRCS:.c=.obj)
19WIN32_OBJS = $(WIN32_SRCS:.c=.obj)
20PEG_OBJS = $(PEG_SRCS:.c=.obj)
21PACKCC_OBJ = $(PACKCC_SRC:.c=.obj)
22RES_OBJ = win32/ctags.res
23EXTRA_OBJS = $(GNULIB_OBJS) $(WIN32_OBJS) $(PEG_OBJS) $(RES_OBJ)
24ALL_OBJS = $(ALL_SRCS:.c=.obj) $(EXTRA_OBJS)
25ALL_LIB_OBJS = $(ALL_LIB_SRCS:.c=.obj) $(EXTRA_OBJS)
26READTAGS_OBJS = $(READTAGS_SRCS:.c=.obj)
27UTIL_OBJS = $(UTIL_SRCS:.c=.obj)
28READTAGS_DSL_OBJS = $(READTAGS_DSL_SRCS:.c=.obj)
29OPTSCRIPT_OBJS = $(OPTSCRIPT_SRCS:.c=.obj)
30
31!if "$(WITH_ICONV)" == "yes"
32DEFINES = $(DEFINES) -DHAVE_ICONV
33LIBS = $(LIBS) /libpath:$(ICONV_DIR)/lib iconv.lib
34INCLUDES = $(INCLUDES) -I$(ICONV_DIR)/include
35!endif
36
37!ifdef DEBUG
38DEFINES = $(DEFINES) -DDEBUG
39PDB = yes
40!endif
41
42!ifdef PDB
43OPT = $(OPT) /Zi
44PDBFLAG = /debug
45!else
46PDBFLAG =
47!endif
48
49# Generate repoinfo.h.
50!if [win32\gen-repoinfo.bat $(REPOINFO_HEADS)]
51!endif
52
53.SUFFIXES: .peg
54
55{main}.c{main}.obj::
56	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fomain\ /c $<
57{optlib}.c{optlib}.obj::
58	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fooptlib\ /c $<
59{parsers}.c{parsers}.obj::
60	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Foparsers\ /c $<
61{parsers\cxx}.c{parsers\cxx}.obj::
62	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Foparsers\cxx\ /c $<
63{extra-cmds}.c{extra-cmds}.obj::
64	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Foextra-cmds\ /c $<
65{libreadtags}.c{libreadtags}.obj::
66	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Folibreadtags\ /c $<
67{dsl}.c{dsl}.obj::
68	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fodsl\ /c $<
69{win32\mkstemp}.c{win32\mkstemp}.obj::
70	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fowin32\mkstemp\ /c $<
71{peg}.peg{peg}.c::
72	$(PACKCC) $<
73{peg}.c{peg}.obj::
74	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fopeg\ /c $<
75{gnulib}.c{gnulib}.obj::
76	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fognulib\ /c $<
77{gnulib\malloc}.c{gnulib\malloc}.obj::
78	$(CC) $(OPT) $(DEFINES) $(INCLUDES) /Fognulib\malloc\ /c $<
79
80all: copy_gnulib_heads $(PACKCC) ctags.exe readtags.exe optscript.exe
81
82ctags: ctags.exe
83
84ctags.exe: $(ALL_OBJS) $(ALL_HEADS) $(PEG_HEADS) $(PEG_EXTRA_HEADS) $(MVC_GNULIB_HEADS) $(WIN32_HEADS) $(REPOINFO_HEADS)
85	$(CC) $(OPT) /Fe$@ $(ALL_OBJS) /link setargv.obj $(LIBS) $(PDBFLAG)
86
87readtags.exe: $(READTAGS_OBJS) $(READTAGS_HEADS) $(UTIL_OBJS) $(UTIL_HEADS) $(READTAGS_DSL_OBJS) $(READTAGS_DSL_HEADS) $(GNULIB_OBJS) $(MVC_GNULIB_HEADS) $(WIN32_HEADS) $(WIN32_OBJS)
88	$(CC) $(OPT) /Fe$@ $(READTAGS_OBJS) $(READTAGS_DSL_OBJS) $(UTIL_OBJS) $(GNULIB_OBJS) $(WIN32_OBJS) /link setargv.obj $(PDBFLAG)
89
90optscript.exe: $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) $(ALL_LIB_HEADS) $(OPTSCRIPT_DSL_HEADS) $(WIN32_HEADS)
91	$(CC) $(OPT) /Fe$@ $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) /link setargv.obj $(LIBS)
92
93$(PACKCC_OBJ): $(PACKCC_SRC)
94	$(CC) /c $(OPT) /Fo$@ $(INCLUDES) $(COMMON_DEFINES) $(PACKCC_SRC)
95
96$(PACKCC): $(PACKCC_OBJ)
97	$(CC) $(OPT) /Fe$@ $(PACKCC_OBJ) /link setargv.obj $(PDBFLAG)
98
99main\repoinfo.obj: main\repoinfo.c main\repoinfo.h
100
101peg\varlink.c peg\varlink.h: peg\varlink.peg $(PACKCC)
102peg\kotlin.c peg\kotlin.h: peg\kotlin.peg $(PACKCC)
103peg\thrift.c peg\thrift.h: peg\thrift.peg $(PACKCC)
104peg\elm.c peg\elm.h: peg\elm.peg $(PACKCC)
105
106$(RES_OBJ): win32/ctags.rc win32/ctags.exe.manifest win32/resource.h
107	$(RC) /nologo /l 0x409 /Fo$@ $*.rc
108
109copy_gnulib_heads:
110	copy win32\config_mvc.h config.h
111	copy win32\gnulib_h\langinfo.h gnulib
112	copy win32\gnulib_h\fnmatch.h gnulib
113
114clean:
115	- del *.obj main\*.obj optlib\*.obj parsers\*.obj parsers\cxx\*.obj gnulib\*.obj misc\packcc\*.obj peg\*.obj extra-cmds\*.obj libreadtags\*.obj dsl\*.obj win32\mkstemp\*.obj win32\*.res main\repoinfo.h
116	- del ctags.exe readtags.exe optscript.exe $(PACKCC)
117	- del tags
118	- del config.h gnulib\langinfo.h gnulib\fnmatch.h gnulib\*.obj gnulib\malloc\*.obj
119