bsd.lua.mk revision 1.9 1 # $NetBSD: bsd.lua.mk,v 1.9 2023/04/16 20:46:17 nikita 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.4/ 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.4/
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 ##
52 ##### Basic targets
53 realinstall: .PHONY lua-install
54 realall: .PHONY lua-all
55 lint: .PHONY lua-lint
56
57 lua-install: .PHONY
58
59 lua-all: .PHONY
60
61 lua-lint: .PHONY
62
63 CLEANFILES+= a.out [Ee]rrs mklog core *.core
64
65 ##
66 ##### Global variables
67 LUA_VERSION?= 5.4
68 LUA_LIBDIR?= ${LIBDIR}/lua/${LUA_VERSION}
69 LUAC?= /usr/bin/luac
70
71 ##
72 ##### Build rules
73
74 # XX should these always be on?
75 CFLAGS+= -fPIC
76
77 .SUFFIXES: .lua .luac
78 .lua.luac:
79 ${_MKTARGET_COMPILE}
80 ${LUAC} -o ${.TARGET} ${.IMPSRC}
81
82 ##
83 ##### Libraries that modules may depend upon.
84 .for _lib _dir in ${LUA_DPLIBS}
85 .if !defined(LIBDO.${_lib})
86 LIBDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR}
87 .MAKEOVERRIDES+=LIBDO.${_lib}
88 .endif
89 LDADD+=-L${LIBDO.${_lib}} -l${_lib}
90 DPADD+=${LIBDO.${_lib}}/lib${_lib}.so
91 .endfor
92
93 ##
94 ##### Lua Modules
95 .for _M in ${LUA_MODULES}
96 LUA_SRCS.${_M}?=${_M:S/./_/g}.lua
97 LUA_DEST.${_M}=${LUA_LIBDIR}${_M:S/./\//g:S/^/\//:H}
98
99 .if !empty(LUA_SRCS.${_M}:M*.lua)
100 .if ${LUA_SRCS.${_M}:[\#]} > 1
101 .error Module "${_M}" has too many source files
102 .endif
103 .if defined(HAVE_LUAC)
104 ##
105 ## The module has Lua source and needs to be compiled
106 LUA_TARG.${_M}=${_M:S/./_/g}.luac
107 LUA_NAME.${_M}=${_M:S/./\//g:T}.luac
108 CLEANFILES+=${LUA_TARG.${_M}}
109 DPSRCS+=${LUA_SRCS.${_M}}
110
111 .NOPATH: ${LUA_TARG.${_M}}
112 lua-all: ${LUA_TARG.${_M}}
113 ${LUA_TARG.${_M}}: ${LUA_SRCS.${_M}} ${DPADD} ${DPADD.${_M}}
114 .else
115 ##
116 ## The module has Lua source and can be installed directly
117 LUA_TARG.${_M}=${LUA_SRCS.${_M}}
118 LUA_NAME.${_M}=${_M:S/./\//g:T}.lua
119 .endif
120 .else
121 ##
122 ## The module has other language source and we must build ${_M}.so
123 LUA_OBJS.${_M}=${LUA_SRCS.${_M}:N*.lua:R:S/$/.o/g}
124 LUA_LOBJ.${_M}=${LUA_SRCS.${_M}:M*.c:.c=.ln}
125 LUA_TARG.${_M}=${_M:S/./_/g}.so
126 LUA_NAME.${_M}=${_M:S/./\//g:T}.so
127 CLEANFILES+=${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}}
128 DPSRCS+=${LUA_SRCS.${_M}}
129 SRCS+=${LUA_SRCS.${_M}}
130
131 LUA_LDOPTS= -Wl,--warn-shared-textrel
132 .if ${MKSTRIPSYM:Uyes} == "yes"
133 LUA_LDOPTS+= -Wl,-x
134 .else
135 LUA_LDOPTS+= -Wl,-X
136 .endif
137
138 .NOPATH: ${LUA_OBJS.${_M}} ${LUA_LOBJ.${_M}} ${LUA_TARG.${_M}}
139 .if ${MKLINT} != "no"
140 ${LUA_TARG.${_M}}: ${LUA_LOBJ.${_M}}
141 .endif
142 lua-lint: ${LUA_LOBJ.${_M}}
143 lua-all: ${LUA_TARG.${_M}}
144 ${LUA_TARG.${_M}}: ${LUA_OBJS.${_M}} ${DPADD} ${DPADD.${_M}}
145 ${_MKTARGET_BUILD}
146 rm -f ${.TARGET}
147 ${CC} ${LUA_LDOPTS} -shared ${LUA_OBJS.${_M}} \
148 -Wl,-soname,${LUA_NAME.${_M}} -o ${.TARGET} \
149 ${LDADD} ${LDADD.${_M}} ${LDFLAGS} ${LDFLAGS.${_M}}
150
151 .endif
152
153 DPADD+= ${LIBLUA}
154 LDADD+= -llua
155
156 ##
157 ## module install rules
158 lua-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