1# Make file for Scintilla on Windows Visual C++ version
2# Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
3# The License.txt file describes the conditions under which this software may be distributed.
4# This makefile is for using Visual C++ with nmake.
5# Usage for Microsoft:
6#     nmake -f scintilla.mak
7# For debug versions define DEBUG on the command line:
8#     nmake DEBUG=1 -f scintilla.mak
9# The main makefile uses mingw32 gcc and may be more current than this file.
10
11.SUFFIXES: .cxx
12
13DIR_O=.
14DIR_BIN=..\bin
15
16COMPONENT=$(DIR_BIN)\Scintilla.dll
17LEXCOMPONENT=$(DIR_BIN)\SciLexer.dll
18LIBSCI=$(DIR_BIN)\libscintilla.lib
19
20LD=link
21
22!IFDEF SUPPORT_XP
23ADD_DEFINE=-D_USING_V110_SDK71_
24# Different subsystems for 32-bit and 64-bit Windows XP so detect based on Platform
25# environment vairable set by vcvars*.bat to be either x86 or x64
26!IF "$(PLATFORM)" == "x64"
27SUBSYSTEM=-SUBSYSTEM:WINDOWS,5.02
28!ELSE
29SUBSYSTEM=-SUBSYSTEM:WINDOWS,5.01
30!ENDIF
31!ELSEIFDEF ARM64
32ADD_DEFINE=-D_ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
33SUBSYSTEM=-SUBSYSTEM:WINDOWS,10.00
34!ENDIF
35
36CRTFLAGS=-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -D_CRT_SECURE_NO_DEPRECATE=1 -D_SCL_SECURE_NO_WARNINGS=1 $(ADD_DEFINE)
37CXXFLAGS=-Zi -TP -MP -W4 -EHsc -std:c++17 $(CRTFLAGS)
38CXXDEBUG=-Od -MTd -DDEBUG
39CXXNDEBUG=-O1 -MT -DNDEBUG -GL
40NAME=-Fo
41LDFLAGS=-OPT:REF -LTCG -IGNORE:4197 -DEBUG $(SUBSYSTEM)
42LDDEBUG=
43LIBS=KERNEL32.lib USER32.lib GDI32.lib IMM32.lib OLE32.lib OLEAUT32.lib MSIMG32.lib
44NOLOGO=-nologo
45
46!IFDEF QUIET
47CXX=@$(CXX)
48CXXFLAGS=$(CXXFLAGS) $(NOLOGO)
49LDFLAGS=$(LDFLAGS) $(NOLOGO)
50!ENDIF
51
52!IFDEF NO_CXX11_REGEX
53CXXFLAGS=$(CXXFLAGS) -DNO_CXX11_REGEX
54!ENDIF
55
56!IFDEF DEBUG
57CXXFLAGS=$(CXXFLAGS) $(CXXDEBUG)
58LDFLAGS=$(LDDEBUG) $(LDFLAGS)
59!ELSE
60CXXFLAGS=$(CXXFLAGS) $(CXXNDEBUG)
61!ENDIF
62
63INCLUDES=-I../include -I../src -I../lexlib
64CXXFLAGS=$(CXXFLAGS) $(INCLUDES)
65
66all:	$(COMPONENT) $(LEXCOMPONENT) $(LIBSCI)
67
68clean:
69	-del /q $(DIR_O)\*.obj $(DIR_O)\*.pdb $(DIR_O)\*.asm $(COMPONENT) $(LEXCOMPONENT) \
70	$(DIR_O)\*.res $(DIR_BIN)\*.map $(DIR_BIN)\*.exp $(DIR_BIN)\*.pdb \
71	$(DIR_BIN)\Scintilla.lib $(DIR_BIN)\SciLexer.lib $(LIBSCI)
72
73depend:
74	pyw DepGen.py
75
76# Required for base Scintilla
77SRC_OBJS=\
78	$(DIR_O)\AutoComplete.obj \
79	$(DIR_O)\CallTip.obj \
80	$(DIR_O)\CaseConvert.obj \
81	$(DIR_O)\CaseFolder.obj \
82	$(DIR_O)\CellBuffer.obj \
83	$(DIR_O)\CharacterCategory.obj \
84	$(DIR_O)\CharacterSet.obj \
85	$(DIR_O)\CharClassify.obj \
86	$(DIR_O)\ContractionState.obj \
87	$(DIR_O)\DBCS.obj \
88	$(DIR_O)\Decoration.obj \
89	$(DIR_O)\Document.obj \
90	$(DIR_O)\EditModel.obj \
91	$(DIR_O)\Editor.obj \
92	$(DIR_O)\EditView.obj \
93	$(DIR_O)\Indicator.obj \
94	$(DIR_O)\KeyMap.obj \
95	$(DIR_O)\LineMarker.obj \
96	$(DIR_O)\MarginView.obj \
97	$(DIR_O)\PerLine.obj \
98	$(DIR_O)\PositionCache.obj \
99	$(DIR_O)\PropSetSimple.obj \
100	$(DIR_O)\RESearch.obj \
101	$(DIR_O)\RunStyles.obj \
102	$(DIR_O)\Selection.obj \
103	$(DIR_O)\Style.obj \
104	$(DIR_O)\UniConversion.obj \
105	$(DIR_O)\UniqueString.obj \
106	$(DIR_O)\ViewStyle.obj \
107	$(DIR_O)\XPM.obj
108
109#++Autogenerated -- run scripts/LexGen.py to regenerate
110#**LEX_OBJS=\\\n\(\t$(DIR_O)\\\*.obj \\\n\)
111LEX_OBJS=\
112	$(DIR_O)\LexA68k.obj \
113	$(DIR_O)\LexAbaqus.obj \
114	$(DIR_O)\LexAda.obj \
115	$(DIR_O)\LexAPDL.obj \
116	$(DIR_O)\LexAsm.obj \
117	$(DIR_O)\LexAsn1.obj \
118	$(DIR_O)\LexASY.obj \
119	$(DIR_O)\LexAU3.obj \
120	$(DIR_O)\LexAVE.obj \
121	$(DIR_O)\LexAVS.obj \
122	$(DIR_O)\LexBaan.obj \
123	$(DIR_O)\LexBash.obj \
124	$(DIR_O)\LexBasic.obj \
125	$(DIR_O)\LexBatch.obj \
126	$(DIR_O)\LexBibTeX.obj \
127	$(DIR_O)\LexBullant.obj \
128	$(DIR_O)\LexCaml.obj \
129	$(DIR_O)\LexCIL.obj \
130	$(DIR_O)\LexCLW.obj \
131	$(DIR_O)\LexCmake.obj \
132	$(DIR_O)\LexCOBOL.obj \
133	$(DIR_O)\LexCoffeeScript.obj \
134	$(DIR_O)\LexConf.obj \
135	$(DIR_O)\LexCPP.obj \
136	$(DIR_O)\LexCrontab.obj \
137	$(DIR_O)\LexCsound.obj \
138	$(DIR_O)\LexCSS.obj \
139	$(DIR_O)\LexD.obj \
140	$(DIR_O)\LexDataflex.obj \
141	$(DIR_O)\LexDiff.obj \
142	$(DIR_O)\LexDMAP.obj \
143	$(DIR_O)\LexDMIS.obj \
144	$(DIR_O)\LexECL.obj \
145	$(DIR_O)\LexEDIFACT.obj \
146	$(DIR_O)\LexEiffel.obj \
147	$(DIR_O)\LexErlang.obj \
148	$(DIR_O)\LexErrorList.obj \
149	$(DIR_O)\LexEScript.obj \
150	$(DIR_O)\LexFlagship.obj \
151	$(DIR_O)\LexForth.obj \
152	$(DIR_O)\LexFortran.obj \
153	$(DIR_O)\LexGAP.obj \
154	$(DIR_O)\LexGui4Cli.obj \
155	$(DIR_O)\LexHaskell.obj \
156	$(DIR_O)\LexHex.obj \
157	$(DIR_O)\LexHollywood.obj \
158	$(DIR_O)\LexHTML.obj \
159	$(DIR_O)\LexIndent.obj \
160	$(DIR_O)\LexInno.obj \
161	$(DIR_O)\LexJSON.obj \
162	$(DIR_O)\LexKix.obj \
163	$(DIR_O)\LexKVIrc.obj \
164	$(DIR_O)\LexLaTeX.obj \
165	$(DIR_O)\LexLisp.obj \
166	$(DIR_O)\LexLout.obj \
167	$(DIR_O)\LexLua.obj \
168	$(DIR_O)\LexMagik.obj \
169	$(DIR_O)\LexMake.obj \
170	$(DIR_O)\LexMarkdown.obj \
171	$(DIR_O)\LexMatlab.obj \
172	$(DIR_O)\LexMaxima.obj \
173	$(DIR_O)\LexMetapost.obj \
174	$(DIR_O)\LexMMIXAL.obj \
175	$(DIR_O)\LexModula.obj \
176	$(DIR_O)\LexMPT.obj \
177	$(DIR_O)\LexMSSQL.obj \
178	$(DIR_O)\LexMySQL.obj \
179	$(DIR_O)\LexNim.obj \
180	$(DIR_O)\LexNimrod.obj \
181	$(DIR_O)\LexNsis.obj \
182	$(DIR_O)\LexNull.obj \
183	$(DIR_O)\LexOpal.obj \
184	$(DIR_O)\LexOScript.obj \
185	$(DIR_O)\LexPascal.obj \
186	$(DIR_O)\LexPB.obj \
187	$(DIR_O)\LexPerl.obj \
188	$(DIR_O)\LexPLM.obj \
189	$(DIR_O)\LexPO.obj \
190	$(DIR_O)\LexPOV.obj \
191	$(DIR_O)\LexPowerPro.obj \
192	$(DIR_O)\LexPowerShell.obj \
193	$(DIR_O)\LexProgress.obj \
194	$(DIR_O)\LexProps.obj \
195	$(DIR_O)\LexPS.obj \
196	$(DIR_O)\LexPython.obj \
197	$(DIR_O)\LexR.obj \
198	$(DIR_O)\LexRaku.obj \
199	$(DIR_O)\LexRebol.obj \
200	$(DIR_O)\LexRegistry.obj \
201	$(DIR_O)\LexRuby.obj \
202	$(DIR_O)\LexRust.obj \
203	$(DIR_O)\LexSAS.obj \
204	$(DIR_O)\LexScriptol.obj \
205	$(DIR_O)\LexSmalltalk.obj \
206	$(DIR_O)\LexSML.obj \
207	$(DIR_O)\LexSorcus.obj \
208	$(DIR_O)\LexSpecman.obj \
209	$(DIR_O)\LexSpice.obj \
210	$(DIR_O)\LexSQL.obj \
211	$(DIR_O)\LexStata.obj \
212	$(DIR_O)\LexSTTXT.obj \
213	$(DIR_O)\LexTACL.obj \
214	$(DIR_O)\LexTADS3.obj \
215	$(DIR_O)\LexTAL.obj \
216	$(DIR_O)\LexTCL.obj \
217	$(DIR_O)\LexTCMD.obj \
218	$(DIR_O)\LexTeX.obj \
219	$(DIR_O)\LexTxt2tags.obj \
220	$(DIR_O)\LexVB.obj \
221	$(DIR_O)\LexVerilog.obj \
222	$(DIR_O)\LexVHDL.obj \
223	$(DIR_O)\LexVisualProlog.obj \
224	$(DIR_O)\LexX12.obj \
225	$(DIR_O)\LexYAML.obj \
226
227#--Autogenerated -- end of automatically generated section
228
229# Required by lexers
230LEXLIB_OBJS = \
231	$(DIR_O)\Accessor.obj \
232	$(DIR_O)\CatalogueL.obj \
233	$(DIR_O)\ExternalLexer.obj \
234	$(DIR_O)\DefaultLexer.obj \
235	$(DIR_O)\LexerBase.obj \
236	$(DIR_O)\LexerModule.obj \
237	$(DIR_O)\LexerSimple.obj \
238	$(DIR_O)\StyleContext.obj \
239	$(DIR_O)\WordList.obj
240
241# Required by libraries and DLLs that include lexing
242SCILEX_OBJS = \
243	$(SRC_OBJS) \
244	$(LEXLIB_OBJS) \
245	$(LEX_OBJS) \
246	$(DIR_O)\HanjaDic.obj \
247	$(DIR_O)\PlatWin.obj \
248	$(DIR_O)\ScintillaBaseL.obj \
249	$(DIR_O)\ScintillaWin.obj
250
251COMPONENT_OBJS = \
252	$(DIR_O)\Accessor.obj \
253	$(DIR_O)\Catalogue.obj \
254	$(DIR_O)\HanjaDic.obj \
255	$(DIR_O)\LexerBase.obj \
256	$(DIR_O)\LexerModule.obj \
257	$(DIR_O)\LexerSimple.obj \
258	$(DIR_O)\PlatWin.obj \
259	$(DIR_O)\ScintillaBase.obj \
260	$(DIR_O)\ScintillaDLL.obj \
261	$(DIR_O)\ScintillaWin.obj \
262	$(DIR_O)\WordList.obj \
263	$(SRC_OBJS)
264
265LEXCOMPONENT_OBJS = \
266	$(DIR_O)\ScintillaDLL.obj \
267	$(SCILEX_OBJS)
268
269$(DIR_O)\ScintRes.res : ScintRes.rc
270	$(RC) -fo$@ $**
271
272$(COMPONENT): $(COMPONENT_OBJS) $(DIR_O)\ScintRes.res
273	$(LD) $(LDFLAGS) -DEF:Scintilla.def -DLL -OUT:$@ $** $(LIBS)
274
275$(LEXCOMPONENT): $(LEXCOMPONENT_OBJS) $(DIR_O)\ScintRes.res
276	$(LD) $(LDFLAGS) -DEF:Scintilla.def -DLL -OUT:$@ $** $(LIBS)
277
278$(LIBSCI): $(COMPONENT_OBJS)
279	LIB /OUT:$@ $**
280
281# Define how to build all the objects and what they depend on
282
283{..\src}.cxx{$(DIR_O)}.obj::
284	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
285{..\lexlib}.cxx{$(DIR_O)}.obj::
286	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
287{..\lexers}.cxx{$(DIR_O)}.obj::
288	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
289{.}.cxx{$(DIR_O)}.obj::
290	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
291
292# Some source files are compiled into more than one object because of different conditional compilation
293$(DIR_O)\ScintillaBaseL.obj: ..\src\ScintillaBase.cxx
294	$(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ..\src\ScintillaBase.cxx
295
296$(DIR_O)\CatalogueL.obj: ..\src\Catalogue.cxx
297	$(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ..\src\Catalogue.cxx
298
299$(DIR_O)\Catalogue.obj: ..\src\Catalogue.cxx
300	$(CXX) $(CXXFLAGS) -DSCI_LEXER -DSCI_EMPTYCATALOGUE -c $(NAME)$@ ..\src\Catalogue.cxx
301
302# Dependencies
303
304!IF EXISTS(nmdeps.mak)
305
306# Protect with !IF EXISTS to handle accidental deletion - just 'nmake -f scintilla.mak deps'
307
308!INCLUDE nmdeps.mak
309
310!ENDIF
311
312