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