2 # Auto-configuring Makefile for the Netwide Assembler.
4 # The Netwide Assembler is copyright (C) 1996 Simon Tatham and
5 # Julian Hall. All rights reserved. The software is
6 # redistributable under the license given in the file "LICENSE"
7 # distributed in the NASM archive.
11 top_srcdir
= @top_srcdir@
16 exec_prefix = @
exec_prefix@
19 datarootdir
= @datarootdir@
24 BUILD_CFLAGS
= $(CPPFLAGS
) $(CFLAGS
) @DEFS@
25 INTERNAL_CFLAGS
= -I
$(srcdir) -I
$(objdir
) \
26 -I
$(srcdir)/include -I
$(objdir
)/include \
27 -I
$(srcdir)/x86
-I
$(objdir
)/x86 \
28 -I
$(srcdir)/asm
-I
$(objdir
)/asm \
29 -I
$(srcdir)/disasm
-I
$(objdir
)/disasm \
30 -I
$(srcdir)/output
-I
$(objdir
)/output
31 ALL_CFLAGS
= $(BUILD_CFLAGS
) $(INTERNAL_CFLAGS
)
40 PERLFLAGS
= -I
$(srcdir)/perllib
-I
$(srcdir)
41 RUNPERL
= $(PERL
) $(PERLFLAGS
)
44 INSTALL_PROGRAM
= @INSTALL_PROGRAM@
45 INSTALL_DATA
= @INSTALL_DATA@
66 CFLAGS
+= -DNASM_TRACE
70 .SUFFIXES
: .c .i .s .
$(O
) .
$(A
) $(X
) .1 .txt .xml
72 .PHONY
: all doc rdf
install clean distclean cleaner spotless install_rdf
test
73 .PHONY
: install_doc everything install_everything
strip perlreq
dist tags TAGS
77 $(CC
) -c
$(ALL_CFLAGS
) $(ALL_CFLAGS
) -o
$@
$<
80 $(CC
) -S
$(ALL_CFLAGS
) $(ALL_CFLAGS
) -o
$@
$<
83 $(CC
) -E
$(ALL_CFLAGS
) $(ALL_CFLAGS
) -o
$@
$<
86 $(ASCIIDOC
) -b docbook
-d manpage
-o
$@
$<
89 $(XMLTO
) man
--skip-validation
$< 2>/dev
/null
91 #-- Begin File Lists --#
93 NDISASM
= disasm
/ndisasm.
$(O
)
95 LIBOBJ
= stdlib
/snprintf.
$(O
) stdlib
/vsnprintf.
$(O
) stdlib
/strlcpy.
$(O
) \
98 nasmlib
/crc64.
$(O
) nasmlib
/malloc.
$(O
) \
99 nasmlib
/md5c.
$(O
) nasmlib
/string.
$(O
) \
100 nasmlib
/file.
$(O
) nasmlib
/mmap.
$(O
) nasmlib
/ilog2.
$(O
) \
101 nasmlib
/realpath.
$(O
) nasmlib
/path.
$(O
) \
102 nasmlib
/filename.
$(O
) nasmlib
/srcfile.
$(O
) \
103 nasmlib
/zerobuf.
$(O
) nasmlib
/readnum.
$(O
) nasmlib
/bsi.
$(O
) \
104 nasmlib
/rbtree.
$(O
) nasmlib
/hashtbl.
$(O
) \
105 nasmlib
/raa.
$(O
) nasmlib
/saa.
$(O
) \
106 nasmlib
/strlist.
$(O
) \
107 nasmlib
/perfhash.
$(O
) nasmlib
/badenum.
$(O
) \
109 x86
/insnsa.
$(O
) x86
/insnsb.
$(O
) x86
/insnsd.
$(O
) x86
/insnsn.
$(O
) \
110 x86
/regs.
$(O
) x86
/regvals.
$(O
) x86
/regflags.
$(O
) x86
/regdis.
$(O
) \
111 x86
/disp8.
$(O
) x86
/iflag.
$(O
) \
115 asm
/directiv.
$(O
) asm
/directbl.
$(O
) \
117 asm
/assemble.
$(O
) asm
/labels.
$(O
) asm
/parser.
$(O
) \
118 asm
/preproc.
$(O
) asm
/quote.
$(O
) asm
/pptok.
$(O
) \
119 asm
/listing.
$(O
) asm
/eval.
$(O
) asm
/exprlib.
$(O
) asm
/exprdump.
$(O
) \
121 asm
/strfunc.
$(O
) asm
/tokhash.
$(O
) \
123 asm
/preproc-nop.
$(O
) \
128 output
/outform.
$(O
) output
/outlib.
$(O
) output
/legacy.
$(O
) \
130 output
/nulldbg.
$(O
) output
/nullout.
$(O
) \
131 output
/outbin.
$(O
) output
/outaout.
$(O
) output
/outcoff.
$(O
) \
133 output
/outobj.
$(O
) output
/outas86.
$(O
) output
/outrdf2.
$(O
) \
134 output
/outdbg.
$(O
) output
/outieee.
$(O
) output
/outmacho.
$(O
) \
135 output
/codeview.
$(O
) \
137 disasm
/disasm.
$(O
) disasm
/sync.
$(O
)
139 SUBDIRS
= stdlib nasmlib output asm disasm x86 common macros
140 XSUBDIRS
= test doc nsis rdoff
141 DEPDIRS
= .
include config x86 rdoff
$(SUBDIRS
)
142 #-- End File Lists --#
144 all: nasm
$(X
) ndisasm
$(X
) rdf
146 NASMLIB
= libnasm.
$(A
)
148 $(NASMLIB
): $(LIBOBJ
)
150 $(AR
) cq
$(NASMLIB
) $(LIBOBJ
)
153 nasm
$(X
): $(NASM
) $(NASMLIB
)
154 $(CC
) $(ALL_CFLAGS
) $(LDFLAGS
) -o nasm
$(X
) $(NASM
) $(NASMLIB
) $(LIBS
)
156 ndisasm
$(X
): $(NDISASM
) $(NASMLIB
)
157 $(CC
) $(ALL_CFLAGS
) $(LDFLAGS
) -o ndisasm
$(X
) $(NDISASM
) $(NASMLIB
) $(LIBS
)
159 #-- Begin Generated File Rules --#
161 # These source files are automagically generated from data files using
162 # Perl scripts. They're distributed, though, so it isn't necessary to
163 # have Perl just to recompile NASM from the distribution.
165 # Perl-generated source files
166 PERLREQ
= x86
/insnsb.c x86
/insnsa.c x86
/insnsd.c x86
/insnsi.h x86
/insnsn.c \
167 x86
/regs.c x86
/regs.h x86
/regflags.c x86
/regdis.c x86
/regdis.h \
168 x86
/regvals.c asm
/tokhash.c asm
/tokens.h asm
/pptok.h asm
/pptok.c \
169 x86
/iflag.c x86
/iflaggen.h \
171 asm
/pptok.ph asm
/directbl.c asm
/directiv.h \
172 version.h version.mac version.mak nsis
/version.nsh
174 INSDEP
= x86
/insns.dat x86
/insns.pl x86
/insns-iflags.ph
176 x86
/iflag.c
: $(INSDEP
)
177 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-fc \
178 $(srcdir)/x86
/insns.dat x86
/iflag.c
179 x86
/iflaggen.h
: $(INSDEP
)
180 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-fh \
181 $(srcdir)/x86
/insns.dat x86
/iflaggen.h
182 x86
/insnsb.c
: $(INSDEP
)
183 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-b \
184 $(srcdir)/x86
/insns.dat x86
/insnsb.c
185 x86
/insnsa.c
: $(INSDEP
)
186 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-a \
187 $(srcdir)/x86
/insns.dat x86
/insnsa.c
188 x86
/insnsd.c
: $(INSDEP
)
189 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-d \
190 $(srcdir)/x86
/insns.dat x86
/insnsd.c
191 x86
/insnsi.h
: $(INSDEP
)
192 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-i \
193 $(srcdir)/x86
/insns.dat x86
/insnsi.h
194 x86
/insnsn.c
: $(INSDEP
)
195 $(RUNPERL
) $(srcdir)/x86
/insns.pl
-n \
196 $(srcdir)/x86
/insns.dat x86
/insnsn.c
198 # These files contains all the standard macros that are derived from
199 # the version number.
200 version.h
: version version.pl
201 $(RUNPERL
) $(srcdir)/version.pl h
< $(srcdir)/version
> version.h
202 version.mac
: version version.pl
203 $(RUNPERL
) $(srcdir)/version.pl mac
< $(srcdir)/version
> version.mac
204 version.sed
: version version.pl
205 $(RUNPERL
) $(srcdir)/version.pl sed
< $(srcdir)/version
> version.sed
206 version.mak
: version version.pl
207 $(RUNPERL
) $(srcdir)/version.pl make
< $(srcdir)/version
> version.mak
208 nsis
/version.nsh
: version version.pl
209 $(RUNPERL
) $(srcdir)/version.pl nsis
< $(srcdir)/version
> nsis
/version.nsh
211 # This source file is generated from the standard macros file
212 # `standard.mac' by another Perl script. Again, it's part of the
213 # standard distribution.
214 macros
/macros.c
: macros
/macros.pl asm
/pptok.ph version.mac \
215 $(srcdir)/macros
/*.mac
$(srcdir)/output
/*.mac
216 $(RUNPERL
) $(srcdir)/macros
/macros.pl version.mac \
217 $(srcdir)/macros
/*.mac
$(srcdir)/output
/*.mac
219 # These source files are generated from regs.dat by yet another
221 x86
/regs.c
: x86
/regs.dat x86
/regs.pl
222 $(RUNPERL
) $(srcdir)/x86
/regs.pl c \
223 $(srcdir)/x86
/regs.dat
> x86
/regs.c
224 x86
/regflags.c
: x86
/regs.dat x86
/regs.pl
225 $(RUNPERL
) $(srcdir)/x86
/regs.pl
fc \
226 $(srcdir)/x86
/regs.dat
> x86
/regflags.c
227 x86
/regdis.c
: x86
/regs.dat x86
/regs.pl
228 $(RUNPERL
) $(srcdir)/x86
/regs.pl dc \
229 $(srcdir)/x86
/regs.dat
> x86
/regdis.c
230 x86
/regdis.h
: x86
/regs.dat x86
/regs.pl
231 $(RUNPERL
) $(srcdir)/x86
/regs.pl dh \
232 $(srcdir)/x86
/regs.dat
> x86
/regdis.h
233 x86
/regvals.c
: x86
/regs.dat x86
/regs.pl
234 $(RUNPERL
) $(srcdir)/x86
/regs.pl vc \
235 $(srcdir)/x86
/regs.dat
> x86
/regvals.c
236 x86
/regs.h
: x86
/regs.dat x86
/regs.pl
237 $(RUNPERL
) $(srcdir)/x86
/regs.pl h \
238 $(srcdir)/x86
/regs.dat
> x86
/regs.h
240 # Assembler token hash
241 asm
/tokhash.c
: x86
/insns.dat x86
/regs.dat asm
/tokens.dat asm
/tokhash.pl \
243 $(RUNPERL
) $(srcdir)/asm
/tokhash.pl c \
244 $(srcdir)/x86
/insns.dat
$(srcdir)/x86
/regs.dat \
245 $(srcdir)/asm
/tokens.dat
> asm
/tokhash.c
247 # Assembler token metadata
248 asm
/tokens.h
: x86
/insns.dat x86
/regs.dat asm
/tokens.dat asm
/tokhash.pl \
250 $(RUNPERL
) $(srcdir)/asm
/tokhash.pl h \
251 $(srcdir)/x86
/insns.dat
$(srcdir)/x86
/regs.dat \
252 $(srcdir)/asm
/tokens.dat
> asm
/tokens.h
254 # Preprocessor token hash
255 asm
/pptok.h
: asm
/pptok.dat asm
/pptok.pl perllib
/phash.ph
256 $(RUNPERL
) $(srcdir)/asm
/pptok.pl h \
257 $(srcdir)/asm
/pptok.dat asm
/pptok.h
258 asm
/pptok.c
: asm
/pptok.dat asm
/pptok.pl perllib
/phash.ph
259 $(RUNPERL
) $(srcdir)/asm
/pptok.pl c \
260 $(srcdir)/asm
/pptok.dat asm
/pptok.c
261 asm
/pptok.ph
: asm
/pptok.dat asm
/pptok.pl perllib
/phash.ph
262 $(RUNPERL
) $(srcdir)/asm
/pptok.pl ph \
263 $(srcdir)/asm
/pptok.dat asm
/pptok.ph
266 asm
/directiv.h
: asm
/directiv.dat nasmlib
/perfhash.pl perllib
/phash.ph
267 $(RUNPERL
) $(srcdir)/nasmlib
/perfhash.pl h \
268 $(srcdir)/asm
/directiv.dat asm
/directiv.h
269 asm
/directbl.c
: asm
/directiv.dat nasmlib
/perfhash.pl perllib
/phash.ph
270 $(RUNPERL
) $(srcdir)/nasmlib
/perfhash.pl c \
271 $(srcdir)/asm
/directiv.dat asm
/directbl.c
273 #-- End Generated File Rules --#
277 #-- Begin RDOFF Shared Rules --#
279 RDFLIBOBJ
= rdoff
/rdoff.
$(O
) rdoff
/rdfload.
$(O
) rdoff
/symtab.
$(O
) \
280 rdoff
/collectn.
$(O
) rdoff
/rdlib.
$(O
) rdoff
/segtab.
$(O
) \
283 RDFPROGS
= rdoff
/rdfdump
$(X
) rdoff
/ldrdf
$(X
) rdoff
/rdx
$(X
) rdoff
/rdflib
$(X
) \
285 RDF2BINLINKS
= rdoff
/rdf2com
$(X
) rdoff
/rdf2ith
$(X
) \
286 rdoff
/rdf2ihx
$(X
) rdoff
/rdf2srec
$(X
)
288 RDFLIB
= rdoff
/librdoff.
$(A
)
289 RDFLIBS
= $(RDFLIB
) $(NASMLIB
)
291 # This rule is only used for rdoff, to allow common rules
292 MAKERDF
= $(CC
) $(ALL_CFLAGS
) $(LDFLAGS
) -o
$@
$< $(RDFLIB
) $(NASMLIB
) $(LIBS
)
294 rdoff
/rdfdump
$(X
): rdoff
/rdfdump.
$(O
) $(RDFLIBS
)
296 rdoff
/ldrdf
$(X
): rdoff
/ldrdf.
$(O
) $(RDFLIBS
)
298 rdoff
/rdx
$(X
): rdoff
/rdx.
$(O
) $(RDFLIBS
)
300 rdoff
/rdflib
$(X
): rdoff
/rdflib.
$(O
) $(RDFLIBS
)
302 rdoff
/rdf2bin
$(X
): rdoff
/rdf2bin.
$(O
) $(RDFLIBS
)
304 rdoff
/rdf2com
$(X
): rdoff
/rdf2bin
$(X
)
305 $(RM_F
) rdoff
/rdf2com
$(X
)
306 cd rdoff
&& $(LN_S
) rdf2bin
$(X
) rdf2com
$(X
)
307 rdoff
/rdf2ith
$(X
): rdoff
/rdf2bin
$(X
)
308 $(RM_F
) rdoff
/rdf2ith
$(X
)
309 cd rdoff
&& $(LN_S
) rdf2bin
$(X
) rdf2ith
$(X
)
310 rdoff
/rdf2ihx
$(X
): rdoff
/rdf2bin
$(X
)
311 $(RM_F
) rdoff
/rdf2ihx
$(X
)
312 cd rdoff
&& $(LN_S
) rdf2bin
$(X
) rdf2ihx
$(X
)
313 rdoff
/rdf2srec
$(X
): rdoff
/rdf2bin
$(X
)
314 $(RM_F
) rdoff
/rdf2srec
$(X
)
315 cd rdoff
&& $(LN_S
) rdf2bin
$(X
) rdf2srec
$(X
)
317 #-- End RDOFF Shared Rules --#
319 rdf
: $(RDFPROGS
) $(RDF2BINLINKS
)
321 $(RDFLIB
): $(RDFLIBOBJ
)
323 $(AR
) cq
$(RDFLIB
) $(RDFLIBOBJ
)
326 #-- Begin NSIS Rules --#
328 # NSIS is not built except by explicit request, as it only applies to
330 nsis
/arch.nsh
: nsis
/getpearch.pl nasm
$(X
)
331 $(PERL
) $(srcdir)/nsis
/getpearch.pl nasm
$(X
) > nsis
/arch.nsh
333 # Should only be done after "make everything".
334 # The use of redirection here keeps makensis from moving the cwd to the
336 nsis
: nsis
/nasm.nsi nsis
/arch.nsh nsis
/version.nsh
337 $(MAKENSIS
) -Dsrcdir
="$(srcdir)" -Dobjdir
="$(objdir)" - < nsis
/nasm.nsi
339 #-- End NSIS Rules --#
341 # Generated manpages, also pregenerated for distribution
342 manpages
: nasm
.1 ndisasm
.1
344 install: nasm
$(X
) ndisasm
$(X
)
345 $(MKDIR
) -p
$(DESTDIR
)$(bindir)
346 $(INSTALL_PROGRAM
) nasm
$(X
) $(DESTDIR
)$(bindir)/nasm
$(X
)
347 $(INSTALL_PROGRAM
) ndisasm
$(X
) $(DESTDIR
)$(bindir)/ndisasm
$(X
)
348 $(MKDIR
) -p
$(DESTDIR
)$(mandir)/man1
349 $(INSTALL_DATA
) $(srcdir)/nasm
.1 $(DESTDIR
)$(mandir)/man1
/nasm
.1
350 $(INSTALL_DATA
) $(srcdir)/ndisasm
.1 $(DESTDIR
)$(mandir)/man1
/ndisasm
.1
353 for d in .
$(SUBDIRS
) $(XSUBDIRS
); do \
354 $(RM_F
) "$$d"/*.
$(O
) "$$d"/*.s
"$$d"/*.i
"$$d"/*.
$(A
) ; \
356 $(RM_F
) nasm
$(X
) ndisasm
$(X
)
357 $(RM_F
) nasm-
*-installer-
*.exe
359 $(RM_F
) nsis
/arch.nsh
361 $(RM_F
) $(RDFPROGS
) $(RDF2BINLINKS
)
364 $(RM_F
) config.log config.status config
/config.h
365 for d in .
$(SUBDIRS
) $(XSUBDIRS
); do \
366 $(RM_F
) "$$d"/*~
"$$d"/*.bak
"$$d"/*.lst
"$$d"/*.bin
; \
369 $(RM_RF
) autom4te
*.cache
370 $(RM_F
) Makefile
*.dep
373 $(RM_F
) $(PERLREQ
) *.1 nasm.spec
377 spotless
: distclean cleaner
381 $(STRIP
) --strip-unneeded nasm
$(X
) ndisasm
$(X
)
385 $(FIND
) .
-name
'*.[hcS]' -print | xargs etags
-a
389 $(FIND
) .
-name
'*.[hcS]' -print | xargs ctags
-a
392 $(RM_F
) cscope.out cscope.files
393 $(FIND
) .
-name
'*.[hcS]' -print > cscope.files
394 cscope
-b
-f cscope.out
396 rdf_install install_rdf install_rdoff
:
397 $(MKDIR
) -p
$(DESTDIR
)$(bindir)
398 for f in
$(RDFPROGS
); do \
399 $(INSTALL_PROGRAM
) "$$f" '$(DESTDIR)$(bindir)'/ ; \
401 cd
'$(DESTDIR)$(bindir)' && \
402 for f in
$(RDF2BINLINKS
); do \
403 bn
=`basename "$$f"` && $(RM_F
) "$$bn" && \
404 $(LN_S
) rdf2bin
$(X
) "$$bn" ; \
406 $(MKDIR
) -p
$(DESTDIR
)$(mandir)/man1
407 $(INSTALL_DATA
) $(srcdir)/rdoff
/*.1 $(DESTDIR
)$(mandir)/man1
/
412 doc_install install_doc
:
413 $(MAKE
) -C doc
install
415 everything
: all manpages doc rdf
417 install_everything
: everything
install install_doc install_rdf
421 $(MAKE
) spotless perlreq manpages spec
424 $(RM_RF
) .
/autom4te
*.cache
427 tar -cvj
--exclude CVS
-C ..
-f ..
/nasm-
`cat version`-`date +%Y%m%d`.
tar.bz2
`basename \`pwd\
``
431 ALLPERLSRC
:= $(shell find
$(srcdir) -type f
-name
'*.p[lh]')
433 perlbreq.si
: $(ALLPERLSRC
)
434 sed
-n
-r
-e
's/^[[:space:]]*use[[:space:]]+([^[:space:];]+).*$$/BuildRequires: perl(\1)/p' $(ALLPERLSRC
) | \
435 sed
-r
-e
'/perl\((strict|warnings|Win32.*)\)/d' | \
436 sort | uniq
> perlbreq.si ||
( rm -f perlbreq.si
; false
)
438 nasm.spec
: nasm.spec.in nasm.spec.sed version.sed perlbreq.si
439 sed
-f version.sed
-f nasm.spec.sed \
440 < nasm.spec.in
> nasm.spec ||
( rm -f nasm.spec
; false
)
446 cd
test && $(RUNPERL
) performtest.pl
--nasm
=..
/nasm
*.asm
449 cd
test && $(RUNPERL
) performtest.pl
--golden
--nasm
=..
/nasm
*.asm
452 # Rules to re-run autoconf if necessary
454 config
/config.h.in
: configure.ac
457 configure
: configure.ac config
/config.h.in
460 config.status
: configure Makefile.in doc
/Makefile.in config
/config.h.in
461 sh config.status
--recheck
463 Makefile
: config.status
465 doc
/Makefile
: config.status
467 config
/config.h
: config.status
470 # Does this version of this file have external dependencies? This definition
471 # will be automatically updated by mkdep.pl as needed.
473 EXTERNAL_DEPENDENCIES
= 1
476 # Generate dependency information for this Makefile only.
477 # If this Makefile has external dependency information, then
478 # the dependency information will remain external, so it doesn't
479 # pollute the git logs.
481 Makefile.dep
: $(PERLREQ
) tools
/mkdep.pl config.status
482 $(RUNPERL
) tools
/mkdep.pl
-M Makefile.in
-- $(DEPDIRS
)
488 # This build dependencies in *ALL* makefiles, and forces all
489 # dependencies to be inserted inline. For that reason, it should only
490 # be invoked manually or via "make dist". It should be run before
491 # creating release archives.
493 alldeps
: $(PERLREQ
) tools
/syncfiles.pl tools
/mkdep.pl
494 $(RUNPERL
) tools
/syncfiles.pl Makefile.in Mkfiles
/*.mak
495 $(RUNPERL
) tools
/mkdep.pl
-i
-M Makefile.in Mkfiles
/*.mak
-- \
498 if
[ -f config.status
]; then \
499 if
[ $(EXTERNAL_DEPENDENCIES
) -eq
1 ]; then \
500 .
/config.status
--recheck
; \
506 # Strip internal dependency information from all Makefiles; this makes
507 # the output good for git checkin
508 cleandeps
: $(PERLREQ
) qtools
/syncfiles.pl tools
/mkdep.pl
509 $(RUNPERL
) tools
/syncfiles.pl Makefile.in Mkfiles
/*.mak
510 $(RUNPERL
) tools
/mkdep.pl
-e
-M Makefile.in Mkfiles
/*.mak
-- \
513 if
[ -f config.status
]; then \
514 if
[ $(EXTERNAL_DEPENDENCIES
) -eq
0 ]; then \
515 .
/config.status
--recheck
; \
521 #-- Magic hints to mkdep.pl --#
522 # @object-ending: ".$(O)"
523 # @path-separator: "/"
524 # @external: "Makefile.dep"
525 # @include-command: "-include"
527 #-- Everything below is generated by mkdep.pl - do not edit --#
528 -include Makefile.dep