1# Make file for SciTE 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 scite.mak
7# For debug versions define DEBUG on the command line.
8# For a build without Lua, define NO_LUA on the command line.
9# For a build with no lexers, loading Scintilla.DLL instead of SciLexer.DLL,
10# define LOAD_SCINTILLA on the command line.
11# The main makefile uses mingw32 gcc and may be more current than this file.
12
13.SUFFIXES: .cxx .properties .dll
14
15DIR_BIN=..\bin
16DIR_SCINTILLA=..\..\scintilla
17DIR_SCINTILLA_BIN=$(DIR_SCINTILLA)\bin
18
19PROG=$(DIR_BIN)\SciTE.exe
20PROGSTATIC=$(DIR_BIN)\Sc1.exe
21DLLS=$(DIR_BIN)\Scintilla.dll $(DIR_BIN)\SciLexer.dll $(DIR_BIN)\Lexilla.dll
22
23WIDEFLAGS=-DUNICODE -D_UNICODE
24
25LD=link
26
27!IFDEF SUPPORT_XP
28ADD_DEFINE=-D_USING_V110_SDK71_
29# Different subsystems for 32-bit and 64-bit Windows XP so detect based on Platform
30# environment vairable set by vcvars*.bat to be either x86 or x64
31!IF "$(PLATFORM)" == "x64"
32SUBSYSTEM=-SUBSYSTEM:WINDOWS,5.02
33!ELSE
34SUBSYSTEM=-SUBSYSTEM:WINDOWS,5.01
35!ENDIF
36!ELSEIFDEF ARM64
37ADD_DEFINE=-D_ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
38SUBSYSTEM=-SUBSYSTEM:WINDOWS,10.00
39!ENDIF
40
41CXXFLAGS=-Zi -TP -MP -W4 -EHsc -Zc:forScope -Zc:wchar_t -std:c++17 -D_CRT_SECURE_NO_DEPRECATE=1 -D_CRT_NONSTDC_NO_DEPRECATE $(WIDEFLAGS) $(ADD_DEFINE)
42CCFLAGS=-TC -MP -W3 -wd4244 -D_CRT_SECURE_NO_DEPRECATE=1 -DLUA_USER_H=\"scite_lua_win.h\" $(ADD_DEFINE)
43
44!IFDEF LOAD_SCINTILLA
45CXXFLAGS=$(CXXFLAGS) -DLOAD_SCINTILLA
46!ENDIF
47
48CXXDEBUG=-Od -MTd -DDEBUG
49# Don't use "-MD", even with "-D_STATIC_CPPLIB" because it links to MSVCR71.DLL
50CXXNDEBUG=-O1 -Oi -MT -DNDEBUG -GL
51NAME=-Fo
52LDFLAGS=-OPT:REF -LTCG -DEBUG $(SUBSYSTEM)
53LDDEBUG=
54LIBS=KERNEL32.lib USER32.lib GDI32.lib MSIMG32.lib COMDLG32.lib COMCTL32.lib ADVAPI32.lib IMM32.lib SHELL32.LIB OLE32.LIB OLEAUT32.LIB UXTHEME.LIB
55NOLOGO=-nologo
56
57!IFDEF QUIET
58CXX=@$(CXX)
59CXXFLAGS=$(CXXFLAGS) $(NOLOGO)
60CCFLAGS=$(CCFLAGS) $(NOLOGO)
61LDFLAGS=$(LDFLAGS) $(NOLOGO)
62!ENDIF
63
64!IFDEF DEBUG
65CXXFLAGS=$(CXXFLAGS) $(CXXDEBUG)
66CCFLAGS=$(CCFLAGS) $(CXXDEBUG)
67LDFLAGS=$(LDDEBUG) $(LDFLAGS)
68!ELSE
69CXXFLAGS=$(CXXFLAGS) $(CXXNDEBUG)
70CCFLAGS=$(CCFLAGS) $(CXXNDEBUG)
71!ENDIF
72
73INCLUDEDIRS=-I../../scintilla/include -I../src
74
75SHAREDOBJS=\
76	Cookie.obj \
77	Credits.obj \
78	DirectorExtension.obj \
79	EditorConfig.obj \
80	ExportHTML.obj \
81	ExportPDF.obj \
82	ExportRTF.obj \
83	ExportTEX.obj \
84	ExportXML.obj \
85	FilePath.obj \
86	FileWorker.obj \
87	GUIWin.obj \
88	IFaceTable.obj \
89	JobQueue.obj \
90	LexillaLibrary.obj \
91	MatchMarker.obj \
92	MultiplexExtension.obj \
93	PropSetFile.obj \
94	ScintillaCall.obj \
95	ScintillaWindow.obj \
96	SciTEBase.obj \
97	SciTEBuffers.obj \
98	SciTEIO.obj \
99	SciTEProps.obj \
100	SciTEWinBar.obj \
101	SciTEWinDlg.obj \
102	StringHelpers.obj \
103	StringList.obj \
104	Strips.obj \
105	StyleDefinition.obj \
106	StyleWriter.obj \
107	UniqueInstance.obj \
108	Utf8_16.obj
109
110OBJS=\
111	$(SHAREDOBJS) \
112	SciTEWin.obj
113
114LIBSCI=$(DIR_SCINTILLA_BIN)\libscintilla.lib
115LIBLEX=$(DIR_SCINTILLA_BIN)\liblexilla.lib
116
117OBJSSTATIC=$(SHAREDOBJS) Sc1.obj
118
119#++Autogenerated -- run ../scripts/RegenerateSource.py to regenerate
120#**LEXPROPS=\\\n\($(DIR_BIN)\\\* \)
121LEXPROPS=\
122$(DIR_BIN)\abaqus.properties $(DIR_BIN)\ada.properties \
123$(DIR_BIN)\asl.properties $(DIR_BIN)\asm.properties $(DIR_BIN)\asn1.properties \
124$(DIR_BIN)\au3.properties $(DIR_BIN)\ave.properties $(DIR_BIN)\avs.properties \
125$(DIR_BIN)\baan.properties $(DIR_BIN)\blitzbasic.properties \
126$(DIR_BIN)\bullant.properties $(DIR_BIN)\caml.properties \
127$(DIR_BIN)\cil.properties $(DIR_BIN)\cmake.properties \
128$(DIR_BIN)\cobol.properties $(DIR_BIN)\coffeescript.properties \
129$(DIR_BIN)\conf.properties $(DIR_BIN)\cpp.properties \
130$(DIR_BIN)\csound.properties $(DIR_BIN)\css.properties $(DIR_BIN)\d.properties \
131$(DIR_BIN)\dataflex.properties $(DIR_BIN)\ecl.properties \
132$(DIR_BIN)\eiffel.properties $(DIR_BIN)\erlang.properties \
133$(DIR_BIN)\escript.properties $(DIR_BIN)\flagship.properties \
134$(DIR_BIN)\forth.properties $(DIR_BIN)\fortran.properties \
135$(DIR_BIN)\freebasic.properties $(DIR_BIN)\gap.properties \
136$(DIR_BIN)\haskell.properties $(DIR_BIN)\hex.properties \
137$(DIR_BIN)\html.properties $(DIR_BIN)\inno.properties \
138$(DIR_BIN)\json.properties $(DIR_BIN)\kix.properties \
139$(DIR_BIN)\latex.properties $(DIR_BIN)\lisp.properties \
140$(DIR_BIN)\lot.properties $(DIR_BIN)\lout.properties $(DIR_BIN)\lua.properties \
141$(DIR_BIN)\markdown.properties $(DIR_BIN)\matlab.properties \
142$(DIR_BIN)\maxima.properties $(DIR_BIN)\metapost.properties \
143$(DIR_BIN)\mmixal.properties $(DIR_BIN)\modula3.properties \
144$(DIR_BIN)\nim.properties $(DIR_BIN)\nimrod.properties \
145$(DIR_BIN)\nncrontab.properties $(DIR_BIN)\nsis.properties \
146$(DIR_BIN)\opal.properties $(DIR_BIN)\oscript.properties \
147$(DIR_BIN)\others.properties $(DIR_BIN)\pascal.properties \
148$(DIR_BIN)\perl.properties $(DIR_BIN)\pov.properties \
149$(DIR_BIN)\powerpro.properties $(DIR_BIN)\powershell.properties \
150$(DIR_BIN)\ps.properties $(DIR_BIN)\purebasic.properties \
151$(DIR_BIN)\python.properties $(DIR_BIN)\r.properties \
152$(DIR_BIN)\raku.properties $(DIR_BIN)\rebol.properties \
153$(DIR_BIN)\registry.properties $(DIR_BIN)\ruby.properties \
154$(DIR_BIN)\rust.properties $(DIR_BIN)\scriptol.properties \
155$(DIR_BIN)\smalltalk.properties $(DIR_BIN)\sorcins.properties \
156$(DIR_BIN)\specman.properties $(DIR_BIN)\spice.properties \
157$(DIR_BIN)\sql.properties $(DIR_BIN)\tacl.properties $(DIR_BIN)\tal.properties \
158$(DIR_BIN)\tcl.properties $(DIR_BIN)\tex.properties \
159$(DIR_BIN)\txt2tags.properties $(DIR_BIN)\vb.properties \
160$(DIR_BIN)\verilog.properties $(DIR_BIN)\vhdl.properties \
161$(DIR_BIN)\visualprolog.properties $(DIR_BIN)\yaml.properties
162#--Autogenerated -- end of automatically generated section
163
164PROPS=$(DIR_BIN)\SciTEGlobal.properties $(DIR_BIN)\abbrev.properties $(LEXPROPS)
165
166!IFNDEF NO_LUA
167LUA_CORE_OBJS = lapi.obj lcode.obj lctype.obj ldebug.obj ldo.obj ldump.obj lfunc.obj lgc.obj llex.obj \
168                lmem.obj lobject.obj lopcodes.obj lparser.obj lstate.obj lstring.obj \
169                ltable.obj ltm.obj lundump.obj lvm.obj lzio.obj
170
171LUA_LIB_OBJS =	lauxlib.obj lbaselib.obj lbitlib.obj lcorolib.obj ldblib.obj liolib.obj lmathlib.obj ltablib.obj \
172                lstrlib.obj loadlib.obj loslib.obj linit.obj lutf8lib.obj
173
174LUA_OBJS = LuaExtension.obj $(LUA_CORE_OBJS) $(LUA_LIB_OBJS)
175
176OBJS = $(OBJS) $(LUA_OBJS)
177OBJSSTATIC = $(OBJSSTATIC) $(LUA_OBJS)
178INCLUDEDIRS = $(INCLUDEDIRS) -I../lua/src
179!ELSE
180CXXFLAGS=$(CXXFLAGS) -DNO_LUA
181!ENDIF
182
183CXXFLAGS=$(CXXFLAGS) $(INCLUDEDIRS)
184CCFLAGS=$(CCFLAGS) $(INCLUDEDIRS)
185
186
187ALL: $(PROG) $(PROGSTATIC) $(DLLS) $(PROPS)
188
189clean:
190	del /q $(DIR_BIN)\*.exe *.o *.obj $(DIR_BIN)\*.dll *.res *.map $(DIR_BIN)\*.exp $(DIR_BIN)\*.lib $(DIR_BIN)\*.pdb
191
192depend:
193	pyw AppDepGen.py
194
195{$(DIR_SCINTILLA_BIN)}.dll{$(DIR_BIN)}.dll:
196	copy $< $@
197
198{..\src}.properties{$(DIR_BIN)}.properties:
199	copy $< $@
200
201# A custom rule for .obj files built by scintilla:
202..\..\scintilla\win32\PlatWin.obj: 	..\..\scintilla\win32\PlatWin.cxx
203	@echo You must run the Scintilla makefile to build $*.obj
204	@exit 255
205
206SciTERes.res: SciTERes.rc ..\src\SciTE.h SciTE.exe.manifest
207	$(RC) $(INCLUDEDIRS) -fo$@ SciTERes.rc
208
209Sc1Res.res: SciTERes.rc ..\src\SciTE.h SciTE.exe.manifest
210	$(RC) $(INCLUDEDIRS) -dSTATIC_BUILD -fo$@ SciTERes.rc
211
212$(PROG): $(OBJS) SciTERes.res
213	$(LD) $(LDFLAGS) -OUT:$@ $** $(LIBS)
214
215$(PROGSTATIC): $(OBJSSTATIC) $(LIBSCI) $(LIBLEX) Sc1Res.res
216	$(LD) $(LDFLAGS) -OUT:$@ $** $(LIBS)
217
218# Define how to build all the objects and what they depend on
219# Some source files are compiled into more than one object because of different conditional compilation
220
221{..\src}.cxx.obj::
222	$(CXX) $(CXXFLAGS) -c $<
223{.}.cxx.obj::
224	$(CXX) $(CXXFLAGS) -c $<
225
226{..\lua\src}.c.obj::
227	$(CXX) $(CCFLAGS) -c $<
228
229Sc1.obj: SciTEWin.cxx
230	$(CXX) $(CXXFLAGS) -DSTATIC_BUILD -c $(NAME)$@ SciTEWin.cxx
231
232# Dependencies
233
234!IF EXISTS(nmdeps.mak)
235
236# Protect with !IF EXISTS to handle accidental deletion - just 'nmake -f scite.mak deps'
237
238!INCLUDE nmdeps.mak
239
240!ENDIF
241