xref: /minix/share/mk/bsd.lua.mk (revision 0a6a1f1d)
1#	$NetBSD: bsd.lua.mk,v 1.7 2014/07/19 18:38:34 lneto Exp $
2#
3# Build rules and definitions for Lua modules
4
5#
6# Variables used
7#
8# LUA_VERSION	currently installed version of Lua
9# LUA_LIBDIR	${LIBDIR}/lua/${LUA_VERSION}
10#
11# LUA_MODULES	list of Lua modules to build/installi
12# LUA_DPLIBS	shared library dependencies as per LIBDPLIBS
13#
14# LUA_SRCS.mod	sources for each module (by default: "${mod:S/./_/g}.lua")
15#
16# DPADD		additional dependencies for building modules
17# DPADD.mod	additional dependencies for a specific module
18#
19#
20# HAVE_LUAC	if defined, .lua source files will be compiled with ${LUAC}
21#		and installed as precompiled chunks for faster loading. Note
22#		that the luac file format is not yet standardised and may be
23#		subject to change.
24#
25# LUAC		the luac compiler (by default: /usr/bin/luac)
26#
27#
28# Notes:
29#
30# currently make(depend) and make(tags) do not support .lua sources; We
31# add Lua sources to DPSRCS when HAVE_LUAC is defined and other language
32# sources to SRCS for <bsd.dep.mk>.
33#
34# other language support for other than C is incomplete
35#
36# C language sources are passed though lint, when MKLINT != "no"
37#
38# The Lua binary searches /usr/share/lua/5.1/ at this time and we could
39# install .lua modules there which would mean slightly less duplication
40# in compat builds. However, MKSHARE=no would prevent such modules from
41# being installed so we just install everything under /usr/lib/lua/5.1/
42#
43
44.if !defined(_BSD_LUA_MK_)
45_BSD_LUA_MK_=1
46
47.include <bsd.init.mk>
48.include <bsd.shlib.mk>
49.include <bsd.gcc.mk>
50
51#__MINIX: Not always included
52.include <bsd.own.mk>
53.if defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
54LDFLAGS+= -L${DESTDIR}/usr/lib
55.endif # defined(__MINIX) && ${USE_BITCODE:Uno} == "yes"
56
57##
58##### Basic targets
59realinstall:	.PHONY lua-install
60realall:	.PHONY lua-all
61lint:		.PHONY lua-lint
62
63lua-install:	.PHONY
64
65lua-all:	.PHONY
66
67lua-lint:	.PHONY
68
69CLEANFILES+= a.out [Ee]rrs mklog core *.core
70
71##
72##### Global variables
73LUA_VERSION?=	5.3
74LUA_LIBDIR?=	${LIBDIR}/lua/${LUA_VERSION}
75LUAC?=		/usr/bin/luac
76
77##
78##### Build rules
79
80# XX should these always be on?
81CFLAGS+=	-fPIC
82
83.SUFFIXES:	.lua .luac
84.lua.luac:
85	${_MKTARGET_COMPILE}
86	${LUAC} -o ${.TARGET} ${.IMPSRC}
87
88##
89##### Libraries that modules may depend upon.
90.for _lib _dir in ${LUA_DPLIBS}
91.if !defined(LIBDO.${_lib})
92LIBDO.${_lib}!=	cd "${_dir}" && ${PRINTOBJDIR}
93.MAKEOVERRIDES+=LIBDO.${_lib}
94.endif
95LDADD+=-L${LIBDO.${_lib}} -l${_lib}
96DPADD+=${LIBDO.${_lib}}/lib${_lib}.so
97.endfor
98
99##
100##### Lua Modules
101.for _M in ${LUA_MODULES}
102LUA_SRCS.${_M}?=${_M:S/./_/g}.lua
103LUA_DEST.${_M}=${LUA_LIBDIR}${_M:S/./\//g:S/^/\//:H}
104
105.if !empty(LUA_SRCS.${_M}:M*.lua)
106.if ${LUA_SRCS.${_M}:[\#]} > 1
107.error Module "${_M}" has too many source files
108.endif
109.if defined(HAVE_LUAC)
110##
111## The module has Lua source and needs to be compiled
112LUA_TARG.${_M}=${_M:S/./_/g}.luac
113LUA_NAME.${_M}=${_M:S/./\//g:T}.luac
114CLEANFILES+=${LUA_TARG.${_M}}
115DPSRCS+=${LUA_SRCS.${_M}}
116
117.NOPATH:		${LUA_TARG.${_M}}
118lua-all:		${LUA_TARG.${_M}}
119${LUA_TARG.${_M}}:	${LUA_SRCS.${_M}} ${DPADD} ${DPADD.${_M}}
120.else
121##
122## The module has Lua source and can be installed directly
123LUA_TARG.${_M}=${LUA_SRCS.${_M}}
124LUA_NAME.${_M}=${_M:S/./\//g:T}.lua
125.endif
126.else
127##
128## The module has other language source and we must build ${_M}.so
129LUA_OBJS.${_M}=${LUA_SRCS.${_M}:N*.lua:R:S/$/.o/g}
130LUA_LOBJ.${_M}=${LUA_SRCS.${_M}:M*.c:.c=.ln}
131LUA_TARG.${_M}=${_M:S/./_/g}.so
132LUA_NAME.${_M}=${_M:S/./\//g:T}.so
133CLEANFILES+=${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}}
134DPSRCS+=${LUA_SRCS.${_M}}
135SRCS+=${LUA_SRCS.${_M}}
136
137.NOPATH:		${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}}
138.if ${MKLINT} != "no"
139${LUA_TARG.${_M}}:	${LUA_LOBJ.${_M}}
140.endif
141lua-lint:		${LUA_LOBJ.${_M}}
142lua-all:		${LUA_TARG.${_M}}
143${LUA_TARG.${_M}}:	${LUA_OBJS.${_M}} ${DPADD} ${DPADD.${_M}}
144	${_MKTARGET_BUILD}
145	rm -f ${.TARGET}
146	${CC} -Wl,--warn-shared-textrel \
147	    -Wl,-x -shared ${LUA_OBJS.${_M}} \
148	    -Wl,-soname,${LUA_NAME.${_M}} -o ${.TARGET} \
149	    ${LDADD} ${LDADD.${_M}} ${LDFLAGS} ${LDFLAGS.${_M}}
150
151.endif
152
153DPADD+=	${LIBLUA}
154LDADD+=	-llua
155
156##
157## module install rules
158lua-install:		${DESTDIR}${LUA_DEST.${_M}}/${LUA_NAME.${_M}}
159${DESTDIR}${LUA_DEST.${_M}}/${LUA_NAME.${_M}}! ${LUA_TARG.${_M}}
160	${_MKTARGET_INSTALL}
161	${INSTALL_FILE} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE}	\
162	    ${.ALLSRC} ${.TARGET}
163
164.endfor
165##
166##### end of modules
167
168.include <bsd.clean.mk>
169.include <bsd.dep.mk>
170.include <bsd.inc.mk>
171.include <bsd.obj.mk>
172.include <bsd.sys.mk>
173.endif	# ! defined(_BSD_LUA_MK_)
174