updated on Fri Jan 6 00:09:29 UTC 2012
[aur-mirror.git] / emc2 / Makefile
blob24deb5b772926884df5ec2e361ee7794cc7f223e
1 # Delete the default suffix rules
2 .SUFFIXES:
3 .PHONY: default userspace modules clean modclean depclean install python pythonclean
5 # A "trivial build" is one which should not include dependency information
6 # either because it should be usable before dependency information can be
7 # generated or when it is invalid (clean, docclean) or when running as root
8 # when the user must guarantee in advance that everything is built
9 # (setuid, install)
10 ifeq ($(MAKECMDGOALS),)
11 TRIVIAL_BUILD=no
12 else
13 ifeq ($(filter-out docclean clean setuid install tags swish,$(MAKECMDGOALS)),)
14 TRIVIAL_BUILD=yes
15 else
16 TRIVIAL_BUILD=no
17 endif
18 endif
20 ifeq "$(findstring s,$(MAKEFLAGS))" ""
21 ECHO=@echo
22 VECHO=echo
23 else
24 ECHO=@true
25 VECHO=true
26 endif
28 ifeq ($(BASEPWD),)
29 BASEPWD := $(shell pwd)
30 export BASEPWD
31 include Makefile.inc
32 ifeq ($(origin PYTHONPATH),undefined)
33 PYTHONPATH:=$(EMC2_HOME)/lib/python
34 else
35 PYTHONPATH:=$(EMC2_HOME)/lib/python:$(PYTHONPATH)
36 endif
37 export PYTHONPATH
38 else
39 include $(BASEPWD)/Makefile.inc
40 endif
41 ifeq ($(RTPREFIX),)
42 $(error Makefile.inc must specify RTPREFIX and other variables)
43 endif
45 DEP = $(1) -MM -MG -MT "$(2)" $(4) -o $(3).tmp && mv -f "$(3)".tmp "$(3)"
47 cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
48 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
50 ifeq ($(KERNELRELEASE),)
51 # When KERNELRELEASE is not defined, this is the userspace build.
52 # The "modules" target is the gateway to the kernel module build.
53 default: configs userspace modules
54 ifeq ($(RUN_IN_PLACE),yes)
55 ifneq ($(BUILD_SYS),sim)
56 @if [ -f ../bin/emc_module_helper ]; then if ! [ `stat -c %u ../bin/emc_module_helper` -eq 0 -a -u ../bin/emc_module_helper ]; then $(VECHO) "You now need to run 'sudo make setuid' in order to run in place."; fi; fi
57 endif
58 endif
61 # list of supported hostmot2 boards
62 HM2_BOARDS = 3x20 4i65 4i68 5i20 5i22 5i23 7i43
64 # Print 'entering' all the time
65 MAKEFLAGS += w
67 # Create the variables with := so that subsequent += alterations keep it
68 # as a "substitute at assignment time" variable
69 TARGETS :=
70 PYTARGETS :=
72 # Submakefiles from each of these directories will be included if they exist
73 SUBDIRS := \
74 libnml/linklist libnml/cms libnml/rcs libnml/inifile libnml/os_intf \
75 libnml/nml libnml/buffer libnml/posemath libnml \
77 rtapi/examples/timer rtapi/examples/semaphore rtapi/examples/shmem \
78 rtapi/examples/extint rtapi/examples/fifo rtapi/examples rtapi \
80 hal/components hal/drivers hal/user_comps/devices \
81 hal/user_comps hal/user_comps/vismach hal/classicladder hal/utils hal \
83 emc/usr_intf/axis emc/usr_intf/touchy emc/usr_intf/stepconf emc/usr_intf/pncconf \
84 emc/usr_intf emc/nml_intf emc/task emc/iotask emc/kinematics emc/canterp \
85 emc/motion emc/ini emc/rs274ngc emc/sai emc \
87 module_helper \
89 po \
91 ../docs/src
93 ULAPISRCS := rtapi/$(RTPREFIX)_ulapi.c
95 # Each item in INCLUDES is transformed into a -I directive later on
96 # The top directory is always included
97 INCLUDES := .
99 USERSRCS :=
100 PROGRAMS :=
102 # When used like $(call TOxxx, ...) these turn a list of source files
103 # into the corresponding list of object files, dependency files,
104 # or both. When a source file has to be compiled with special flags,
105 # TOOBJSDEPS is used. See Submakefile.skel for an example.
106 TOOBJS = $(patsubst %.cc,objects/%.o,$(patsubst %.c,objects/%.o,$(1)))
107 TODEPS = $(patsubst %.cc,depends/%.d,$(patsubst %.c,depends/%.d,$(1)))
108 TOOBJSDEPS = $(call TOOBJS,$(1)) $(call TODEPS,$(1) $(patsubst %.cc,%.i,$(patsubst %.c,%.i,$(1))))
110 SUBMAKEFILES := $(patsubst %,%/Submakefile,$(SUBDIRS))
111 -include $(wildcard $(SUBMAKEFILES))
113 # This checks that all the things listed in USERSRCS are either C files
114 # or C++ files
115 ASSERT_EMPTY = $(if $(1), $(error "Should be empty but is not: $(1)"))
116 $(call ASSERT_EMPTY,$(filter-out %.c %.cc, $(USERSRCS)))
117 $(call ASSERT_EMPTY,$(filter-out %.c, $(RTSRCS)))
119 ifeq ($(BUILD_PYTHON),yes)
120 $(call TOOBJSDEPS,$(PYSRCS)) : EXTRAFLAGS += -fPIC
121 USERSRCS += $(PYSRCS)
122 endif
124 # Find the list of object files for each type of source file
125 CUSERSRCS := $(filter %.c,$(USERSRCS))
126 CXXUSERSRCS := $(filter %.cc,$(USERSRCS))
127 CUSEROBJS := $(call TOOBJS,$(CUSERSRCS))
128 CXXUSEROBJS += $(call TOOBJS,$(CXXUSERSRCS))
130 ifeq ($(TRIVIAL_BUILD),no)
131 # Find the dependency filenames, then include them all
132 DEPS := $(sort $(patsubst objects/%.o,depends/%.d,$(CUSEROBJS) $(CXXUSEROBJS)))
133 -include $(DEPS)
134 Makefile: $(DEPS)
135 endif
137 # Each directory in $(INCLUDES) is passed as a -I directory when compiling.
138 INCLUDE := $(patsubst %,-I%, $(INCLUDES)) -I$(RTDIR)/include
140 ifneq ($(KERNELDIR),)
141 INCLUDE += -I$(KERNELDIR)/include
142 endif
144 ifeq ($(BUILD_PYTHON),yes)
145 INCLUDE += -I$(INCLUDEPY)
146 endif
148 # Compilation options. Perhaps some of these should come from Makefile.inc?
149 OPT := -O2 $(call cc-option,-fno-strict-aliasing) $(call cc-option,-fno-stack-protector)
150 # NOTE: Wwrite-strings is supposed to be OFF unless explicitly requested, even with -Wall,
151 # since it produces a mess of warnings on any code that doesn't use "const" fastidiously
152 # There is a bug in some versions of gcc that turns it on.
153 # ( see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=442950 )
154 # So we explicitly turn it off here, to avoid a flood of meaningless warnings that
155 # might be hiding a few real ones.
156 DEBUG := -g -Wall $(call cc-option,-Wno-write-strings)
157 CFLAGS := $(INCLUDE) -O0 $(DEBUG) -DULAPI $(call cc-option, -Wdeclaration-after-statement) $(BITOPS_DEFINE)
158 CXXFLAGS := $(INCLUDE) -O0 $(DEBUG) -DULAPI $(BITOPS_DEFINE)
160 ifeq ($(RUN_IN_PLACE),yes)
161 LDFLAGS := -L$(LIB_DIR) -Wl,-rpath,$(LIB_DIR)
162 else
163 LDFLAGS := -L$(LIB_DIR) -Wl,-rpath,$(libdir)
164 endif
166 # Rules to make .d (dependency) files.
167 $(sort $(call TODEPS, $(filter %.cc,$(USERSRCS)))): depends/%.d: %.cc
168 @mkdir -p $(dir $@)
169 $(ECHO) Depending $<
170 @$(call DEP,$(CXX),$@ $(patsubst depends/%.d,objects/%.o,$@),$@,$(CXXFLAGS) $(EXTRAFLAGS) $<)
172 $(sort $(call TODEPS, $(filter %.c,$(USERSRCS)))): depends/%.d: %.c
173 @mkdir -p $(dir $@)
174 $(ECHO) Depending $<
175 @$(call DEP,$(CC),$@ $(patsubst depends/%.d,objects/%.o,$@),$@,$(CFLAGS) $(EXTRAFLAGS) $<)
177 # Rules to make .o (object) files
178 $(sort $(CUSEROBJS)) : objects/%.o: %.c
179 $(ECHO) Compiling $<
180 @mkdir -p $(dir $@)
181 @$(CC) -c $(CFLAGS) $(EXTRAFLAGS) $< -o $@
183 $(sort $(CXXUSEROBJS)) : objects/%.o: %.cc
184 $(ECHO) Compiling $<
185 @mkdir -p $(dir $@)
186 @$(CXX) -c $(CXXFLAGS) $(EXTRAFLAGS) $< -o $@
188 # Rules to make .i (preprocessed) files
189 $(sort $(patsubst %.c,%.i,$(CUSERSRCS))): %.i: %.c
190 @echo Preprocessing $< to $@
191 @$(CC) -dD $(CFLAGS) $(EXTRAFLAGS) -E $< -o $@
193 $(sort $(patsubst %.cc,%.ii,$(CXXUSERSRCS))): %.ii: %.cc
194 @echo Preprocessing $< to $@
195 @$(CXX) -dD $(CXXFLAGS) $(EXTRAFLAGS) -E $< -o $@
197 ifeq ($(TRIVIAL_BUILD),no)
198 configure: configure.in
199 AUTOGEN_TARGET=configure ./autogen.sh
201 config.h.in: configure.in
202 AUTOGEN_TARGET=config.h.in ./autogen.sh
204 config.status: configure
205 if [ -f config.status ]; then ./config.status --recheck; else \
206 echo 1>&2 "*** emc2 is not configured. Run './configure' with appropriate flags."; \
207 exit 1; \
209 endif
211 config.h: config.h.in config.status
212 @./config.status -q --header=$@
214 INFILES = \
215 ../docs/man/man1/emc.1 ../scripts/emc ../scripts/realtime \
216 ../scripts/haltcl ../scripts/rtapi.conf Makefile.inc Makefile.modinc \
217 ../tcl/emc.tcl ../scripts/halrun ../scripts/emc-environment \
218 ../scripts/emcmkdesktop ../lib/python/nf.py \
219 ../share/desktop-directories/cnc.directory ../share/menus/CNC.menu \
220 ../share/applications/emc.desktop \
221 ../share/applications/emc-latency.desktop
223 $(INFILES): %: %.in config.status
224 @./config.status --file=$@
226 default: $(INFILES)
228 # For each file to be copied to ../include, its location in the source tree
229 # is listed here. Note that due to $(INCLUDE), defined above, the include
230 # files in the source tree are the ones used when building emc2. The copy
231 # in ../include is used when building external components of emc2.
232 HEADERS := \
233 config.h \
234 emc/ini/emcIniFile.hh \
235 emc/ini/iniaxis.hh \
236 emc/ini/initool.hh \
237 emc/ini/initraj.hh \
238 emc/kinematics/cubic.h \
239 emc/kinematics/kinematics.h \
240 emc/kinematics/genhexkins.h \
241 emc/kinematics/genserkins.h \
242 emc/kinematics/pumakins.h \
243 emc/kinematics/tc.h \
244 emc/kinematics/tp.h \
245 emc/motion/emcmotcfg.h \
246 emc/motion/emcmotglb.h \
247 emc/motion/motion.h \
248 emc/motion/usrmotintf.h \
249 emc/nml_intf/canon.hh \
250 emc/nml_intf/emctool.h \
251 emc/nml_intf/emc.hh \
252 emc/nml_intf/emc_nml.hh \
253 emc/nml_intf/emccfg.h \
254 emc/nml_intf/emcglb.h \
255 emc/nml_intf/emcpos.h \
256 emc/nml_intf/interp.hh \
257 emc/nml_intf/interp_return.hh \
258 emc/nml_intf/interpl.hh \
259 emc/nml_intf/motion_types.h \
260 emc/rs274ngc/interp_internal.hh \
261 emc/rs274ngc/rs274ngc.hh \
262 hal/hal.h \
263 libnml/buffer/locmem.hh \
264 libnml/buffer/memsem.hh \
265 libnml/buffer/phantom.hh \
266 libnml/buffer/physmem.hh \
267 libnml/buffer/recvn.h \
268 libnml/buffer/rem_msg.hh \
269 libnml/buffer/sendn.h \
270 libnml/buffer/shmem.hh \
271 libnml/buffer/tcpmem.hh \
272 libnml/cms/cms.hh \
273 libnml/cms/cms_aup.hh \
274 libnml/cms/cms_cfg.hh \
275 libnml/cms/cms_dup.hh \
276 libnml/cms/cms_srv.hh \
277 libnml/cms/cms_up.hh \
278 libnml/cms/cms_user.hh \
279 libnml/cms/cms_xup.hh \
280 libnml/cms/cmsdiag.hh \
281 libnml/cms/tcp_opts.hh \
282 libnml/cms/tcp_srv.hh \
283 libnml/inifile/inifile.hh \
284 libnml/linklist/linklist.hh \
285 libnml/nml/cmd_msg.hh \
286 libnml/nml/nml.hh \
287 libnml/nml/nml_mod.hh \
288 libnml/nml/nml_oi.hh \
289 libnml/nml/nml_srv.hh \
290 libnml/nml/nml_type.hh \
291 libnml/nml/nmldiag.hh \
292 libnml/nml/nmlmsg.hh \
293 libnml/nml/stat_msg.hh \
294 libnml/os_intf/_sem.h \
295 libnml/os_intf/sem.hh \
296 libnml/os_intf/_shm.h \
297 libnml/os_intf/shm.hh \
298 libnml/os_intf/_timer.h \
299 libnml/os_intf/timer.hh \
300 libnml/posemath/posemath.h \
301 libnml/posemath/gotypes.h \
302 libnml/posemath/gomath.h \
303 libnml/posemath/sincos.h \
304 libnml/rcs/rcs.hh \
305 libnml/rcs/rcs_exit.hh \
306 libnml/rcs/rcs_print.hh \
307 libnml/rcs/rcsversion.h \
308 rtapi/rtapi.h \
309 rtapi/rtapi_app.h \
310 rtapi/rtapi_bitops.h \
311 rtapi/rtapi_math.h \
312 rtapi/rtapi_math_i386.h \
313 rtapi/rtapi_common.h \
314 rtapi/rtapi_ctype.h \
315 rtapi/rtapi_errno.h \
316 rtapi/rtapi_string.h
318 # Make each include file a target
319 TARGETS += $(patsubst %,../include/%,$(foreach h,$(HEADERS),$(notdir $h)))
321 # Add converting of %.po files
322 TARGETS += $(patsubst po/%.po, ../share/locale/%/LC_MESSAGES/emc2.mo, $(wildcard po/*.po))
323 TARGETS += $(patsubst po/%.po, objects/%.msg, $(wildcard po/*.po))
325 # And make userspace depend on $(TARGETS)
326 userspace: $(TARGETS)
328 ifeq ($(BUILD_PYTHON),yes)
329 pythonclean:
330 rm -f $(PYTARGETS)
331 python: $(PYTARGETS)
332 userspace: python
333 clean: docclean pythonclean
334 endif
336 # This is the gateway into the crazy world of "kbuild", the linux 2.6 system
337 # for building kernel modules. Other kernel module build styles need to be
338 # accomodated here.
339 ifeq ($(BUILD_SYS),kbuild)
341 # '-o $(KERNELDIR)/Module.symvers' silences warnings about that file being missing
342 modules:
343 ./modsilent $(MAKE) -C $(KERNELDIR) SUBDIRS=`pwd` CC=$(CC) V=0 -o $(KERNELDIR)/Module.symvers modules
344 -cp *$(MODULE_EXT) ../rtlib/
345 endif
347 # These rules clean things up. 'modclean' cleans files generated by 'modules'
348 # (except that it doesn't remove the modules that were copied to rtlib)
349 # 'clean' cleans everything but dependency files, and 'depclean' cleans them
350 # too.
351 modclean:
352 find -name '.*.cmd' -or -name '*.ko' -or -name '*.mod.c' -or -name '*.mod.o' | xargs rm -f
353 -rm -rf .tmp_versions
354 find . -name .tmp_versions |xargs rm -rf
355 -rm -f ../rtlib/*.ko
356 -rm -f ../rtlib/*.so
358 depclean:
359 -rm -rf depends
361 clean: depclean modclean
362 find . -name '*.o' |xargs rm -f
363 -rm -rf objects
364 -rm -f $(TARGETS)
365 -rm -f $(COPY_CONFIGS)
366 -rm -f ../rtlib/*.$(MODULE_EXT)
367 -rm -f hal/components/conv_*.comp
369 # So that nothing is built as root, this rule does not depend on the touched
370 # files (Note that files in depends/ might be rebuilt, and there's little that
371 # can be done about it)
372 ifeq ($(BUILD_SYS),sim)
373 setuid:
374 @echo "'make setuid' is not needed for the simulator"
375 else
376 setuid:
377 chown root ../bin/emc_module_helper
378 chmod 4750 ../bin/emc_module_helper
379 chown root ../bin/bfload
380 chmod 4750 ../bin/bfload
381 chown root ../bin/pci_write
382 chmod 4750 ../bin/pci_write
383 chown root ../bin/pci_read
384 chmod 4750 ../bin/pci_read
385 endif
387 # These rules allows a header file from this directory to be installed into
388 # ../include. A pair of rules like these will exist in the Submakefile
389 # of each file that contains headers.
390 ../include/%.h: %.h
391 -cp $^ $@
392 ../include/%.hh: %.hh
393 -cp $^ $@
395 DIR=install -d -m 0755 -o root
396 FILE=install -m 0644 -o root
397 TREE=cp -dR
398 CONFIGFILE=install -m 0644
399 EXE=install -m 0755 -o root
400 SETUID=install -m 4755 -o root
401 GLOB=$(wildcard $(1))
403 ifeq ($(RUN_IN_PLACE),yes)
404 define ERROR_MESSAGE
405 You configured run-in-place, but are trying to install.
406 For an installable version, run configure without --enable-run-in-place
407 and rebuild
408 endef
409 install:
410 $(error $(ERROR_MESSAGE))
411 install-menus install-menu: ../share/menus/CNC.menu \
412 ../share/desktop-directories/cnc.directory \
413 ../share/applications/emc.desktop \
414 ../share/applications/emc-latency.desktop
415 mkdir -p $(HOME)/.config/menus/applications-merged
416 cp $< $(HOME)/.config/menus/applications-merged
417 else
419 DOCS=NEWS README AUTHORS
421 DOCS_HELP=$(call GLOB,../docs/help/*)
422 NC_FILES=$(filter-out %/butterfly.ngc,$(call GLOB,../nc_files/*))
423 TCL=$(call GLOB,../tcl/*.tcl)
424 TCL_BIN=$(call GLOB,../tcl/bin/*.tcl) ../tcl/bin/popimage
426 install-test:
427 @if type -path dpkg-query > /dev/null 2>&1 ; then \
428 if dpkg-query -S $(DESTDIR)/usr/bin/emc > /dev/null 2>&1 ; then \
429 echo "*** Error: Package version installed in $(DESTDIR)/usr"; \
430 echo "Use './configure --enable-run-in-place' or uninstall the emc2 package"; \
431 echo "before installing."; \
432 exit 1; \
433 fi \
436 install: install-test install-kernel-dep install-kernel-indep
437 $(ECHO) "Installed in $(DESTDIR) with prefix $(prefix)"
439 install-dirs:
440 $(DIR) $(DESTDIR)$(initd_dir) $(DESTDIR)$(EMC2_RTLIB_DIR) \
441 $(DESTDIR)$(sysconfdir)/emc2 $(DESTDIR)$(bindir) \
442 $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)/emc2 \
443 $(DESTDIR)$(docsdir) $(DESTDIR)$(ncfilesdir) \
444 $(DESTDIR)/etc/X11/app-defaults $(DESTDIR)$(tcldir)/bin \
445 $(DESTDIR)$(tcldir)/scripts $(DESTDIR)$(libdir)/emc/tcl \
446 $(DESTDIR)$(mandir)/man1 \
447 $(DESTDIR)$(mandir)/man3 \
448 $(DESTDIR)$(mandir)/man9 \
449 $(DESTDIR)$(tcldir)/msgs \
450 $(DESTDIR)$(localedir)/de/LC_MESSAGES \
451 $(DESTDIR)$(datadir)/axis/images \
452 $(DESTDIR)$(datadir)/axis/tcl \
453 $(DESTDIR)$(datadir)/emc/pncconf/pncconf-help
455 install-kernel-indep: install-dirs
456 $(FILE) ../docs/man/man1/*.1 $(DESTDIR)$(mandir)/man1
457 $(FILE) $(filter-out %/skeleton.3hal, $(wildcard ../docs/man/man3/*.3hal)) $(DESTDIR)$(mandir)/man3
458 $(FILE) $(filter-out %/skeleton.3rtapi, $(wildcard ../docs/man/man3/*.3rtapi)) $(DESTDIR)$(mandir)/man3
459 $(FILE) $(filter-out %/skeleton.9, $(wildcard ../docs/man/man9/*.9)) $(DESTDIR)$(mandir)/man9
460 $(FILE) objects/*.msg $(DESTDIR)$(tcldir)/msgs
461 $(EXE) ../scripts/realtime $(DESTDIR)$(initd_dir)
462 $(EXE) ../scripts/halrun $(DESTDIR)$(bindir)
463 $(FILE) ../docs/UPDATING $(DESTDIR)$(docsdir)/UPDATING
464 $(FILE) ../*.png ../*.gif $(DESTDIR)$(datadir)/emc
466 # install all the sample configs, including subdirs (tar is required on debian systems, and common on others)
467 $(DIR) $(DESTDIR)$(sampleconfsdir)
468 ((cd ../configs && tar --exclude CVS --exclude .cvsignore -cf - .) | (cd $(DESTDIR)$(sampleconfsdir) && tar -xf -))
470 $(EXE) $(filter-out ../bin/emc_module_helper ../bin/bfload ../bin/pci_write ../bin/pci_read, $(filter ../bin/%,$(TARGETS))) $(DESTDIR)$(bindir)
471 $(EXE) ../scripts/emc $(DESTDIR)$(bindir)
472 $(EXE) ../scripts/latency-test $(DESTDIR)$(bindir)
473 $(EXE) ../scripts/emcmkdesktop $(DESTDIR)$(bindir)
474 $(EXE) ../bin/tooledit $(DESTDIR)$(bindir)
475 $(EXE) ../bin/toolconvert $(DESTDIR)$(bindir)
476 $(FILE) $(filter ../lib/%.a ../lib/%.so.0,$(TARGETS)) $(DESTDIR)$(libdir)
477 cp --no-dereference $(filter ../lib/%.so, $(TARGETS)) $(DESTDIR)$(libdir)
478 -ldconfig $(DESTDIR)$(libdir)
479 $(FILE) $(filter %.h %.hh,$(TARGETS)) $(DESTDIR)$(includedir)/emc2/
480 $(FILE) $(addprefix ../docs/,$(DOCS)) $(DESTDIR)$(docsdir)
481 $(FILE) $(DOCS_HELP) $(DESTDIR)$(docsdir)
482 $(FILE) $(NC_FILES) $(DESTDIR)$(ncfilesdir)
483 $(EXE) ../nc_files/M101 $(DESTDIR)$(ncfilesdir)
484 $(FILE) ../tcl/TkEmc $(DESTDIR)/etc/X11/app-defaults
485 $(FILE) ../app-defaults/XEmc $(DESTDIR)/etc/X11/app-defaults
486 $(FILE) Makefile.modinc $(DESTDIR)$(datadir)/emc
487 $(EXE) $(TCL) $(DESTDIR)$(tcldir)
488 $(FILE) ../tcl/hal.so $(DESTDIR)$(libdir)/emc/tcl
489 $(FILE) ../tcl/emc.so $(DESTDIR)$(tcldir)
490 $(EXE) $(TCL_BIN) $(DESTDIR)$(tcldir)/bin
491 $(FILE) ../tcl/scripts/balloon.tcl ../tcl/scripts/emchelp.tcl $(DESTDIR)$(tcldir)/scripts
492 $(EXE) ../tcl/scripts/Set_Coordinates.tcl $(DESTDIR)$(tcldir)/scripts
493 $(FILE) ../share/emc/stepconf.glade $(DESTDIR)$(prefix)/share/emc
494 $(FILE) ../share/emc/touchy.glade $(DESTDIR)$(prefix)/share/emc
495 $(FILE) ../share/emc/pncconf.glade $(DESTDIR)$(prefix)/share/emc
496 $(FILE) ../configs/common/emc.nml $(DESTDIR)$(prefix)/share/emc
497 $(FILE) ../src/emc/usr_intf/pncconf/pncconf-help/*.txt $(DESTDIR)$(prefix)/share/emc/pncconf/pncconf-help
498 $(FILE) ../src/emc/usr_intf/pncconf/pncconf-help/*.png $(DESTDIR)$(prefix)/share/emc/pncconf/pncconf-help
500 ifeq ($(BUILD_PYTHON),yes)
501 install-kernel-indep: install-python
502 install-python: install-dirs
503 $(DIR) $(DESTDIR)$(SITEPY) $(DESTDIR)$(SITEPY)/rs274
504 $(DIR) $(DESTDIR)$(SITEPY)/touchy
505 $(FILE) ../lib/python/*.py ../lib/python/*.so $(DESTDIR)$(SITEPY)
506 $(FILE) ../lib/python/rs274/*.py $(DESTDIR)$(SITEPY)/rs274
507 $(FILE) ../lib/python/touchy/*.py $(DESTDIR)$(SITEPY)/touchy
508 $(EXE) ../bin/stepconf ../bin/pncconf ../bin/hal_input ../bin/pyvcp ../bin/axis ../bin/axis-remote ../bin/debuglevel ../bin/emctop ../bin/mdi ../bin/hal_manualtoolchange ../bin/image-to-gcode ../bin/touchy $(DESTDIR)$(bindir)
509 $(EXE) $(patsubst %.py,../bin/%,$(VISMACH_PY)) $(DESTDIR)$(bindir)
510 $(FILE) ../share/emc/emc2-wizard.gif $(DESTDIR)$(prefix)/share/emc
511 $(FILE) emc/usr_intf/axis/etc/axis_light_background $(DESTDIR)$(docsdir)
512 $(FILE) emc/usr_intf/axis/README $(DESTDIR)$(docsdir)/README.axis
513 $(FILE) ../share/axis/images/*.gif ../share/axis/images/*.xbm ../share/axis/images/*.ngc $(DESTDIR)$(datadir)/axis/images
514 $(FILE) ../share/axis/tcl/*.tcl $(DESTDIR)$(datadir)/axis/tcl
515 endif
517 install-kernel-dep:
518 $(DIR) $(DESTDIR)$(moduledir)/emc2 \
519 $(DESTDIR)$(bindir) \
520 $(DESTDIR)$(sysconfdir)/emc2
521 $(FILE) ../rtlib/*$(MODULE_EXT) $(DESTDIR)$(EMC2_RTLIB_DIR)
522 ifneq "$(BUILD_SYS)" "sim"
523 $(SETUID) ../bin/emc_module_helper $(DESTDIR)$(bindir)
524 $(SETUID) ../bin/bfload $(DESTDIR)$(bindir)
525 $(SETUID) ../bin/pci_write $(DESTDIR)$(bindir)
526 $(SETUID) ../bin/pci_read $(DESTDIR)$(bindir)
527 endif
528 $(FILE) ../scripts/rtapi.conf $(DESTDIR)$(sysconfdir)/emc2
529 endif # RUN_IN_PLACE
531 CONF=../configs
532 COMMON=$(CONF)/common
533 CONFILES=$(addsuffix /$(1), $(filter-out $(COMMON), $(wildcard $(CONF)/*)))
534 .PHONY: configs
535 COPY_CONFIGS := \
536 $(patsubst %,../configs/%/core_stepper.hal, demo_step_cl stepper demo_sim_cl Sherline3Axis SherlineLathe cooltool) \
537 $(patsubst %,../configs/%/core_servo.hal, motenc m5i20 stg vti) \
538 $(patsubst %,../configs/%/core_sim.hal, halui_pyvcp sim) \
539 $(patsubst %,../configs/%/core_sim9.hal, sim) \
540 $(patsubst %,../configs/%/axis_manualtoolchange.hal, sim lathe-pluto)
542 configs: $(COPY_CONFIGS)
544 $(call CONFILES,axis_manualtoolchange.hal): %/axis_manualtoolchange.hal: ../configs/common/axis_manualtoolchange.hal
545 -cp $< $@
546 $(call CONFILES,core_stepper.hal): %/core_stepper.hal: ../configs/common/core_stepper.hal
547 -cp $< $@
548 $(call CONFILES,core_servo.hal): %/core_servo.hal: ../configs/common/core_servo.hal
549 -cp $< $@
550 $(call CONFILES,core_sim.hal): %/core_sim.hal: ../configs/common/core_sim.hal
551 -cp $< $@
552 $(call CONFILES,core_sim9.hal): %/core_sim9.hal: ../configs/common/core_sim9.hal
553 -cp $< $@
555 endif # userspace
557 ifneq ($(KERNELRELEASE),)
558 include $(BASEPWD)/hal/components/Submakefile
559 endif
561 # KERNELRELEASE is nonempty, therefore we are building modules using the
562 # "kbuild" system. $(BASEPWD) is used here, instead of relative paths, because
563 # that's what kbuild seems to require
565 EXTRA_CFLAGS = $(RTFLAGS) -D__MODULE__ -I$(BASEPWD) -I$(BASEPWD)/libnml/linklist \
566 -I$(BASEPWD)/libnml/cms -I$(BASEPWD)/libnml/rcs -I$(BASEPWD)/libnml/inifile \
567 -I$(BASEPWD)/libnml/os_intf -I$(BASEPWD)/libnml/nml -I$(BASEPWD)/libnml/buffer \
568 -I$(BASEPWD)/libnml/posemath -I$(BASEPWD)/rtapi -I$(BASEPWD)/hal \
569 -I$(BASEPWD)/emc/nml_intf -I$(BASEPWD)/emc/kinematics -I$(BASEPWD)/emc/motion \
570 -DSEQUENTIAL_SUPPORT -DHAL_SUPPORT -DDYNAMIC_PLCSIZE -DRT_SUPPORT -DOLD_TIMERS_MONOS_SUPPORT -DMODBUS_IO_MASTER
571 ifeq ($(RTARCH),x86_64)
572 EXTRA_CFLAGS += -msse
573 endif
575 ifeq "$(USE_STUBS)" "1"
576 MATHSTUB := rtapi/mathstubs.o
577 endif
579 ifdef SEQUENTIAL_SUPPORT
580 EXTRA_CFLAGS += -DSEQUENTIAL_SUPPORT
581 endif
583 # For each module, there's an addition to obj-m or obj-$(CONFIG_foo)
584 # plus a definition of foo-objs, which contains the full path to the
585 # object file(s) that the module contains. Unfortunately, this setup pollutes
586 # the source directory with object files and other temporaries, but I can't
587 # find a way around it.
589 # Subdirectory: rtapi
590 ifneq ($(BUILD_SYS),sim)
591 obj-$(CONFIG_RTAPI) += rtapi.o
592 rtapi-objs := rtapi/$(RTPREFIX)_rtapi.o
593 endif
595 # Subdirectory: rtapi/examples (unneeded?)
597 # Subdirectory: hal/components
598 obj-$(CONFIG_BOSS_PLC) += boss_plc.o
599 boss_plc-objs := hal/components/boss_plc.o $(MATHSTUB)
600 obj-$(CONFIG_DEBOUNCE) += debounce.o
601 debounce-objs := hal/components/debounce.o $(MATHSTUB)
602 obj-$(CONFIG_ENCODER) += encoder.o
603 encoder-objs := hal/components/encoder.o $(MATHSTUB)
604 obj-$(CONFIG_COUNTER) += counter.o
605 counter-objs := hal/components/counter.o $(MATHSTUB)
606 obj-$(CONFIG_ENCODER_RATIO) += encoder_ratio.o
607 encoder_ratio-objs := hal/components/encoder_ratio.o $(MATHSTUB)
608 obj-$(CONFIG_STEPGEN) += stepgen.o
609 stepgen-objs := hal/components/stepgen.o $(MATHSTUB)
610 obj-$(CONFIG_FREQGEN) += freqgen.o
611 freqgen-objs := hal/components/freqgen.o $(MATHSTUB)
612 obj-$(CONFIG_PWMGEN) += pwmgen.o
613 pwmgen-objs := hal/components/pwmgen.o $(MATHSTUB)
614 obj-$(CONFIG_SIGGEN) += siggen.o
615 siggen-objs := hal/components/siggen.o $(MATHSTUB)
616 obj-$(CONFIG_PID) += pid.o
617 pid-objs := hal/components/pid.o $(MATHSTUB)
618 obj-$(CONFIG_AT_PID) += at_pid.o
619 at_pid-objs := hal/components/at_pid.o $(MATHSTUB)
620 obj-$(CONFIG_PID) += threads.o
621 threads-objs := hal/components/threads.o $(MATHSTUB)
622 obj-$(CONFIG_SUPPLY) += supply.o
623 supply-objs := hal/components/supply.o $(MATHSTUB)
624 obj-$(CONFIG_SIM_ENCODER) += sim_encoder.o
625 sim_encoder-objs := hal/components/sim_encoder.o $(MATHSTUB)
626 obj-$(CONFIG_WEIGHTED_SUM) += weighted_sum.o
627 weighted_sum-objs := hal/components/weighted_sum.o $(MATHSTUB)
628 obj-$(CONFIG_MODMATH) += modmath.o
629 modmath-objs := hal/components/modmath.o $(MATHSTUB)
630 obj-$(CONFIG_STREAMER) += streamer.o
631 streamer-objs := hal/components/streamer.o $(MATHSTUB)
632 obj-$(CONFIG_SAMPLER) += sampler.o
633 sampler-objs := hal/components/sampler.o $(MATHSTUB)
635 # Subdirectory: hal/drivers
636 ifneq ($(BUILD_SYS),sim)
637 obj-$(CONFIG_HAL_PARPORT) += hal_parport.o
638 hal_parport-objs := hal/drivers/hal_parport.o $(MATHSTUB)
639 obj-$(CONFIG_PCI_8255) += pci_8255.o
640 pci_8255-objs := hal/drivers/pci_8255.o
641 obj-$(CONFIG_HAL_TIRO) += hal_tiro.o
642 hal_tiro-objs := hal/drivers/hal_tiro.o $(MATHSTUB)
643 obj-$(CONFIG_HAL_STG) += hal_stg.o
644 hal_stg-objs := hal/drivers/hal_stg.o $(MATHSTUB)
645 obj-$(CONFIG_HAL_VTI) += hal_vti.o
646 hal_vti-objs := hal/drivers/hal_vti.o $(MATHSTUB)
647 obj-$(CONFIG_HAL_EVOREG) += hal_evoreg.o
648 hal_evoreg-objs := hal/drivers/hal_evoreg.o $(MATHSTUB)
649 obj-$(CONFIG_HAL_MOTENC) += hal_motenc.o
650 hal_motenc-objs := hal/drivers/hal_motenc.o $(MATHSTUB)
651 obj-$(CONFIG_HAL_M5I20) += hal_m5i20.o
652 hal_m5i20-objs := hal/drivers/hal_m5i20.o $(MATHSTUB)
653 obj-$(CONFIG_HAL_AX521H) += hal_ax5214h.o
654 hal_ax5214h-objs := hal/drivers/hal_ax5214h.o $(MATHSTUB)
655 obj-$(CONFIG_HAL_PPMC) += hal_ppmc.o
656 hal_ppmc-objs := hal/drivers/hal_ppmc.o $(MATHSTUB)
657 obj-$(CONFIG_HAL_SPEAKER) += hal_speaker.o
658 hal_speaker-objs := hal/drivers/hal_speaker.o $(MATHSTUB)
659 obj-$(CONFIG_HAL_SKELETON) += hal_skeleton.o
660 hal_skeleton-objs := hal/drivers/hal_skeleton.o $(MATHSTUB)
661 obj-$(CONFIG_OPTO_AC5) += opto_ac5.o
662 opto_ac5-objs := hal/drivers/opto_ac5.o $(MATHSTUB)
664 obj-$(CONFIG_HOSTMOT2) += hostmot2.o hm2_7i43.o hm2_pci.o hm2_test.o
665 hostmot2-objs := \
666 hal/drivers/mesa-hostmot2/hostmot2.o \
667 hal/drivers/mesa-hostmot2/backported-strings.o \
668 hal/drivers/mesa-hostmot2/ioport.o \
669 hal/drivers/mesa-hostmot2/encoder.o \
670 hal/drivers/mesa-hostmot2/pwmgen.o \
671 hal/drivers/mesa-hostmot2/stepgen.o \
672 hal/drivers/mesa-hostmot2/watchdog.o \
673 hal/drivers/mesa-hostmot2/pins.o \
674 hal/drivers/mesa-hostmot2/tram.o \
675 hal/drivers/mesa-hostmot2/raw.o \
676 hal/drivers/mesa-hostmot2/bitfile.o \
677 $(MATHSTUB)
678 hm2_7i43-objs := \
679 hal/drivers/mesa-hostmot2/hm2_7i43.o \
680 hal/drivers/mesa-hostmot2/bitfile.o \
681 $(MATHSTUB)
682 hm2_pci-objs := \
683 hal/drivers/mesa-hostmot2/hm2_pci.o \
684 hal/drivers/mesa-hostmot2/bitfile.o \
685 $(MATHSTUB)
686 hm2_test-objs := \
687 hal/drivers/mesa-hostmot2/hm2_test.o \
688 hal/drivers/mesa-hostmot2/bitfile.o \
689 $(MATHSTUB)
691 ifneq "$(filter 2.6.%, $(kernelvers))" ""
692 obj-$(CONFIG_PROBE_PARPORT) += probe_parport.o
693 probe_parport-objs := hal/drivers/probe_parport.o $(MATHSTUB)
694 endif
695 endif
697 obj-$(CONFIG_CLASSICLADDER_RT) += classicladder_rt.o
698 classicladder_rt-objs := hal/classicladder/module_hal.o $(MATHSTUB)
699 classicladder_rt-objs += hal/classicladder/arithm_eval.o
700 classicladder_rt-objs += hal/classicladder/arrays.o
701 classicladder_rt-objs += hal/classicladder/calc.o
702 classicladder_rt-objs += hal/classicladder/calc_sequential.o
703 classicladder_rt-objs += hal/classicladder/manager.o
704 classicladder_rt-objs += hal/classicladder/symbols.o
705 classicladder_rt-objs += hal/classicladder/vars_access.o
707 ifdef SEQUENTIAL_SUPPORT
708 classicladder_rt-objs += hal/classicladder/calc_sequential_rt.o
709 endif
711 obj-m += scope_rt.o
712 scope_rt-objs := hal/utils/scope_rt.o $(MATHSTUB)
714 obj-m += hal_lib.o
715 hal_lib-objs := hal/hal_lib.o $(MATHSTUB)
717 obj-m += trivkins.o
718 trivkins-objs := emc/kinematics/trivkins.o
720 obj-m += 5axiskins.o
721 5axiskins-objs := emc/kinematics/5axiskins.o
723 obj-m += maxkins.o
724 maxkins-objs := emc/kinematics/maxkins.o
726 obj-m += gantrykins.o
727 gantrykins-objs := emc/kinematics/gantrykins.o
729 obj-m += rotatekins.o
730 rotatekins-objs := emc/kinematics/rotatekins.o
732 obj-m += tripodkins.o
733 tripodkins-objs := emc/kinematics/tripodkins.o
735 obj-m += genhexkins.o
736 genhexkins-objs := emc/kinematics/genhexkins.o
737 genhexkins-objs += libnml/posemath/_posemath.o
738 genhexkins-objs += libnml/posemath/sincos.o $(MATHSTUB)
740 obj-m += genserkins.o
741 genserkins-objs := emc/kinematics/genserkins.o
742 genserkins-objs += libnml/posemath/gomath.o
743 genserkins-objs += libnml/posemath/sincos.o $(MATHSTUB)
745 obj-m += pumakins.o
746 pumakins-objs := emc/kinematics/pumakins.o
747 pumakins-objs += libnml/posemath/_posemath.o
748 pumakins-objs += libnml/posemath/sincos.o $(MATHSTUB)
750 obj-m += scarakins.o
751 scarakins-objs := emc/kinematics/scarakins.o
752 scarakins-objs += libnml/posemath/_posemath.o
753 scarakins-objs += libnml/posemath/sincos.o $(MATHSTUB)
755 obj-$(CONFIG_MOTMOD) += motmod.o
756 motmod-objs := emc/kinematics/cubic.o
757 motmod-objs += emc/kinematics/tc.o
758 motmod-objs += emc/kinematics/tp.o
759 motmod-objs += emc/motion/motion.o
760 motmod-objs += emc/motion/command.o
761 motmod-objs += emc/motion/control.o
762 motmod-objs += emc/motion/homing.o
763 motmod-objs += emc/motion/emcmotglb.o
764 motmod-objs += emc/motion/emcmotutil.o
765 motmod-objs += libnml/posemath/_posemath.o
766 motmod-objs += libnml/posemath/sincos.o $(MATHSTUB)
768 TORTOBJS = $(foreach file,$($(patsubst %.o,%,$(1))-objs), objects/rt$(file))
769 ifeq ($(BUILD_SYS),sim)
770 EXTRA_CFLAGS += -fPIC -Os
771 RTOBJS := $(sort $(foreach mod,$(obj-m),$(call TORTOBJS,$(mod))))
773 RTDEPS := $(sort $(patsubst objects/%.o,depends/%.d, $(RTOBJS)))
774 IS_POWERPC = test `uname -m` = ppc -o `uname -m` = ppc64
775 modules: $(patsubst %.o,../rtlib/%.so,$(obj-m))
776 ../rtlib/%.so:
777 $(ECHO) Linking $@
778 @ld -r -o objects/$*.tmp $^
779 @if ! $(IS_POWERPC); then objcopy -j .rtapi_export -O binary objects/$*.tmp objects/$*.exp; fi
780 @if ! $(IS_POWERPC); then objcopy -G __i686.get_pc_thunk.bx `xargs -r0n1 echo -G < objects/$*.exp | grep -ve '^-G $$' | sort -u` objects/$*.tmp; fi
781 @ld -shared -Bsymbolic -o $@ objects/$*.tmp -lm
783 $(sort $(RTDEPS)): depends/rt%.d: %.c
784 @mkdir -p $(dir $@)
785 $(ECHO) Depending $<
786 @$(call DEP,$(CC),$@ $(patsubst depends/%.d,objects/%.o,$@),$@,$(OPT) $(DEBUG) -DSIM -DRTAPI $(EXTRA_CFLAGS) $<)
788 # Rules to make .o (object) files
789 $(sort $(RTOBJS)) : objects/rt%.o : %.c
790 $(ECHO) Compiling realtime $<
791 @mkdir -p $(dir $@)
792 @$(CC) -c $(OPT) $(DEBUG) -DSIM -DSIMULATOR -DRTAPI $(EXTRA_CFLAGS) $< -o $@
793 endif
795 ifeq ($(BUILD_SYS),normal)
796 modules: $(patsubst %,../rtlib/%,$(obj-m))
797 RTOBJS := $(sort $(foreach mod,$(obj-m),$(call TORTOBJS,$(mod))))
798 RTDEPS := $(sort $(patsubst objects/%.o,depends/%.d, $(RTOBJS)))
800 $(sort $(RTDEPS)): depends/rt%.d: %.c
801 @mkdir -p $(dir $@)
802 $(ECHO) Depending $<
803 @$(call DEP,$(CC),$@ $(patsubst depends/%.d,objects/%.o,$@),$@,$(EXTRA_CFLAGS) $<)
806 # Rules to make .o (object) files
807 $(sort $(RTOBJS)) : objects/rt%.o : %.c
808 $(ECHO) Compiling realtime $<
809 @mkdir -p $(dir $@)
810 $(CC) -c -DRTAPI -nostdinc -isystem $(shell $(CC) -print-file-name=include) -I$(KERNELDIR)/include $(EXTRA_CFLAGS) $< -o $@
812 ../rtlib/%.o:
813 $(ECHO) Linking $@
814 @ld -r -static -S -Os -o $@ $^ $(EXTRALINK) $(MATHLIB)
815 endif
817 ifneq "$(filter normal sim,$(BUILD_SYS))" ""
818 ifneq "$(BUILD_SYS)" "sim"
819 ../rtlib/rtapi$(MODULE_EXT): $(addprefix objects/rt,$(rtapi-objs))
820 endif
821 ../rtlib/classicladder_rt$(MODULE_EXT): $(addprefix objects/rt,$(classicladder_rt-objs))
822 ../rtlib/boss_plc$(MODULE_EXT): $(addprefix objects/rt,$(boss_plc-objs))
823 ../rtlib/debounce$(MODULE_EXT): $(addprefix objects/rt,$(debounce-objs))
824 ../rtlib/encoder$(MODULE_EXT): $(addprefix objects/rt,$(encoder-objs))
825 ../rtlib/counter$(MODULE_EXT): $(addprefix objects/rt,$(counter-objs))
826 ../rtlib/encoder_ratio$(MODULE_EXT): $(addprefix objects/rt,$(encoder_ratio-objs))
827 ../rtlib/stepgen$(MODULE_EXT): $(addprefix objects/rt,$(stepgen-objs))
828 ../rtlib/freqgen$(MODULE_EXT): $(addprefix objects/rt,$(freqgen-objs))
829 ../rtlib/pwmgen$(MODULE_EXT): $(addprefix objects/rt,$(pwmgen-objs))
830 ../rtlib/siggen$(MODULE_EXT): $(addprefix objects/rt,$(siggen-objs))
831 ../rtlib/at_pid$(MODULE_EXT): $(addprefix objects/rt,$(at_pid-objs))
832 ../rtlib/pid$(MODULE_EXT): $(addprefix objects/rt,$(pid-objs))
833 ../rtlib/threads$(MODULE_EXT): $(addprefix objects/rt,$(threads-objs))
834 ../rtlib/supply$(MODULE_EXT): $(addprefix objects/rt,$(supply-objs))
835 ../rtlib/sim_encoder$(MODULE_EXT): $(addprefix objects/rt,$(sim_encoder-objs))
836 ../rtlib/weighted_sum$(MODULE_EXT): $(addprefix objects/rt,$(weighted_sum-objs))
837 ../rtlib/modmath$(MODULE_EXT): $(addprefix objects/rt,$(modmath-objs))
838 ../rtlib/streamer$(MODULE_EXT): $(addprefix objects/rt,$(streamer-objs))
839 ../rtlib/sampler$(MODULE_EXT): $(addprefix objects/rt,$(sampler-objs))
840 ../rtlib/hal_parport$(MODULE_EXT): $(addprefix objects/rt,$(hal_parport-objs))
841 ../rtlib/pci_8255$(MODULE_EXT): $(addprefix objects/rt,$(pci_8255-objs))
842 ../rtlib/hal_tiro$(MODULE_EXT): $(addprefix objects/rt,$(hal_tiro-objs))
843 ../rtlib/hal_stg$(MODULE_EXT): $(addprefix objects/rt,$(hal_stg-objs))
844 ../rtlib/hal_vti$(MODULE_EXT): $(addprefix objects/rt,$(hal_vti-objs))
845 ../rtlib/hal_evoreg$(MODULE_EXT): $(addprefix objects/rt,$(hal_evoreg-objs))
846 ../rtlib/hal_motenc$(MODULE_EXT): $(addprefix objects/rt,$(hal_motenc-objs))
847 ../rtlib/hal_m5i20$(MODULE_EXT): $(addprefix objects/rt,$(hal_m5i20-objs))
848 ../rtlib/hal_ax5214h$(MODULE_EXT): $(addprefix objects/rt,$(hal_ax5214h-objs))
849 ../rtlib/hal_ppmc$(MODULE_EXT): $(addprefix objects/rt,$(hal_ppmc-objs))
850 ../rtlib/hal_skeleton$(MODULE_EXT): $(addprefix objects/rt,$(hal_skeleton-objs))
851 ../rtlib/hal_speaker$(MODULE_EXT): $(addprefix objects/rt,$(hal_speaker-objs))
852 ../rtlib/opto_ac5$(MODULE_EXT): $(addprefix objects/rt,$(opto_ac5-objs))
853 ../rtlib/scope_rt$(MODULE_EXT): $(addprefix objects/rt,$(scope_rt-objs))
854 ../rtlib/hal_lib$(MODULE_EXT): $(addprefix objects/rt,$(hal_lib-objs))
855 ../rtlib/motmod$(MODULE_EXT): $(addprefix objects/rt,$(motmod-objs))
856 ../rtlib/trivkins$(MODULE_EXT): $(addprefix objects/rt,$(trivkins-objs))
857 ../rtlib/5axiskins$(MODULE_EXT): $(addprefix objects/rt,$(5axiskins-objs))
858 ../rtlib/maxkins$(MODULE_EXT): $(addprefix objects/rt,$(maxkins-objs))
859 ../rtlib/gantrykins$(MODULE_EXT): $(addprefix objects/rt,$(gantrykins-objs))
860 ../rtlib/rotatekins$(MODULE_EXT): $(addprefix objects/rt,$(rotatekins-objs))
861 ../rtlib/tripodkins$(MODULE_EXT): $(addprefix objects/rt,$(tripodkins-objs))
862 ../rtlib/genhexkins$(MODULE_EXT): $(addprefix objects/rt,$(genhexkins-objs))
863 ../rtlib/genserkins$(MODULE_EXT): $(addprefix objects/rt,$(genserkins-objs))
864 ../rtlib/pumakins$(MODULE_EXT): $(addprefix objects/rt,$(pumakins-objs))
865 ../rtlib/scarakins$(MODULE_EXT): $(addprefix objects/rt,$(scarakins-objs))
867 ifeq ($(TRIVIAL_BUILD),no)
868 RTDEPS := $(sort $(patsubst objects/%.o,depends/%.d,$(RTOBJS)))
869 -include $(RTDEPS)
870 Makefile: $(RTDEPS)
871 endif
872 endif
874 # Phony so that it is always rebuilt when requested, not because it
875 # shouldn't exist as a file
876 .PHONY: tags
877 tags:
878 ctags-exuberant \
879 --extra=+fq \
880 --exclude=depends --exclude=objects --exclude=.mod.c \
881 '--langmap=make:+(Submakefile),make:+(Makefile.inc),c:+.comp' \
882 -I EXPORT_SYMBOL+,RTAPI_MP_INT+,RTAPI_MP_LONG+,RTAPI_MP_STRING+ \
883 -I RTAPI_MP_ARRAY_INT+,RTAPI_MP_ARRAY_LONG+,RTAPI_MP_ARRAY_STRING+ \
884 -I MODULE_AUTHOR+,MODULE_DESCRIPTION+,MODULE_LICENSE+ \
885 -R . ../tcl ../scripts ../share/axis/tcl
886 rm -f TAGS
887 find . -type f -name '*.[ch]' |xargs etags -l c --append
888 find . -type f -name '*.cc' |xargs etags -l c++ --append
889 find . -type f -name '*.hh' |xargs etags -l c++ --append
891 .PHONY: swish
892 swish:
893 swish-e -c .swish_config -v 0 -i $(BASEPWD) \
894 $(dir $(BASEPWD))tcl \
895 $(dir $(BASEPWD))share/axis/tcl \
896 $(dir $(BASEPWD))scripts \
897 $(dir $(BASEPWD))configs \
898 $(dir $(BASEPWD))docs/src \
899 $(dir $(BASEPWD))docs/man/man1
901 # When you depend on objects/var-ZZZ you are depending on the contents of the
902 # variable ZZZ, which is assumed to depend on a Makefile, a Submakefile, or
903 # Makefile.inc
904 objects/var-%: Makefile $(wildcard $(SUBMAKEFILES)) Makefile.inc
905 @mkdir -p $(dir $@)
906 @echo $($*) > $@.tmp
907 @sh move-if-change $@.tmp $@
909 ../lib/%.so: ../lib/%.so.0
910 ln -sf $(notdir $<) $@
912 # vim:ts=8:sts=8:sw=8:noet: