libzel/Makefile
2021-08-21 10:11:35 -05:00

202 lines
6.0 KiB
Makefile

# Copyright (c) 2008, 2017 Stephen Checkoway
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
CPPFLAGS += -I. -Iinclude -fPIC
CFLAGS += -O3
package := zel
version := 0.1
distname := lib$(package)-$(version)
prefix := /usr/local
exec_prefix := $(prefix)
includedir := $(prefix)/include
datarootdir := $(prefix)/share
datadir := $(datarootdir)
docdir := $(datarootdir)/doc/$(package)
htmldir := $(docdir)
pdfdir := $(docdir)
libdir := $(exec_prefix)/lib
mandir := $(datarootdir)/man
man3dir := $(mandir)/man3
INSTALL := install
INSTALL_PROGRAM := $(INSTALL) -m 0755
INSTALL_DATA := $(INSTALL) -m 0644
spec := $(wildcard tables/*.spec)
itables := $(spec:.spec=.tab)
here := $(shell pwd)
dist_source := z80.c \
z80_instructions.c \
z80_types.h \
include/zel/z80.h \
include/zel/z80_instructions.h \
include/zel/z80_instruction_types.h \
tables/gen.pl \
$(spec) \
$(itables) \
Makefile \
Doxyfile \
LICENSE \
tests/Makefile \
$(wildcard tests/*.c) \
doc/$(distname).pdf
.PHONY: all check clean distclean mostlyclean maintainer-clean dist distcheck doc-clean \
install install-html install-pdf html pdf uninstall uninstall-doc install-doc installcheck
all: libzel.a libzel.so
libzel.a: z80.o z80_instructions.o
$(AR) -cr $@ $?
ranlib $@
libzel.so: z80.o z80_instructions.o
gcc -shared -o $@ $?
tables/%.tab: tables/%.spec tables/gen.pl
perl tables/gen.pl $< > $@
include/zel/z80_instruction_types.h: $(itables)
sed -e '1s,^,/* ,;2,$$s,^, * ,' LICENSE >$@
echo ' */' >>$@
echo >>$@
echo '/*! \\file' >>$@
echo ' *' >>$@
echo ' * z80 instruction types.' >>$@
echo ' * \\author Stephen Checkoway' >>$@
echo ' * \\version 0.1' >>$@
echo ' * \\date 2008, 2017' >>$@
echo ' */' >>$@
echo '#ifndef ZEL_Z80_INSTRUCTION_TYPES_H' >>$@
echo '#define ZEL_Z80_INSTRUCTION_TYPES_H' >>$@
echo >>$@
echo '#ifdef __cplusplus' >>$@
echo 'extern "C" {' >>$@
echo '#endif' >>$@
echo >>$@
echo 'typedef enum' >>$@
echo '{' >>$@
awk '{ split($$2,a,/_/); sub(/,/,"",a[1]); printf "\t%s //!< %s\n", $$2, tolower(a[1]) }' \
$(itables) |sort|uniq >>$@
echo '} InstructionType;' >>$@
echo >>$@
echo '#ifdef __cplusplus' >>$@
echo '}' >>$@
echo '#endif' >>$@
echo >>$@
echo '#endif' >>$@
z80.o: z80.c z80_types.h include/zel/z80.h include/zel/z80_instructions.h include/zel/z80_instruction_types.h
z80_instructions.o: z80_instructions.c z80_types.h include/zel/z80_instructions.h include/zel/z80.h include/zel/z80_instruction_types.h $(itables)
check: all
$(MAKE) -C tests check
installcheck:
$(MAKE) -C tests LDFLAGS='-L$(DESTDIR)$(libdir)' CPPFLAGS='-I$(DESTDIR)$(includedir)' check
doc-clean:
$(RM) -r doc
clean: doc-clean
$(MAKE) -C tests clean
$(RM) libzel.a z80.o z80_instructions.o *~
doc: Doxyfile $(wildcard include/zel/*.h) include/zel/z80_instruction_types.h
doxygen
pdf: doc/$(distname).pdf
doc/$(distname).pdf: doc
$(MAKE) -C doc/latex -j1
cp doc/latex/refman.pdf doc/$(distname).pdf
html: doc
man: doc
# XXX: Install the man pages once those get sorted out
install:
$(INSTALL) -d $(DESTDIR)$(libdir)
$(INSTALL_PROGRAM) libzel.a $(DESTDIR)$(libdir)
$(INSTALL_PROGRAM) libzel.so $(DESTDIR)$(libdir)
$(INSTALL) -d $(DESTDIR)$(includedir)/zel
$(INSTALL_DATA) include/zel/z80.h $(DESTDIR)$(includedir)/zel
$(INSTALL_DATA) include/zel/z80_instructions.h $(DESTDIR)$(includedir)/zel
$(INSTALL_DATA) include/zel/z80_instruction_types.h $(DESTDIR)$(includedir)/zel
uninstall: uninstall-doc
$(RM) $(DESTDIR)$(libdir)/libzel.a
$(RM) $(DESTDIR)$(includedir)/zel/z80.h
$(RM) $(DESTDIR)$(includedir)/zel/z80_instructions.h
$(RM) $(DESTDIR)$(includedir)/zel/z80_instruction_types.h
rmdir $(DESTDIR)$(includedir)/zel
install-doc: install-html install-pdf
uninstall-doc:
$(RM) -r $(DESTDIR)$(htmldir)/html
$(RM) $(DESTDIR)$(pdfdir)/$(distname).pdf
rmdir $(DESTDIR)$(htmldir)
if [ x$(DESTDIR)$(htmldir) != x$(DESTDIR)$(pdfdir) ]; then \
rmdir $(DESTDIR)$(pdfdir); \
fi
install-html:
$(INSTALL) -d $(DESTDIR)$(htmldir)/html
$(INSTALL_DATA) doc/html/* $(DESTDIR)$(htmldir)/html
install-pdf:
$(INSTALL) -d $(DESTDIR)$(pdfdir)
$(INSTALL_DATA) doc/$(distname).pdf $(DESTDIR)$(pdfdir)
dist: $(distname).tar.gz
$(distname).tar.gz: $(dist_source)
mkdir $(distname)
for i in $(dist_source); do \
d=`dirname $$i`; \
mkdir -p $(distname)/$$d; \
cp $$i $(distname)/$$i; \
done
cp -r doc/html $(distname)/doc
cp -r doc/man $(distname)/doc
tar zcf $(distname).tar.gz $(distname)
$(RM) -r $(distname)
distcheck: $(distname).tar.gz
tar zxf $(distname).tar.gz
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst check
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst doc
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst install
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst install-doc
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst installcheck
$(MAKE) -C $(distname) prefix=$(here)/$(distname)/_inst uninstall
$(RM) -r $(distname)
distclean: clean
mostlyclean: clean
maintainer-clean: clean
$(RM) include/zel/z80_instruction_types.h $(itables)