xref: /Universal-ctags/mk_mingw.mak (revision 68f5fd96111431b1865f5d8720d119432f8c5970)
1# Makefile for Universal Ctags under Win32 with MinGW compiler
2
3OBJEXT = o
4include source.mak
5
6GNULIB_OBJS = $(MINGW_GNULIB_SRCS:.c=.$(OBJEXT))
7
8CFLAGS = -Wall -std=gnu99
9COMMON_DEFINES =
10DEFINES = -DWIN32 $(COMMON_DEFINES) -DHAVE_CONFIG_H -DHAVE_PACKCC
11INCLUDES = -I. -Ignulib -Ilibreadtags -iquote parsers -iquote main -iquote dsl
12CC = gcc
13WINDRES = windres
14OPTLIB2C = ./misc/optlib2c
15PACKCC   = ./packcc.exe
16RES_OBJ = win32/ctags.res.o
17EXTRA_OBJS  =
18EXTRA_OBJS += $(GNULIB_OBJS)
19EXTRA_OBJS += $(WIN32_OBJS)
20EXTRA_OBJS += $(PEG_OBJS)
21EXTRA_OBJS += $(RES_OBJ)
22ALL_OBJS   += $(EXTRA_OBJS)
23ALL_LIB_OBJS += $(EXTRA_OBJS)
24VPATH = . ./gnulib ./main ./parsers ./optlib ./extra-cmds ./libreadtags ./win32
25
26ifeq (yes, $(WITH_ICONV))
27DEFINES += -DHAVE_ICONV
28LIBS += -liconv
29endif
30ifeq (yes, $(WITH_PCRE2))
31CFLAGS += -DHAVE_LIBPCRE2=1 $(shell pkg-config --cflags libpcre2-8)
32LIBS += $(shell pkg-config --libs libpcre2-8)
33PARSER_SRCS += $(PCRE2_SRCS)
34PARSER_HEADS += $(PCRE2_HEADS)
35endif
36ifeq (yes, $(WITH_YAML))
37CFLAGS += -DHAVE_LIBYAML=1 $(shell pkg-config --cflags yaml-0.1)
38LIBS += $(shell pkg-config --libs yaml-0.1)
39PARSER_SRCS += $(YAML_SRCS)
40PARSER_HEADS += $(YAML_HEADS)
41endif
42ifeq (yes, $(WITH_XML))
43CFLAGS += -DHAVE_LIBXML=1 $(shell pkg-config --cflags libxml-2.0)
44LIBS += $(shell pkg-config --libs libxml-2.0)
45PARSER_SRCS += $(XML_SRCS)
46PARSER_HEADS += $(XML_HEADS)
47endif
48ifeq (yes, $(WITH_JSON))
49CFLAGS += -DHAVE_JANSSON=1 $(shell pkg-config --cflags jansson)
50LIBS += $(shell pkg-config --libs jansson)
51endif
52
53ifdef DEBUG
54DEFINES += -DDEBUG
55OPT = -g
56else
57OPT = -O4 -Os -fexpensive-optimizations
58LDFLAGS = -s
59endif
60
61.SUFFIXES: .c .o .ctags .peg
62
63#
64# Silent/verbose commands
65#
66# when V is not set the output of commands is omitted or simplified
67#
68V	 ?= 0
69CC_FOR_PACKCC ?= $(CC)
70
71SILENT   = $(SILENT_$(V))
72SILENT_0 = @
73SILENT_1 =
74
75V_CC	 = $(V_CC_$(V))
76V_CC_0	 = @echo [CC] $@;
77V_CC_1	 =
78
79V_OPTLIB2C   = $(V_OPTLIB2C_$(V))
80V_OPTLIB2C_0 = @echo [OPTLIB2C] $@;
81V_OPTLIB2C_1 =
82
83V_PACKCC   = $(V_PACKCC_$(V))
84V_PACKCC_0 = @echo [PACKCC] $@;
85V_PACKCC_1 =
86
87V_WINDRES   = $(V_WINDRES_$(V))
88V_WINDRES_0 = @echo [WINDRES] $@;
89V_WINDRES_1 =
90
91
92.c.o:
93	$(V_CC) $(CC) -c $(OPT) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
94
95%.c: %.ctags $(OPTLIB2C)
96	$(V_OPTLIB2C) $(OPTLIB2C) $< > $@
97
98peg/%.c peg/%.h: peg/%.peg $(PACKCC)
99	$(V_PACKCC) $(PACKCC) $<
100
101all: copy_gnulib_heads $(PACKCC) ctags.exe readtags.exe optscript.exe
102
103ctags: ctags.exe
104
105$(PACKCC_OBJ): $(PACKCC_SRC)
106	$(V_CC) $(CC_FOR_PACKCC) -c $(OPT) $(CFLAGS) $(COMMON_DEFINES) -o $@ $<
107
108$(PACKCC): $(PACKCC_OBJ)
109	$(V_CC) $(CC_FOR_PACKCC) $(OPT) -o $@ $^
110
111ctags.exe: $(ALL_OBJS) $(ALL_HEADS) $(PEG_HEADS) $(PEG_EXTRA_HEADS) $(MINGW_GNULIB_HEADS) $(WIN32_HEADS)
112	$(V_CC) $(CC) $(OPT) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -o $@ $(ALL_OBJS) $(LIBS)
113
114$(RES_OBJ): win32/ctags.rc win32/ctags.exe.manifest win32/resource.h
115	$(V_WINDRES) $(WINDRES) -o $@ -O coff $<
116
117extra-cmds/%.o: extra-cmds/%.c
118	$(V_CC) $(CC) -c $(OPT) $(CFLAGS) -DWIN32 $(INCLUDES) -o $@ $<
119libreadtags/%.o: libreadtags/%.c
120	$(V_CC) $(CC) -c $(OPT) $(CFLAGS) -DWIN32 -Ilibreadtags -o $@ $<
121
122readtags.exe: $(READTAGS_OBJS) $(READTAGS_HEADS) $(UTIL_OBJS) $(UTIL_HEADS) $(READTAGS_DSL_OBJS) $(READTAGS_DSL_HEADS) $(GNULIB_OBJS) $(MINGW_GNULIB_HEADS)
123	$(V_CC) $(CC) $(OPT) -o $@ $(READTAGS_OBJS) $(UTIL_OBJS) $(READTAGS_DSL_OBJS) $(GNULIB_OBJS) $(LIBS)
124
125optscript.exe: $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) $(ALL_LIB_HEADS) $(OPTSCRIPT_DSL_HEADS) $(WIN32_HEADS)
126	$(V_CC) $(CC) $(OPT) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -o $@ $(ALL_LIB_OBJS) $(OPTSCRIPT_OBJS) $(LIBS)
127
128copy_gnulib_heads:
129	cp win32/config_mingw.h config.h
130	cp win32/gnulib_h/langinfo.h win32/gnulib_h/locale.h win32/gnulib_h/unistd.h win32/gnulib_h/fnmatch.h win32/gnulib_h/string.h win32/gnulib_h/wchar.h gnulib
131
132clean:
133	$(SILENT) echo Cleaning
134	$(SILENT) rm -f ctags.exe readtags.exe optscript.exe $(PACKCC)
135	$(SILENT) rm -f tags
136	$(SILENT) rm -f main/*.o optlib/*.o parsers/*.o parsers/cxx/*.o gnulib/*.o misc/packcc/*.o peg/*.o extra-cmds/*.o libreadtags/*.o dsl/*.o win32/*.o win32/mkstemp/*.o
137	$(SILENT) rm -f config.h gnulib/langinfo.h gnulib/locale.h gnulib/unistd.h gnulib/fnmatch.h gnulib/string.h gnulib/wchar.h
138