sorry, here is my makefile. i just add
obj-m += trivkinstest.o
trivkinstest-objs := emc/kinematics/trivkinstest.o
$(RTLIBDIR)/trivkinstest$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(trivkinstest-objs))
can you give more details how should i do to build a RIP or run idconfig
mannually. Sorry, i 'm a new in linux and BBB, trying to learn them
Vào 22:39:17 UTC+7 Thứ Hai, ngày 14 tháng 8 năm 2017, Schooner đã viết:
>
>
> On 14/08/17 16:22, thangle wrote:
>
> Here is what i did:
>
> - 1st: i make a coppy trivkins.c then rename it become trivkinstest.c
> and changing line 88 to: static const char *name = "trivkinstest";
>
> - 2nd: i follow this
>
> https://groups.google.com/forum/#!msg/machinekit/yrBnTxQL7_E/IrPHxKn3BQAJ;context-place=forum/machinekit
>
>
> I wrote that, so I am familiar with it
>
> + i pass Submakefile
> + just change something in Makefile
>
>
> 'just change something in makefile' is not information
>
> - 3rd: use terminal go to /home/machinekit/machinekit/src and "make"
> then type command "sudo make setuid"
>
> - 4th: i try to test if trivkinstest work. i open CRAMPS.hal, change
> loadrt trivkins -->loadrt trivkinstest
> loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD
> num_joints=[TRAJ]AXES tp=tp kins=trivkins--->trivkinstest
>
> - finally: i try run CRAMPS but it's bugged
> Debug file information:
> stat: No such file or directory
> CRAMPS.hal:18: insmod failed, returned -1:
> do_load_cmd: dlopen: trivkinstest.so: cannot open shared object file:
> No such file or directory
>
>
> The module appears to have built from your printout, but you also look to
> be building a RIP and then executing a binary installation
> Look at the rpath
>
> You need to build the RIP, set the current terminal session environment
> using . ./scripts/rip-environment from the root of the RIP
> and then launch machinekit from *that *terminal session
>
> Either that or copy the new module to your binary install and run ldconfig
> manually and check it is in the cache
>
> rpath=/usr/lib/linuxcnc/xenomai
> See /var/log/linuxcnc.log for more information.
> 10047
> PID TTY STAT TIME COMMAND
> Stopping realtime threads
> Unloading hal components
>
> i'm using BBB and machinekit. sorry for my trash English.
>
> Vào 15:41:12 UTC+7 Thứ Hai, ngày 14 tháng 8 năm 2017, Schooner đã viết:
>>
>> Going to need a lot more info than that and to see the source.
>>
>> You basically need to know how to write Makefiles, to alter the existing
>> ones to build your stuff too, assuming it is compatible.
>>
>> On 14/08/17 03:39, thangle wrote:
>>
>> Hi,
>>
>> Does anyone know how to compile a new source? example, i coppy a new C
>> project from an old project in machinekit src and rename, what should i do
>> to make it work. please help me. tks
>> --
>> website: http://www.machinekit.io blog: http://blog.machinekit.io
>> github: https://github.com/machinekit
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Machinekit" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> Visit this group at https://groups.google.com/group/machinekit.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>> --
> website: http://www.machinekit.io blog: http://blog.machinekit.io github:
> https://github.com/machinekit
> ---
> You received this message because you are subscribed to the Google Groups
> "Machinekit" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected] <javascript:>.
> Visit this group at https://groups.google.com/group/machinekit.
> For more options, visit https://groups.google.com/d/optout.
>
>
>
--
website: http://www.machinekit.io blog: http://blog.machinekit.io github:
https://github.com/machinekit
---
You received this message because you are subscribed to the Google Groups
"Machinekit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
Visit this group at https://groups.google.com/group/machinekit.
For more options, visit https://groups.google.com/d/optout.
# see
http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make
# to trace make execution of make in more detail:
# make VV=1
ifeq ("$(origin VV)", "command line")
OLD_SHELL := $(SHELL)
SHELL = $(warning Building $@$(if $<, (from $<))$(if $?, ($?
newer)))$(OLD_SHELL)
endif
# Delete the default suffix rules
.SUFFIXES:
.PHONY: default userspace modules clean modclean depclean docclean install
python pythonclean cscope cscopeclean
# A "trivial build" is one which should not include dependency information
# either because it should be usable before dependency information can be
# generated or when it is invalid (clean, docclean) or when running as root
# when the user must guarantee in advance that everything is built
# (setuid, install)
ifeq ($(MAKECMDGOALS),)
TRIVIAL_BUILD=no
else
ifeq ($(filter-out clean setuid install tags swish,$(MAKECMDGOALS)),)
TRIVIAL_BUILD=yes
else
TRIVIAL_BUILD=no
endif
endif
# asciidoctor frontmatter generation for comp/instcomp
# this assumes we're running inside a git repo.
# if not, override EDIT_REMOTE EDIT_REPO EDIT_BRANCH via the environment, eg
# EDIT_REMOTE=machinekit make manpages i_docpages
EDIT_REMOTE ?= origin
EDIT_REPO ?= $(shell git ls-remote --get-url $(EDIT_REMOTE) |sed 's/.git$$//')
EDIT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
# $(info EDIT_REMOTE=$(EDIT_REMOTE) EDIT_BRANCH=$(EDIT_BRANCH)
EDIT_REPO=$(EDIT_REPO))
# Beautify output
# ---------------------------------------------------------------------------
#
# A simple variant is to prefix commands with $(Q) - that's useful
# for commands that shall be hidden in non-verbose mode.
#
# $(Q)ln $@ :<
#
# If BUILD_VERBOSE equals 0 then the above command will be hidden.
# If BUILD_VERBOSE equals 1 then the above command is displayed.
ifeq ("$(origin V)", "command line")
BUILD_VERBOSE = $(V)
endif
ifndef BUILD_VERBOSE
BUILD_VERBOSE = 0
endif
ifeq ($(BUILD_VERBOSE),1)
Q =
else
Q = @
endif
ifeq "$(findstring s,$(MAKEFLAGS))" ""
ECHO=@echo
VECHO=echo
else
ECHO=@true
VECHO=true
endif
ifeq ($(threads),)
# if $(threads) wasn't passed in on the command line, rerun make for
# each flavor/(optional)kernel-source combo
BUILD_ALL_FLAVORS = yes
BUILD_THREAD_MODULES = no
else
# $(threads) was passed in; build modules for this flavor and (if
# applicable) kernel-source
BUILD_ALL_FLAVORS = no
BUILD_THREAD_MODULES = yes
endif # $(threads)
# if KERNELRELEASE is non-empty, we're in kbuild
ifeq ($(KERNELRELEASE),)
BUILD_KBUILD = no
else
BUILD_KBUILD = yes
endif
# extract the version from the kernel source version.h
ifneq ($(KERNELDIR),)
KERNEL_VERS = $(shell $(BASEPWD)/../scripts/kernel-vers.sh $(KERNELDIR))
endif
ifeq ($(BASEPWD),)
BASEPWD := $(shell pwd)
export BASEPWD
include Makefile.inc
ifeq ($(origin PYTHONPATH),undefined)
PYTHONPATH:=$(EMC2_HOME)/lib/python
else
PYTHONPATH:=$(EMC2_HOME)/lib/python:$(PYTHONPATH)
endif
export PYTHONPATH
else
include $(BASEPWD)/Makefile.inc
endif
ifeq ($(BUILD_THREAD_FLAVORS),)
$(error Makefile.inc must specify 'BUILD_THREAD_FLAVORS' and other variables)
endif
# prevent typos
ifeq "$(filter $(threads),$(BUILD_THREAD_FLAVORS))" ""
$(error "$(threads)" is not a valid RTOS flavor; please pick one of:\
$(BUILD_THREAD_FLAVORS))
endif
# default target: put before everything else
default:
ifeq ($(BUILD_ALL_FLAVORS),yes)
# Top-level modules target
#
# Re-run 'make modules', once for each configured userland threads
# flavor, and once for each detected kernel for each configured kernel
# threads flavor. Set 'threads' and where applicable 'KERNELDIR'.
#
# Following tradition, this incarnation of the modules recipe is
# placed far away from all others.
FLAVORUP = $(shell echo $(1) | tr a-z- A-Z_)
FLAVORVAR = $($(call FLAVORUP,$(1))_THREADS_$(2))
modules: userspace
@$(foreach f,$(BUILD_THREAD_FLAVORS),\
echo "Making modules for flavor $(f)"; \
$(if $(findstring kbuild,$(call FLAVORVAR,$(f),BUILD_SYS)),\
$(foreach kd,$(call FLAVORVAR,$(f),KERNEL_DIRS),\
echo " kernel source dir $(kd)"; \
$(MAKE) modules threads=$(f) KERNELDIR=$(kd);\
),\
$(MAKE) modules threads=$(f);\
)\
)
ifeq ($(HAVE_KERNEL_THREADS),yes)
@test -f ../libexec/linuxcnc_module_helper -a \
\( `stat -c %u ../libexec/linuxcnc_module_helper` -ne 0 -o \
! -u ../libexec/linuxcnc_module_helper \) \
&& need_setuid=1;
endif
ifeq ($(RUN_IN_PLACE)+$(BUILD_DRIVERS),yes+yes)
for f in $(filter-out %-kernel,$(BUILD_THREAD_FLAVORS)); do \
test -f ../libexec/rtapi_app_$$f -a \
\( 0`stat -c %u ../libexec/rtapi_app_$$f 2>/dev/null` \
-ne 0 -o ! -u ../libexec/rtapi_app_$$f \) \
&& need_setuid=1; \
done; \
test "$$need_setuid" = 1 && \
$(VECHO) -n "You now need to run 'sudo make setuid' " && \
$(VECHO) "in order to run in place." || true
endif
endif # BUILD_ALL_FLAVORS
OBJDIR := objects/$(RTDIR_EXT)
DEPDIR := depends/$(RTDIR_EXT)
RTLIBDIR := ../rtlib/$(RTDIR_EXT)
DEP = $(1) $(CPPFLAGS) -MM -MG -MT "$(2)" $(4) -o $(3).tmp && \
mv -f "$(3)".tmp "$(3)"
cc-option = $(shell \
if $(CC) $(CPPFLAGS) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then \
echo "$(1)"; \
else \
echo "$(2)"; \
fi ;)
ifeq ($(KERNELRELEASE),)
# When KERNELRELEASE is not defined, this is the userspace build.
# The "modules" target is the gateway to the kernel module build.
default: configs userspace modules
# Print 'entering' all the time
MAKEFLAGS += w
INCLUDE_PREFIX = .
# Create the variables with := so that subsequent += alterations keep it
# as a "substitute at assignment time" variable
TARGETS :=
PYTARGETS :=
# Add to this list directories to be created during 'make install'
INSTALL_DIRS :=
# Submakefiles from each of these directories will be included if they exist
SUBDIRS := \
\
../man \
machinetalk \
machinetalk/support \
machinetalk/messagebus \
machinetalk/msgcomponents \
machinetalk/lib \
machinetalk/config-service \
machinetalk/haltalk \
machinetalk/mkwrapper \
machinetalk/mklauncher \
machinetalk/videoserver \
\
rtapi/rtapi_math \
\
libnml/linklist \
libnml/cms \
libnml/rcs \
libnml/inifile \
libnml/os_intf \
libnml/nml \
libnml/buffer \
libnml/posemath libnml \
\
rtapi/examples/timer \
rtapi/examples/shmem \
rtapi/examples \
rtapi \
rtapi/shmdrv \
rtapi/userpci \
\
hal/lib \
hal/i_components \
hal/components \
hal/vtable-example \
hal/userfunct-example \
hal/drivers \
hal/user_comps/devices \
hal/user_comps/mb2hal \
hal/user_comps \
hal/user_comps/vismach \
hal/user_comps/vfs11_vfd \
hal/user_comps/vfdb_vfd \
hal/user_comps/huanyang-vfd \
hal/classicladder \
hal/utils \
hal \
hal/support \
hal/drivers/hal_pru_generic \
hal/simdrivers \
hal/cython \
hal/accessor \
\
emc/usr_intf/axis \
emc/usr_intf/touchy \
emc/usr_intf/stepconf \
emc/usr_intf/pncconf \
emc/usr_intf/gremlin \
emc/usr_intf/gscreen \
emc/usr_intf/gmoccapy \
emc/usr_intf \
emc/nml_intf \
emc/task \
emc/iotask \
emc/kinematics \
emc/canterp \
emc/motion \
emc/tp \
emc/ini \
emc/rs274ngc \
emc/sai \
emc \
emc/pythonplugin \
\
po \
ifeq ($(HAVE_KERNEL_THREADS),yes)
SUBDIRS += module_helper
endif
ifeq ($(BUILD_WEBTALK),yes)
SUBDIRS += machinetalk/webtalk
endif
# moved to src/rtapi/Submakefile
# ULAPISRCS := rtapi/$(RTPREFIX)_ulapi.c
# Each item in INCLUDES is transformed into a -I directive later on
# The top directory is always included
INCLUDES := .
USERSRCS :=
PROGRAMS :=
# When used like $(call TOxxx, ...) these turn a list of source files
# into the corresponding list of object files, dependency files,
# or both. When a source file has to be compiled with special flags,
# TOOBJSDEPS is used. Confusingly, TOOBJSDEPS includes preprocessed source
# file names, but this is what allows 'make src.i' to produce proper
# preprocessed source when src.c needs a customized compile flag.
# See Submakefile.skel for an example.
TOOBJS = $(patsubst %.cc,objects/%$(2).o,$(patsubst %.c,objects/%$(2).o,$(1)))
TODEPS = $(patsubst %.cc,depends/%$(2).d,$(patsubst %.c,depends/%$(2).d,$(1)))
#-not sure, something fishy here -mah
#TODEPS = $(patsubst %.cc,objects/%.d,$(patsubst %.c,objects/%.d,$(1)))
TOOBJSDEPS = $(call TOOBJS,$(1),$(2)) $(call TODEPS, $(1),$(2))
SUBMAKEFILES := $(patsubst %,%/Submakefile,$(SUBDIRS))
#$(info SUBMAKEFILES=$(SUBMAKEFILES))
-include $(wildcard $(SUBMAKEFILES))
# This checks that all the things listed in USERSRCS are either C files
# or C++ files
ASSERT_EMPTY = $(if $(1), $(error "Should be empty but is not: $(1)"))
ifdef TARGET_PLATFORM_BEAGLEBONE
# the beaglebone port adds .p (PRU assembly) source files, see hal/components
$(call ASSERT_EMPTY,$(filter-out %.c %.cc %.p %.js %.ph %.proto, $(USERSRCS)))
else
$(call ASSERT_EMPTY,$(filter-out %.c %.cc %.js %.proto, $(USERSRCS)))
endif
$(call ASSERT_EMPTY,$(filter-out %.c %.proto, $(RTSRCS)))
ifeq ($(BUILD_PYTHON),yes)
$(call TOOBJS,$(PYSRCS)) : EXTRAFLAGS += -fPIC $(call
cc-option,-fno-strict-aliasing)
USERSRCS += $(PYSRCS)
endif
# Find the list of object files for each type of source file
CUSERSRCS := $(filter %.c,$(USERSRCS))
CXXUSERSRCS := $(filter %.cc,$(USERSRCS))
CUSEROBJS = $(call TOOBJS,$(CUSERSRCS))
CXXUSEROBJS += $(call TOOBJS,$(CXXUSERSRCS))
# Find the list of build-arch object files for C sources
CUSERSRCS_BUILD := $(filter %.c,$(USERSRCS_BUILD))
CUSEROBJS_BUILD := $(call TOOBJS,$(CUSERSRCS_BUILD),_build)
ifeq ($(TRIVIAL_BUILD),no)
ifeq ($(USE_PROTOBUF),yes)
# force create of %.proto-dependent files and their deps
Makefile: $(GENERATED) $(PROTO_DEPS)
-include $(PROTO_DEPS)
endif
ifdef TARGET_PLATFORM_BEAGLEBONE
ifneq ($(PRU_DEPS),)
Makefile: $(PRU_DEPS)
READ_PRU_DEPS = $(wildcard $(PRU_DEPS))
$(shell echo 1>&2 Reading $(words $(READ_PRU_DEPS))/$(words $(PRU_DEPS)) PRU
dependency files)
-include $(wildcard $(READ_PRU_DEPS))
endif
endif
# Find the dependency filenames, then include them all
DEPS := $(sort $(patsubst %.o,%.d,$(CUSEROBJS) $(CXXUSEROBJS) \
$(CUSEROBJS_BUILD)))
READ_DEPS = $(wildcard $(DEPS))
$(shell echo 1>&2 Reading $(words $(READ_DEPS))/$(words $(DEPS)) dependency
files)
-include $(READ_DEPS)
UNREAD_DEPS = $(filter-out $(READ_DEPS), $(DEPS))
LEGACY_DEPS = $(patsubst objects/%, depends/%, $(UNREAD_DEPS))
READ_LEGACY_DEPS = $(wildcard $(LEGACY_DEPS))
ifneq ($(READ_LEGACY_DEPS),)
$(shell echo 1>&2 Reading $(words $(READ_LEGACY_DEPS)) old-style dependency
files)
-include $(READ_LEGACY_DEPS)
endif
$(shell echo 1>&2 Done reading dependencies)
endif
# Each directory in $(INCLUDES) is passed as a -I directory when compiling.
INCLUDE := $(patsubst %,-I%, $(INCLUDES))
ifeq ($(BUILD_PYTHON),yes)
INCLUDE += $(PYTHON_CPPFLAGS)
endif
# trap build errors by making it possible to compare configure SHA vs build SHA
# see configure.ac GIT_CONFIG_SHA for the configure-time string
GIT_BUILD_SHA := $(shell ../scripts/get-git-sha)
# complain if SHA's dont match
$(info $(shell ../scripts/check-build-vs-configure-sha))
# Compilation options. Perhaps some of these should come from Makefile.inc?
(CXXFLAGS now does)
INTEGER_OVERFLOW_FLAGS := $(call cc-option,-fwrapv) $(call cc-option,
-fno-strict-overflow)
OPT := $(INTEGER_OVERFLOW_FLAGS)
DEBUG := -g -Wall -funwind-tables
PROFILE_CFLAGS :=
PROFILE_LDFLAGS :=
CFLAGS := $(INCLUDE) $(OPT) $(DEBUG) $(PROFILE_CFLAGS) -DULAPI $(call
cc-option,-std=gnu99 -fgnu89-inline)
# enable runtime comparison of GIT_CONFIG_SHA (config.h) and GIT_BUILD_SHA
CFLAGS += -DGIT_BUILD_SHA=\"'$(GIT_BUILD_SHA)'\"
# make ck_pr.h happy:
CFLAGS += $(CK_CFLAGS)
# if not initialised use innocuous switch to prevent errors
ifeq ($(ARCH_CFLAGS),@ARCH_CFLAGS@)
ARCH_CFLAGS := -Wunused
endif
BASE_CXXFLAGS:= $(INCLUDE) $(CXXFLAGS) \
$(CK_CFLAGS) \
$(DEBUG) $(OPT) \
$(PROFILE_CFLAGS) \
-DGIT_BUILD_SHA=\"'$(GIT_BUILD_SHA)'\" \
$(ARCH_CFLAGS)
CXXFLAGS := $(BASE_CXXFLAGS) -DULAPI
RT_CXXFLAGS := $(BASE_CXXFLAGS)
ifeq ($(RUN_IN_PLACE),yes)
LDFLAGS += -L$(LIB_DIR) -Wl,-rpath,$(LIB_DIR)
else
LDFLAGS += -Wl,-rpath-link,../lib
endif
LDFLAGS += -Wl,--no-as-needed
# Rules to make .o (object) files
$(sort $(CUSEROBJS)) : objects/%.o: %.c
$(ECHO) Compiling $<
@mkdir -p $(dir $@)
@rm -f $@
$(Q)$(CC) -c $(CPPFLAGS) $(CFLAGS) $(EXTRAFLAGS) \
-MP -MD -MF "${@:.o=.d}" -MT "$@" \
$< -o $@
# Rules to make .o (object) files, build arch
$(sort $(CUSEROBJS_BUILD)) : objects/%_build.o: %.c
$(ECHO) Compiling $<
@mkdir -p $(dir $@)
@rm -f $@
$(Q)$(CC_FOR_BUILD) -c $(CFLAGS) $(EXTRAFLAGS) \
-MP -MD -MF "${@:.o=.d}" -MT "$@" \
$< -o $@
$(sort $(CXXUSEROBJS)) : objects/%.o: %.cc
$(ECHO) Compiling $<
@mkdir -p $(dir $@)
@rm -f $@
$(Q)$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(EXTRAFLAGS) \
-MP -MD -MF "${@:.o=.d}" -MT "$@" \
$< -o $@
ifeq ($(TRIVIAL_BUILD),no)
configure config.h.in: configure.ac
@echo "*** configure.ac has changed ***" >&2
@echo "Not running autoconf to avoid tainting universal build" >&2
@echo "Please investigate or start from scratch:" >&2
@echo "./autogen.sh && ./configure --your-configure-args..." >&2
@exit 1
# AUTOGEN_TARGET=configure ./autogen.sh
config.status: configure
if [ -f config.status ]; then ./config.status --recheck; else \
echo 1>&2 "*** linuxcnc is not configured. Run './configure' with
appropriate flags."; \
exit 1; \
fi
endif
Makefile: config.h
config.h: config.h.in config.status
@./config.status -q --header=$@
INFILES = \
../scripts/linuxcnc \
../scripts/realtime \
../scripts/haltcl \
../scripts/gen-rtapi.ini.sh \
Makefile.inc \
Makefile.modinc \
../tcl/linuxcnc.tcl \
../scripts/halrun \
../scripts/rip-environment \
../scripts/linuxcncmkdesktop \
../lib/python/nf.py \
../share/desktop-directories/cnc.directory \
../share/menus/CNC.menu \
../share/applications/linuxcnc.desktop \
../scripts/linuxcnc_var \
$(INFILES): %: %.in config.status
@./config.status --file=$@
default: $(INFILES)
# For each file to be copied to ../include, its location in the source tree
# is listed here. Note that due to $(INCLUDE), defined above, the include
# files in the source tree are the ones used when building linuxcnc. The copy
# in ../include is used when building external components of linuxcnc.
HEADERS := \
config.h \
emc/ini/emcIniFile.hh \
emc/ini/iniaxis.hh \
emc/ini/initool.hh \
emc/ini/initraj.hh \
emc/ini/inihal.hh \
emc/kinematics/cubic.h \
emc/kinematics/kinematics.h \
emc/kinematics/genhexkins.h \
emc/kinematics/genserkins.h \
emc/kinematics/pumakins.h \
emc/tp/tc.h \
emc/tp/tc_types.h \
emc/tp/tcq.h \
emc/tp/tp.h \
emc/tp/tp_types.h \
emc/tp/spherical_arc.h \
emc/tp/blendmath.h \
emc/tp/tp_shared.h \
emc/tp/tp_private.h \
emc/motion/emcmotcfg.h \
emc/motion/emcmotglb.h \
emc/motion/motion.h \
emc/motion/motion_id.h \
emc/motion/usrmotintf.h \
emc/motion/state_tag.h \
emc/nml_intf/canon.hh \
emc/nml_intf/canon_position.hh \
emc/nml_intf/emctool.h \
emc/nml_intf/emc.hh \
emc/nml_intf/emc_nml.hh \
emc/nml_intf/emccfg.h \
emc/nml_intf/emcglb.h \
emc/nml_intf/emcpos.h \
emc/nml_intf/emcpose.h \
emc/nml_intf/interp_return.hh \
emc/nml_intf/interpl.hh \
emc/nml_intf/motion_types.h \
emc/nml_intf/debugflags.h \
emc/rs274ngc/interp_internal.hh \
emc/rs274ngc/interp_base.hh \
emc/rs274ngc/modal_state.hh \
emc/rs274ngc/rs274ngc.hh \
hal/lib/hal_accessor.h \
hal/lib/hal_accessor_macros.h \
hal/lib/config_module.h \
hal/lib/hal_group.h \
hal/lib/hal.h \
hal/lib/hal_iring.h \
hal/lib/hal_internal.h \
hal/lib/hal_iter.h \
hal/lib/hal_list.h \
hal/lib/hal_logging.h \
hal/lib/hal_object.h \
hal/lib/hal_object_selectors.h \
hal/lib/hal_parport.h \
hal/lib/hal_priv.h \
hal/lib/hal_rcomp.h \
hal/lib/hal_ring.h \
hal/lib/hal_types.h \
hal/lib/vtable.h \
hal/drivers/hal_spi.h \
libnml/buffer/locmem.hh \
libnml/buffer/memsem.hh \
libnml/buffer/phantom.hh \
libnml/buffer/physmem.hh \
libnml/buffer/recvn.h \
libnml/buffer/rem_msg.hh \
libnml/buffer/sendn.h \
libnml/buffer/shmem.hh \
libnml/buffer/tcpmem.hh \
libnml/cms/cms.hh \
libnml/cms/cms_aup.hh \
libnml/cms/cms_cfg.hh \
libnml/cms/cms_dup.hh \
libnml/cms/cms_srv.hh \
libnml/cms/cms_up.hh \
libnml/cms/cms_user.hh \
libnml/cms/cms_xup.hh \
libnml/cms/cmsdiag.hh \
libnml/cms/tcp_opts.hh \
libnml/cms/tcp_srv.hh \
libnml/inifile/inifile.h \
libnml/inifile/inifile.hh \
libnml/linklist/linklist.hh \
libnml/nml/cmd_msg.hh \
libnml/nml/nml.hh \
libnml/nml/nml_mod.hh \
libnml/nml/nml_oi.hh \
libnml/nml/nml_srv.hh \
libnml/nml/nml_type.hh \
libnml/nml/nmldiag.hh \
libnml/nml/nmlmsg.hh \
libnml/nml/stat_msg.hh \
libnml/os_intf/_sem.h \
libnml/os_intf/sem.hh \
libnml/os_intf/_shm.h \
libnml/os_intf/shm.hh \
libnml/os_intf/_timer.h \
libnml/os_intf/timer.hh \
libnml/posemath/posemath.h \
libnml/posemath/gotypes.h \
libnml/posemath/gomath.h \
libnml/posemath/sincos.h \
libnml/rcs/rcs.hh \
libnml/rcs/rcs_exit.hh \
libnml/rcs/rcs_print.hh \
libnml/rcs/rcsversion.h \
machinetalk/build/machinetalk/protobuf/message.pb.h \
machinetalk/build/machinetalk/protobuf/types.pb.h \
machinetalk/build/machinetalk/protobuf/canon.npb.h \
machinetalk/build/machinetalk/protobuf/config.pb.h \
machinetalk/build/machinetalk/protobuf/firmware.npb.h \
machinetalk/build/machinetalk/protobuf/jplan.pb.h \
machinetalk/build/machinetalk/protobuf/message.npb.h \
machinetalk/build/machinetalk/protobuf/motcmds.pb.h \
machinetalk/build/machinetalk/protobuf/object.npb.h \
machinetalk/build/machinetalk/protobuf/preview.pb.h \
machinetalk/build/machinetalk/protobuf/rtapicommand.npb.h \
machinetalk/build/machinetalk/protobuf/rtapi_message.pb.h \
machinetalk/build/machinetalk/protobuf/task.npb.h \
machinetalk/build/machinetalk/protobuf/test.pb.h \
machinetalk/build/machinetalk/protobuf/value.npb.h \
machinetalk/build/machinetalk/protobuf/canon.pb.h \
machinetalk/build/machinetalk/protobuf/emcclass.npb.h \
machinetalk/build/machinetalk/protobuf/firmware.pb.h \
machinetalk/build/machinetalk/protobuf/log.npb.h \
machinetalk/build/machinetalk/protobuf/nanopb.npb.h \
machinetalk/build/machinetalk/protobuf/object.pb.h \
machinetalk/build/machinetalk/protobuf/ros.npb.h \
machinetalk/build/machinetalk/protobuf/rtapicommand.pb.h \
machinetalk/build/machinetalk/protobuf/status.npb.h \
machinetalk/build/machinetalk/protobuf/task.pb.h \
machinetalk/build/machinetalk/protobuf/types.npb.h \
machinetalk/build/machinetalk/protobuf/value.pb.h \
machinetalk/build/machinetalk/protobuf/config.npb.h \
machinetalk/build/machinetalk/protobuf/emcclass.pb.h \
machinetalk/build/machinetalk/protobuf/jplan.npb.h \
machinetalk/build/machinetalk/protobuf/log.pb.h \
machinetalk/build/machinetalk/protobuf/motcmds.npb.h \
machinetalk/build/machinetalk/protobuf/nanopb.pb.h \
machinetalk/build/machinetalk/protobuf/preview.npb.h \
machinetalk/build/machinetalk/protobuf/ros.pb.h \
machinetalk/build/machinetalk/protobuf/rtapi_message.npb.h \
machinetalk/build/machinetalk/protobuf/status.pb.h \
machinetalk/build/machinetalk/protobuf/test.npb.h \
machinetalk/nanopb/pb.h \
machinetalk/nanopb/pb_common.h \
machinetalk/nanopb/pb_encode.h \
machinetalk/nanopb/pb_decode.h \
rtapi/multiframe_flag.h \
rtapi/rtapi.h \
rtapi/rtapi_app.h \
rtapi/rtapi_atomics.h \
rtapi/rtapi_bitops.h \
rtapi/rtapi_byteorder.h \
rtapi/rtapi_export.h \
rtapi/rtapi_compat.h \
rtapi/rtapi_hexdump.h \
rtapi/rtapi_int.h \
rtapi/rtapi_kdetect.h \
rtapi/rtapi_limits.h \
rtapi/rtapi_math.h \
rtapi/rtapi_math64.h \
rtapi/rtapi_common.h \
rtapi/rtapi_exception.h \
rtapi/rtapi_global.h \
rtapi/rtapi_shmkeys.h \
rtapi/rtapi_io.h \
rtapi/rtapi_ctype.h \
rtapi/rtapi_errno.h \
rtapi/rtapi_string.h \
rtapi/rtapi_pci.h \
rtapi/rtapi_proc.h \
rtapi/rtapi_heap.h \
rtapi/rtapi_heap_private.h \
rtapi/ring.h \
rtapi/triple-buffer.h \
rtapi/multiframe.h \
rtapi/rtapi_mbarrier.h \
rtapi/$(THREADS_SOURCE).h \
rtapi/shmdrv/shmdrv.h
## the "headers" target installs all the header files in ../include
.PHONY: headers
HEADERS := $(patsubst %,../include/%,$(foreach h,$(HEADERS),$(notdir $h)))
headers: $(HEADERS)
# install header files as part of the build
TARGETS += headers
# Add headers to this list that need to go into subdirectories; their
# respective Submakefiles will need to provide rules to copy them into
# ../install.
headers: $(SUBDIRECTORY_HEADERS)
# Add converting of %.po files
TARGETS += $(patsubst po/%.po, ../share/locale/%/LC_MESSAGES/linuxcnc.mo,
$(wildcard po/*.po))
TARGETS += $(patsubst po/gmoccapy/%.po,
../share/locale/%/LC_MESSAGES/gmoccapy.mo, $(wildcard po/gmoccapy/*.po))
TARGETS += $(patsubst po/%.po, objects/%.msg, $(wildcard po/*.po))
# tooledit as standalone app:
TARGETS += ../bin/tooledit
../bin/tooledit: Makefile
$(Q)rm -f $@
$(Q)(echo "#!$(TCLSH)")>|$@
$(Q)(echo "source $(EMC2_TCL_LIB_DIR)/tooledit.tcl")>>$@
$(Q)(echo "standalone_tooledit")>>$@
$(Q)chmod +x $@
# ngcgui as standalone app:
TARGETS += ../bin/ngcgui
../bin/ngcgui: Makefile
$(Q)rm -f $@
$(Q)(echo "#!$(TCLSH)")>|$@
$(Q)(echo "source $(EMC2_TCL_LIB_DIR)/ngcgui.tcl")>>$@
$(Q)(echo "::ngcgui::standalone_ngcgui")>>$@
$(Q)chmod +x $@
# pyngcgui as standalone app:
TARGETS += ../bin/pyngcgui
../bin/pyngcgui: Makefile
$(Q)rm -f $@
$(Q)(echo "#!$(PYTHON)")>|$@
$(Q)(echo "import pyngcgui")>>$@
$(Q)(echo "pyngcgui.standalone_pyngcgui()")>>$@
$(Q)chmod +x $@
# gremlin_view as standalone app:
TARGETS += ../bin/gremlin_view
../bin/gremlin_view: Makefile
$(Q)rm -f $@
$(Q)(echo "#!$(PYTHON)")>|$@
$(Q)(echo "import gremlin_view")>>$@
$(Q)(echo "gremlin_view.standalone_gremlin_view()")>>$@
$(Q)chmod +x $@
# halshow as standalone app:
TARGETS += ../bin/halshow
../bin/halshow: Makefile
$(Q)rm -f $@
$(Q)(echo "#!$(TCLSH)")>|$@
$(Q)(echo "source $(EMC2_TCL_LIB_DIR)/bin/halshow.tcl")>>$@
$(Q)chmod +x $@
# And make userspace depend on $(TARGETS)
userspace: $(TARGETS)
ifeq ($(BUILD_PYTHON),yes)
pythonclean:
rm -f $(PYTARGETS)
find ../lib/python -name '*.so' -exec rm {} +
python: $(PYTARGETS)
userspace: python
clean: pythonclean cscopeclean
endif
# This is the gateway into the crazy world of "kbuild", the linux 2.6 system
# for building kernel modules. Other kernel module build styles need to be
# accomodated here.
#
# (don't build when 'BUILD_ALL_FLAVORS' or 'BUILD_THREADS_MODULES' are set;
# these are intermediate make runs)
ifeq ($(BUILD_SYS)+$(BUILD_THREAD_MODULES),kbuild+yes)
modules: $(OBJDIR)/.separate-kbuild-artifacts-hack.stamp
mkdir -p $(RTLIBDIR)
$(PYTHON) modsilent.py $(MAKE) \
-C $(KERNELDIR) \
SUBDIRS=$(BASEPWD)/$(OBJDIR) \
CC="$(CC)" KBUILD_VERBOSE=$(BUILD_VERBOSE) modules
cp $(OBJDIR)/Module.symvers $(OBJDIR)/*$(MODULE_EXT) $(RTLIBDIR)
endif # BUILD_SYS == 'kbuild'
# It looks almost impossible to coerce kbuild into putting build
# artifacts outside the source tree. The universal build needs to
# keep these artifacts separate for each kthread flavor. To solve
# this, create a link tree in objects/rtapi-<flavor> with everything
# needed to build kernel modules.
#
# Then in the above 'modules:' target, cd to the link tree and call
# kbuild.
MODULE_SOURCE_DIRS = emc hal libnml rtapi workaround machinetalk
MODULE_SOURCES = Makefile* config* modsilent.py
$(OBJDIR)/.separate-kbuild-artifacts-hack.stamp:
mkdir -p $(OBJDIR)
# hard-link contents of $(MODULE_SOURCE_DIRS) to # $(OBJDIR)
# never follow symbolic links
cp -rlfd $(MODULE_SOURCE_DIRS) $(OBJDIR)
cp -lf $(MODULE_SOURCES) $(OBJDIR)
ifeq ($(BUILD_SYS),kbuild)
# kbuild needs a full copy of this tree with
cp -rlf halcomp-srcs $(OBJDIR)
endif
ln -sf $(BASEPWD)/../bin $(OBJDIR)/..
ln -sf $(BASEPWD)/../scripts $(OBJDIR)/..
touch $@
# These rules clean things up. 'modclean' cleans files generated by 'modules'
# (except that it doesn't remove the modules that were copied to rtlib)
# 'clean' cleans everything but dependency files, and 'depclean' cleans them
# too.
modclean:
find -name '.*.cmd' -or -name '*.ko' -or -name '*.mod.c' -or -name
'*.mod.o' | xargs rm -f
-rm -rf .tmp_versions
-rm -rf halcomp-srcs
find . -name .tmp_versions |xargs rm -rf
-rm -f $(RTLIBDIR)/*.ko
-rm -f $(RTLIBDIR)/*.so
depclean:
-rm -rf depends
docclean:
-rm -f ../man/man9/*.9icomp
-rm -f ../man/doc/man9/*.asciidoc
clean: depclean modclean docclean
find . -name '*.o' |xargs rm -f
-rm -rf objects
-rm -f $(TARGETS)
for flav in $(BUILD_THREAD_FLAVORS); do \
rm -rf ../lib/$$flav; \
done
-rm -rf ../rtlib ../libexec
rm -f ../etc/linuxcnc/rtapi.ini
-rm -f $(COPY_CONFIGS)
-rm -f $(RTLIBDIR)/*.$(MODULE_EXT)
-rm -f hal/components/conv_*.comp
-rm -f hal/components/*_bin.h # generated by pasm for bb platform
rm -rf ../share/linuxcnc/stepconf
-rm -rf ../libexec
# So that nothing is built as root, this rule does not depend on the touched
# files (Note that files in depends/ might be rebuilt, and there's little that
# can be done about it)
fix_perms = test -f $(1) && chown root $(1) && chmod 4750 $(1) || true
ifeq ($(BUILD_DRIVERS),yes)
ifeq ($(HAVE_KERNEL_THREADS),yes)
CHECK_KFLAV_SWITCH=-k
endif
setuid:
ifeq ($(HAVE_KERNEL_THREADS),yes)
$(call fix_perms,../libexec/linuxcnc_module_helper)
endif
$(call fix_perms,../libexec/pci_read)
$(call fix_perms,../libexec/pci_write)
$(foreach f,$(BUILD_THREAD_FLAVORS),\
$(call fix_perms,../libexec/rtapi_app_$(f));)
# check system configuration: logging, ulimits, udev
@-../scripts/check-system-configuration.sh $(CHECK_KFLAV_SWITCH)
else
setuid:
@echo "'make setuid' is not needed if hardware drivers are not used"
endif
# These rules allows a header file from this directory to be installed into
# ../include. A pair of rules like these will exist in the Submakefile
# of each file that contains headers.
../include/%.h: %.h
@mkdir -p $(dir $@)
$(Q)-cp $^ $@
../include/%.hh: %.hh
@mkdir -p $(dir $@)
$(Q)-cp $^ $@
DIR=install -d -m 0755 -o root
FILE=install -m 0644 -o root
TREE=cp -dR
CONFIGFILE=install -m 0644
EXE=install -m 0755 -o root
SETUID=install -m 4755 -o root
GLOB=$(wildcard $(1))
ifeq ($(RUN_IN_PLACE),yes)
define ERROR_MESSAGE
You configured run-in-place, but are trying to install.
For an installable version, run configure without --enable-run-in-place
and rebuild
endef
install:
$(error $(ERROR_MESSAGE))
MENUS = ../share/menus/CNC.menu \
../share/desktop-directories/cnc.directory \
../share/applications/linuxcnc.desktop \
install-menus install-menu: $(MENUS)
mkdir -p $(HOME)/.config/menus/applications-merged
cp $< $(HOME)/.config/menus/applications-merged
else
DOCS_HELP=$(call GLOB,../help/*)
NC_FILES=$(filter-out %/butterfly.ngc,$(call GLOB,../nc_files/*))
TCL=$(call GLOB,../tcl/*.tcl)
TCL_BIN=$(call GLOB,../tcl/bin/*.tcl) ../tcl/bin/popimage
install-test:
@if type -path dpkg-query > /dev/null 2>&1 ; then \
if dpkg-query -S $(DESTDIR)/usr/bin/linuxcnc > /dev/null 2>&1
|| dpkg-query -S $(DESTDIR)/usr/bin/emc > /dev/null 2>&1 ; then \
echo "*** Error: Package version installed in
$(DESTDIR)/usr"; \
echo "Use './configure --enable-run-in-place' or
uninstall the linuxcnc package"; \
echo "before installing."; \
exit 1; \
fi \
fi
install: install-test install-kernel-dep install-kernel-indep
$(ECHO) "Installed in $(DESTDIR) with prefix $(prefix)"
install-dirs:
$(DIR) $(DESTDIR)$(EMC2_RTLIB_DIR) \
$(DESTDIR)$(sysconfdir)/linuxcnc $(DESTDIR)$(bindir) \
$(DESTDIR)$(includedir)/linuxcnc \
$(DESTDIR)$(docdir) $(DESTDIR)$(ncfilesdir) \
$(DESTDIR)$(EMC2_LIBEXEC_DIR) \
$(DESTDIR)/etc/X11/app-defaults $(DESTDIR)$(tcldir)/bin \
$(DESTDIR)$(tcldir)/scripts \
$(DESTDIR)$(mandir)/man1 \
$(DESTDIR)$(mandir)/man3 \
$(DESTDIR)$(mandir)/man9 \
$(DESTDIR)$(tcldir)/msgs \
$(DESTDIR)$(localedir)/de/LC_MESSAGES \
$(DESTDIR)$(datadir)/axis/images \
$(DESTDIR)$(datadir)/axis/tcl \
$(DESTDIR)$(datadir)/gscreen/images \
$(DESTDIR)$(datadir)/gscreen/skins \
$(DESTDIR)$(datadir)/gmoccapy/images \
$(DESTDIR)$(datadir)/glade3/catalogs \
$(DESTDIR)$(datadir)/glade3/pixmaps \
$(DESTDIR)$(datadir)/gtksourceview-2.0/language-specs \
$(DESTDIR)$(datadir)/linuxcnc/stepconf \
$(DESTDIR)$(datadir)/linuxcnc/pncconf/pncconf-help \
$(DESTDIR)$(sysconfdir)/rsyslog.d \
$(DESTDIR)$(sysconfdir)/security/limits.d \
$(DESTDIR)$(sysconfdir)/udev/rules.d \
$(DESTDIR)$(sampleconfsdir) \
$(addprefix $(DESTDIR), $(INSTALL_DIRS))
ifeq ($(BUILD_EMCWEB),yes)
$(DIR) $(DESTDIR)$(datadir)/linuxcnc/doc-root/css/images \
$(DESTDIR)$(datadir)/linuxcnc/doc-root/js \
$(DESTDIR)$(datadir)/linuxcnc/doc-root/res
endif
ifeq ($(USERMODE_PCI),yes)
$(DIR) $(DESTDIR)$(includedir)/linuxcnc/userpci
endif
install-kernel-indep: install-dirs
$(FILE) objects/*.msg $(DESTDIR)$(tcldir)/msgs
$(EXE) ../scripts/realtime $(DESTDIR)$(bindir)
$(EXE) ../scripts/halrun $(DESTDIR)$(bindir)
$(EXE) ../scripts/haltcl $(DESTDIR)$(bindir)
$(EXE) ../scripts/simulate_probe $(DESTDIR)$(bindir)
$(EXE) ../scripts/sim_pin $(DESTDIR)$(bindir)
$(FILE) ../*.png ../*.gif $(DESTDIR)$(datadir)/linuxcnc
# install all the sample configs, including subdirs (tar is required on
debian systems, and common on others)
((cd ../configs && tar --exclude CVS --exclude .cvsignore --exclude
.gitignore -cf - .) | (cd $(DESTDIR)$(sampleconfsdir) && tar -xf -))
$(EXE) $(filter ../bin/%,$(TARGETS)) $(DESTDIR)$(bindir)
$(EXE) ../scripts/linuxcnc $(DESTDIR)$(bindir)
$(EXE) ../scripts/machinekit $(DESTDIR)$(bindir)
$(EXE) ../scripts/linuxcnc_info $(DESTDIR)$(bindir)
$(EXE) ../scripts/linuxcnc_var $(DESTDIR)$(bindir)
$(EXE) ../scripts/latency-test $(DESTDIR)$(bindir)
ifeq ($(HAVE_WORKING_BLT),yes)
$(EXE) ../scripts/latency-plot $(DESTDIR)$(bindir)
$(EXE) ../scripts/latency-histogram $(DESTDIR)$(bindir)
endif
$(EXE) ../scripts/pyvcp_demo $(DESTDIR)$(bindir)
$(EXE) ../scripts/gladevcp_demo $(DESTDIR)$(bindir)
$(EXE) ../scripts/linuxcncmkdesktop $(DESTDIR)$(bindir)
$(FILE) $(filter ../lib/%.a ../lib/%.so.0,$(TARGETS))
$(DESTDIR)$(libdir)
cp --no-dereference $(filter ../lib/%.so, $(TARGETS))
$(DESTDIR)$(libdir)
$(FILE) ../rtlib/ulapi-*.so $(DESTDIR)$(EMC2_RTLIB_BASE_DIR)
-ldconfig $(DESTDIR)$(libdir)
$(FILE) $(HEADERS) $(DESTDIR)$(includedir)/linuxcnc/
ifeq ($(USERMODE_PCI),yes)
$(FILE) $(USERPCI_HEADERS) $(DESTDIR)$(includedir)/linuxcnc/userpci
endif
$(FILE) $(DOCS_HELP) $(DESTDIR)$(docdir)
$(TREE) $(NC_FILES) $(DESTDIR)$(ncfilesdir)
$(EXE) ../nc_files/M101 $(DESTDIR)$(ncfilesdir)
$(FILE) ../tcl/TkLinuxCNC $(DESTDIR)/etc/X11/app-defaults
$(FILE) ../app-defaults/XEmc $(DESTDIR)/etc/X11/app-defaults
$(FILE) Makefile.modinc $(DESTDIR)$(datadir)/linuxcnc
$(FILE) Makefile.inc $(DESTDIR)$(datadir)/linuxcnc
$(EXE) $(TCL) $(DESTDIR)$(tcldir)
$(FILE) ../tcl/hal.so $(DESTDIR)$(tcldir)
$(FILE) ../tcl/linuxcnc.so $(DESTDIR)$(tcldir)
$(FILE) ../tcl/pkgIndex.tcl $(DESTDIR)$(tcldir)
$(EXE) $(TCL_BIN) $(DESTDIR)$(tcldir)/bin
$(FILE) ../tcl/scripts/balloon.tcl ../tcl/scripts/emchelp.tcl
$(DESTDIR)$(tcldir)/scripts
$(EXE) ../tcl/scripts/Set_Coordinates.tcl $(DESTDIR)$(tcldir)/scripts
$(FILE) ../share/linuxcnc/*.glade $(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/linuxcnc/stepconf/*.glade
$(DESTDIR)$(prefix)/share/linuxcnc/stepconf
$(FILE) ../share/linuxcnc/touchy.glade
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/linuxcnc/gscreen.glade
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/linuxcnc/gscreen2.glade
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/gmoccapy/gmoccapy.glade
$(DESTDIR)$(prefix)/share/gmoccapy
$(FILE) ../share/linuxcnc/pncconf.glade
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/linuxcnc/gremlin_view.ui
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../share/linuxcnc/popupkeyboard.ui
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../configs/common/linuxcnc.nml
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) ../src/emc/usr_intf/pncconf/pncconf-help/*.txt
$(DESTDIR)$(prefix)/share/linuxcnc/pncconf/pncconf-help
$(FILE) ../src/emc/usr_intf/pncconf/pncconf-help/*.png
$(DESTDIR)$(prefix)/share/linuxcnc/pncconf/pncconf-help
$(FILE) ../lib/python/gladevcp/hal_python.xml
$(DESTDIR)$(datadir)/glade3/catalogs/
$(FILE) ../lib/python/gladevcp/widget*.png
$(DESTDIR)$(datadir)/glade3/pixmaps/
$(FILE) ../share/gtksourceview-2.0/language-specs/*.lang
$(DESTDIR)$(datadir)/gtksourceview-2.0/language-specs/
$(FILE) rtapi/rsyslogd-linuxcnc.conf
$(DESTDIR)$(sysconfdir)/rsyslog.d/linuxcnc.conf
$(FILE) rtapi/shmdrv/limits.d-machinekit.conf \
$(DESTDIR)$(sysconfdir)/security/limits.d/machinekit.conf
$(FILE) rtapi/shmdrv/shmdrv.rules \
$(DESTDIR)$(sysconfdir)/udev/rules.d/50-shmdrv.rules
ifeq ($(BUILD_EMCWEB),yes)
$(FILE) ../www/css/images/*
$(DESTDIR)$(datadir)/linuxcnc/doc-root/css/images
$(FILE) ../www/css/*css $(DESTDIR)$(datadir)/linuxcnc/doc-root/css
$(FILE) ../www/js/*js $(DESTDIR)$(datadir)/linuxcnc/doc-root/js
$(FILE) ../www/res/* $(DESTDIR)$(datadir)/linuxcnc/doc-root/res
$(FILE) ../www/*html $(DESTDIR)$(datadir)/linuxcnc/doc-root/
endif
$(FILE) ../etc/linuxcnc/machinekit.ini $(DESTDIR)$(sysconfdir)/linuxcnc
$(EXE) ../bin/profile_axis $(DESTDIR)$(bindir)
$(EXE) ../bin/mank $(DESTDIR)$(bindir)
ifeq ($(BUILD_PYTHON),yes)
install-kernel-indep: install-python
install-python: install-dirs
$(DIR) $(DESTDIR)$(SITEPY) $(DESTDIR)$(SITEPY)/rs274
$(DIR) $(DESTDIR)$(SITEPY)/touchy
$(DIR) $(DESTDIR)$(SITEPY)/gscreen
$(DIR) $(DESTDIR)$(SITEPY)/gmoccapy
$(DIR) $(DESTDIR)$(SITEPY)/gladevcp
$(DIR) $(DESTDIR)$(SITEPY)/stepconf
$(DIR) $(DESTDIR)$(SITEPY)/machinekit
$(DIR) $(DESTDIR)$(SITEPY)/machinekit/nosetests
$(DIR) $(DESTDIR)$(SITEPY)/machinetalk
$(DIR) $(DESTDIR)$(SITEPY)/machinetalk/protobuf
$(DIR) $(DESTDIR)$(SITEPY)/fdm
$(DIR) $(DESTDIR)$(SITEPY)/fdm/config
$(DIR) $(DESTDIR)$(datadir)/fdm/thermistor_tables
$(DIR) $(DESTDIR)$(SITEPY)/drivers
$(FILE) ../lib/python/*.py ../lib/python/*.so $(DESTDIR)$(SITEPY)
$(FILE) ../lib/python/rs274/*.py $(DESTDIR)$(SITEPY)/rs274
$(FILE) ../lib/python/touchy/*.py $(DESTDIR)$(SITEPY)/touchy
$(FILE) ../lib/python/gscreen/*.py $(DESTDIR)$(SITEPY)/gscreen
$(FILE) ../lib/python/gmoccapy/*.py $(DESTDIR)$(SITEPY)/gmoccapy
$(FILE) ../lib/python/gladevcp/*.py $(DESTDIR)$(SITEPY)/gladevcp
$(FILE) ../lib/python/gladevcp/*.glade $(DESTDIR)$(SITEPY)/gladevcp
$(FILE) ../lib/python/stepconf/*.py $(DESTDIR)$(SITEPY)/stepconf
$(FILE) ../lib/python/machinekit/*.py $(DESTDIR)$(SITEPY)/machinekit/
$(FILE) ../lib/python/machinekit/nosetests/*.py
$(DESTDIR)$(SITEPY)/machinekit/nosetests
$(FILE) ../lib/python/machinekit/*.so $(DESTDIR)$(SITEPY)/machinekit/
$(FILE) ../lib/python/machinetalk/*.py $(DESTDIR)$(SITEPY)/machinetalk/
$(FILE) ../lib/python/machinetalk/protobuf/*.py
$(DESTDIR)$(SITEPY)/machinetalk/protobuf/
$(FILE) ../lib/python/fdm/*.py $(DESTDIR)$(SITEPY)/fdm
$(FILE) ../lib/python/fdm/config/*.py $(DESTDIR)$(SITEPY)/fdm/config
$(FILE) ../lib/python/drivers/*.py $(DESTDIR)$(SITEPY)/drivers
$(EXE) ../bin/stepconf $(DESTDIR)$(bindir)
$(EXE) ../bin/pncconf $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_input $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_gpio_mcp23017 $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_pwm_pca9685 $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_storage $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_temp_ads7828 $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_temp_bbb $(DESTDIR)$(bindir)
$(EXE) ../bin/pyvcp $(DESTDIR)$(bindir)
$(EXE) ../bin/gladevcp $(DESTDIR)$(bindir)
$(EXE) ../bin/axis $(DESTDIR)$(bindir)
$(EXE) ../bin/axis-remote $(DESTDIR)$(bindir)
$(EXE) ../bin/debuglevel $(DESTDIR)$(bindir)
$(EXE) ../bin/linuxcnctop $(DESTDIR)$(bindir)
$(EXE) ../bin/mdi $(DESTDIR)$(bindir)
$(EXE) ../bin/hal_manualtoolchange $(DESTDIR)$(bindir)
$(EXE) ../bin/image-to-gcode $(DESTDIR)$(bindir)
$(EXE) ../bin/touchy $(DESTDIR)$(bindir)
$(EXE) ../bin/gscreen $(DESTDIR)$(bindir)
$(EXE) ../bin/gmoccapy $(DESTDIR)$(bindir)
$(EXE) $(patsubst %.py,../bin/%,$(VISMACH_PY)) $(DESTDIR)$(bindir)
$(FILE) ../share/linuxcnc/machinekit-wizard.gif
$(DESTDIR)$(prefix)/share/linuxcnc
$(FILE) emc/usr_intf/axis/etc/axis_light_background $(DESTDIR)$(docdir)
$(FILE) emc/usr_intf/axis/README $(DESTDIR)$(docdir)/README.axis
$(FILE) ../share/axis/images/*.png ../share/axis/images/*.gif
../share/axis/images/*.xbm ../share/axis/images/*.ngc
$(DESTDIR)$(datadir)/axis/images
$(FILE) ../share/axis/tcl/*.tcl $(DESTDIR)$(datadir)/axis/tcl
$(FILE) ../share/gscreen/images/*.gif
$(DESTDIR)$(datadir)/gscreen/images
$(TREE) ../share/gscreen/skins/* $(DESTDIR)$(datadir)/gscreen/skins
$(FILE) ../share/gmoccapy/images/*.png ../share/gmoccapy/images/*.gif
../share/gmoccapy/images/*.svg $(DESTDIR)$(datadir)/gmoccapy/images
$(FILE) ../share/fdm/thermistor_tables/*.txt
$(DESTDIR)$(datadir)/fdm/thermistor_tables
$(EXE) ../bin/configserver $(DESTDIR)$(bindir)
$(EXE) ../bin/videoserver $(DESTDIR)$(bindir)
$(EXE) ../bin/mkwrapper $(DESTDIR)$(bindir)
$(EXE) ../bin/mklauncher $(DESTDIR)$(bindir)
$(EXE) ../bin/gremlin $(DESTDIR)$(bindir)
$(EXE) ../bin/lintini $(DESTDIR)$(bindir)
$(EXE) ../bin/teach-in $(DESTDIR)$(bindir)
$(EXE) ../bin/tracking-test $(DESTDIR)$(bindir)
$(EXE) ../bin/yapps $(DESTDIR)$(bindir)
$(EXE) ../scripts/gcode-to-ngc $(DESTDIR)$(bindir)
$(EXE) ../scripts/g1-to-g23 $(DESTDIR)$(bindir)
$(EXE) ../scripts/hal-graph $(DESTDIR)$(bindir)
endif
install-kernel-dep: install-dirs
$(SETUID) ../libexec/rtapi_app_* $(DESTDIR)$(EMC2_LIBEXEC_DIR)
ifeq ($(HAVE_KERNEL_THREADS),yes)
$(SETUID) ../libexec/linuxcnc_module_helper
$(DESTDIR)$(EMC2_LIBEXEC_DIR)
endif
ifeq ($(BUILD_DRIVERS),yes)
$(SETUID) ../libexec/pci_write $(DESTDIR)$(EMC2_LIBEXEC_DIR)
$(SETUID) ../libexec/pci_read $(DESTDIR)$(EMC2_LIBEXEC_DIR)
endif
$(EXE) ../libexec/inivar $(DESTDIR)$(EMC2_LIBEXEC_DIR)
$(EXE) ../libexec/rtapi_msgd $(DESTDIR)$(EMC2_LIBEXEC_DIR)
$(EXE) ../libexec/flavor $(DESTDIR)$(EMC2_LIBEXEC_DIR)
$(FILE) ../etc/linuxcnc/rtapi.ini $(DESTDIR)$(sysconfdir)/linuxcnc
# RTAPI modules: install userland flavor .so modules into
# e.g. /usr/lib/linuxcnc/modules and kthread flavor .ko
# modules for each kver into e.g. /lib/modules/<kver>/linuxcnc
for flavor in $(BUILD_THREAD_FLAVORS); do \
if test $${flavor%-kernel} = $${flavor}; then \
echo Installing modules for userland flavor $$flavor; \
$(DIR) $(DESTDIR)$(EMC2_RTLIB_BASE_DIR)/$$flavor; \
$(FILE) ../rtlib/$$flavor/* \
$(DESTDIR)$(EMC2_RTLIB_BASE_DIR)/$$flavor; \
else \
echo Installing modules for kthreads flavor $$flavor; \
for srcdir in ../rtlib/$$flavor/*; do \
kver=`basename $$srcdir`; \
echo Installing modules for flavor $$flavor, kver $$kver; \
$(DIR) $(DESTDIR)/lib/modules/$$kver/linuxcnc; \
$(FILE) $$srcdir/* $(DESTDIR)/lib/modules/$$kver/linuxcnc; \
done; \
fi; \
done
ifeq ($(USE_SHMDRV),yes)
for srcdir in ../rtlib/shmdrv/*; do \
kver=`basename $$srcdir`; \
echo Installing shmdrv.ko module for kernel version $$kver; \
$(DIR) $(DESTDIR)/lib/modules/$$kver/linuxcnc; \
$(FILE) $$srcdir/* $(DESTDIR)/lib/modules/$$kver/linuxcnc; \
done;
endif
endif # ! RUN_IN_PLACE
CONF=../configs
COMMON=$(CONF)/common
CONFILES=$(addsuffix /$(1), $(filter-out $(COMMON) $(CONF),\
${shell find ${CONF} -type d -print}))
.PHONY: configs
COPY_CONFIGS = $(patsubst %,../configs/%/core_stepper.hal, \
sim \
by_interface/parport/stepper \
by_machine/sherline/Sherline3Axis \
by_machine/sherline/SherlineLathe \
by_machine/cooltool \
by_interface/parport/classicladder/demo_step_cl)
COPY_CONFIGS += $(patsubst %,../configs/%/core_servo.hal, \
sim \
by_interface/vitalsystems \
by_interface/servotogo \
by_interface/vigilant)
COPY_CONFIGS += $(patsubst %,../configs/%/core_sim.hal, \
sim)
COPY_CONFIGS += $(patsubst %,../configs/%/core_sim9.hal, \
sim)
COPY_CONFIGS += $(patsubst %,../configs/%/axis_manualtoolchange.hal, \
sim \
by_interface/pluto/lathe-pluto\
by_interface/parport/plasma-thc-sim)
show_configs_copy_stuff:
@echo CONFILES=$(CONFILES)
@echo CALL:$(call CONFILES,axis_manualtoolchange.hal)
@echo CALL:$(call CONFILES,core_stepper.hal)
@echo CALL:$(call CONFILES,core_servo.hal)
@echo CALL:$(call CONFILES,core_sim.hal)
@echo CALL:$(call CONFILES,core_sim9.hal)
@echo COPY_CONFIGS=$(COPY_CONFIGS)
configs: $(COPY_CONFIGS)
$(call CONFILES,axis_manualtoolchange.hal): %/axis_manualtoolchange.hal:
../configs/common/axis_manualtoolchange.hal
$(Q)-cp $< $@
$(call CONFILES,core_stepper.hal): %/core_stepper.hal:
../configs/common/core_stepper.hal
$(Q)-cp $< $@
$(call CONFILES,core_servo.hal): %/core_servo.hal:
../configs/common/core_servo.hal
$(Q)-cp $< $@
$(call CONFILES,core_sim.hal): %/core_sim.hal: ../configs/common/core_sim.hal
$(Q)-cp $< $@
$(call CONFILES,core_sim9.hal): %/core_sim9.hal: ../configs/common/core_sim9.hal
$(Q)-cp $< $@
endif # userspace
ifneq ($(KERNELRELEASE),)
# KERNELRELEASE is non-empty, therefore we are building modules using
# the "kbuild" system.
#
INCLUDE_PREFIX = $(BASEPWD)
# When the Submakefile is included in the kbuild Makefile, the
# module's obj-m and foo-objs definitions may remain in the Submakefile
include $(BASEPWD)/hal/lib/Submakefile
include $(BASEPWD)/machinetalk/Submakefile
include $(BASEPWD)/hal/i_components/Submakefile
include $(BASEPWD)/hal/components/Submakefile
include $(BASEPWD)/hal/vtable-example/Submakefile
include $(BASEPWD)/hal/userfunct-example/Submakefile
include $(BASEPWD)/machinetalk/msgcomponents/Submakefile
include $(BASEPWD)/rtapi/Submakefile
include $(BASEPWD)/rtapi/shmdrv/Submakefile
include $(BASEPWD)/rtapi/rtapi_math/Submakefile
endif # KERNELRELEASE non-empty
# $(BASEPWD) is used here, instead of relative paths, because that's
# what kbuild seems to require
EXTRA_CFLAGS = $(RTFLAGS) \
$(ARCH_CFLAGS) \
-D__MODULE__ \
-I$(INCLUDE_PREFIX) \
-I$(INCLUDE_PREFIX)/libnml/linklist \
-I$(INCLUDE_PREFIX)/libnml/cms \
-I$(INCLUDE_PREFIX)/libnml/rcs \
-I$(INCLUDE_PREFIX)/libnml/inifile \
-I$(INCLUDE_PREFIX)/libnml/os_intf \
-I$(INCLUDE_PREFIX)/libnml/nml \
-I$(INCLUDE_PREFIX)/libnml/buffer \
-I$(INCLUDE_PREFIX)/libnml/posemath \
-I$(INCLUDE_PREFIX)/rtapi \
-I$(INCLUDE_PREFIX)/hal/lib \
-I$(INCLUDE_PREFIX)/emc/nml_intf \
-I$(INCLUDE_PREFIX)/emc/kinematics \
-I$(INCLUDE_PREFIX)/emc/motion \
-I$(INCLUDE_PREFIX)/emc/tp \
-I$(INCLUDE_PREFIX)/machinetalk/nanopb \
-I$(INCLUDE_PREFIX)/machinetalk/build \
-DSEQUENTIAL_SUPPORT -DHAL_SUPPORT -DDYNAMIC_PLCSIZE -DRT_SUPPORT \
-DOLD_TIMERS_MONOS_SUPPORT -DMODBUS_IO_MASTER \
$(call cc-option,-mieee-fp) \
$(KERNEL_MATH_CFLAGS)
ifdef TARGET_PLATFORM_BEAGLEBONE
EXTRA_CFLAGS += -I$(INCLUDE_PREFIX)/hal/support/pru
endif
ifeq ($(BUILD_SYS),kbuild)
EXTRA_CFLAGS += $(call cc-option,-Wframe-larger-than=2560) $(call
cc-option,-Wno-declaration-after-statement)
endif
# For each module, there's an addition to obj-m or obj-$(CONFIG_foo)
# plus a definition of foo-objs, which contains the full path to the
# object file(s) that the module contains. Unfortunately, this setup pollutes
# the source directory with object files and other temporaries, but I can't
# find a way around it.
# These lists would be best moved to their respective subdirectories'
# Submakefiles to make this more modular and avoid maintaining
# multiple lists of the same things. This won't work as-is right now
# because the Submakefiles are included in a conditional block that is
# not evaluated during kernel module build.
# Subdirectory: rtapi
# obj-$(CONFIG_RTAPI) += rtapi.o
# # Sources for all thread systems
# rtapi-objs := \
# rtapi/instance.o \
# rtapi/rtapi_support.o \
# rtapi/rtapi_common.o \
# rtapi/rtapi_task.o \
# rtapi/rtapi_shmem.o \
# rtapi/rtapi_ring.o \
# rtapi/rtapi_time.o \
# rtapi/rtapi_io.o \
# rtapi/$(THREADS_SOURCE).o
# # Kernel threads need rtapi_module.c
# ifeq ($(BUILD_SYS),kbuild)
# rtapi-objs += rtapi/rtapi_module.o
# endif
# # User threads need rtapi_pci.c
# ifeq ($(BUILD_SYS),user-dso)
# rtapi-objs += rtapi/rtapi_pci.o
# rtapi-objs += rtapi/shmdrv/shmdrvapi.o
# # and rtapi_app_main/exit stubs
# rtapi-objs += rtapi/rtapi_main.o
# # and autodetect/compat checks
# rtapi-objs += rtapi/rtapi_compat.o
# endif
# Subdirectory: rtapi/examples (unneeded?)
# Subdirectory: hal/components
#obj-$(CONFIG_BOSS_PLC) += boss_plc.o
#boss_plc-objs := hal/components/boss_plc.o $(MATHSTUB)
obj-$(CONFIG_ENCODER) += encoder.o
encoder-objs := hal/components/encoder.o $(MATHSTUB)
obj-$(CONFIG_ENCODER) += encoderv2.o
encoderv2-objs := hal/components/encoderv2.o $(MATHSTUB)
obj-$(CONFIG_COUNTER) += counter.o
counter-objs := hal/components/counter.o $(MATHSTUB)
obj-$(CONFIG_ENCODER_RATIO) += encoder_ratio.o
encoder_ratio-objs := hal/components/encoder_ratio.o $(MATHSTUB)
obj-$(CONFIG_ENCODER_RATIO) += encoder_ratiov2.o
encoder_ratiov2-objs := hal/components/encoder_ratiov2.o $(MATHSTUB)
obj-$(CONFIG_STEPGEN) += stepgen.o
stepgen-objs := hal/components/stepgen.o $(MATHSTUB)
obj-$(CONFIG_STEPGEN) += stepgenv2.o
stepgenv2-objs := hal/components/stepgenv2.o $(MATHSTUB)
obj-$(CONFIG_LCD) += lcd.o
lcd-objs := hal/components/lcd.o $(MATHSTUB)
obj-$(CONFIG_MATRIX_KB) += matrix_kb.o
matrix_kb-objs := hal/components/matrix_kb.o $(MATHSTUB)
obj-$(CONFIG_MUX_GENERIC) += mux_generic.o
mux_generic-objs := hal/components/mux_generic.o $(MATHSTUB)
obj-$(CONFIG_PWMGEN) += pwmgen.o
pwmgen-objs := hal/components/pwmgen.o $(MATHSTUB)
obj-$(CONFIG_PWMGEN) += pwmgenv2.o
pwmgenv2-objs := hal/components/pwmgenv2.o $(MATHSTUB)
obj-$(CONFIG_SIGGEN) += siggen.o
siggen-objs := hal/components/siggen.o $(MATHSTUB)
obj-$(CONFIG_PID) += threads.o
threads-objs := hal/components/threads.o $(MATHSTUB)
#obj-$(CONFIG_SUPPLY) += supply.o
#supply-objs := hal/components/supply.o $(MATHSTUB)
obj-$(CONFIG_SIM_ENCODER) += sim_encoder.o
sim_encoder-objs := hal/components/sim_encoder.o $(MATHSTUB)
#obj-$(CONFIG_WATCHDOG) += watchdog.o
#watchdog-objs := hal/components/watchdog.o $(MATHSTUB)
#obj-$(CONFIG_MODMATH) += modmath.o
#modmath-objs := hal/components/modmath.o $(MATHSTUB)
obj-$(CONFIG_STREAMER) += streamer.o
streamer-objs := hal/components/streamer.o $(MATHSTUB)
obj-$(CONFIG_SAMPLER) += sampler.o
sampler-objs := hal/components/sampler.o $(MATHSTUB)
# Subdirectory: hal/support
ifdef TARGET_PLATFORM_BEAGLEBONE
ifeq ($(BUILD_SYS),user-dso)
obj-m += hal_pru.o
hal_pru-objs := hal/components/hal_pru.o hal/support/pru/prussdrv.o
$(LIBPTHREAD)
obj-m += hal_prudebug.o
hal_prudebug-objs := hal/components/hal_prudebug.o hal/support/pru/prussdrv.o
$(LIBPTHREAD)
endif
endif
# Subdirectory: hal/drivers
ifeq ($(BUILD_DRIVERS),yes)
#ifeq ($(BUILD_SYS),kbuild)
obj-$(CONFIG_HAL_PARPORT) += hal_parport.o
hal_parport-objs := hal/drivers/hal_parport.o $(MATHSTUB)
obj-$(CONFIG_PCI_8255) += pci_8255.o
pci_8255-objs := hal/drivers/pci_8255.o
obj-$(CONFIG_HAL_TIRO) += hal_tiro.o
hal_tiro-objs := hal/drivers/hal_tiro.o $(MATHSTUB)
obj-$(CONFIG_HAL_STG) += hal_stg.o
hal_stg-objs := hal/drivers/hal_stg.o $(MATHSTUB)
obj-$(CONFIG_HAL_VTI) += hal_vti.o
hal_vti-objs := hal/drivers/hal_vti.o $(MATHSTUB)
#obj-$(CONFIG_HAL_EVOREG) += hal_evoreg.o
#hal_evoreg-objs := hal/drivers/hal_evoreg.o $(MATHSTUB)
obj-$(CONFIG_HAL_MOTENC) += hal_motenc.o
hal_motenc-objs := hal/drivers/hal_motenc.o $(MATHSTUB)
obj-$(CONFIG_HAL_AX521H) += hal_ax5214h.o
hal_ax5214h-objs := hal/drivers/hal_ax5214h.o $(MATHSTUB)
obj-$(CONFIG_HAL_SPEAKER) += hal_speaker.o
hal_speaker-objs := hal/drivers/hal_speaker.o $(MATHSTUB)
obj-$(CONFIG_HAL_SKELETON) += hal_skeleton.o
hal_skeleton-objs := hal/drivers/hal_skeleton.o $(MATHSTUB)
ifdef TARGET_PLATFORM_RASPBERRY
obj-$(CONFIG_HAL_GPIO) += hal_gpio.o
hal_gpio-objs := hal/drivers/hal_gpio.o hal/drivers/cpuinfo.o
obj-$(CONFIG_HAL_SPI) += hal_spi.o
hal_spi-objs := hal/drivers/hal_spi.o
endif
ifdef TARGET_PLATFORM_SOCFPGA
ifeq ($(BUILD_SYS),user-dso)
obj-$(CONFIG_HM2_SOC_OL) += hm2_soc_ol.o
hm2_soc_ol-objs := hal/drivers/mesa-hostmot2/hm2_soc_ol.o
endif
endif
ifdef TARGET_PLATFORM_BEAGLEBONE
ifeq ($(BUILD_SYS),user-dso)
obj-$(CONFIG_HAL_GPIO) += hal_bb_gpio.o
hal_bb_gpio-objs := hal/drivers/hal_bb_gpio.o
obj-$(CONFIG_PEPPER) += pepper.o
pepper-objs := hal/components/pepper.o $(MATHSTUB)
endif
obj-m += hal_arm335xQEP.o
hal_arm335xQEP-objs := hal/drivers/hal_arm335xQEP.o $(MATHSTUB)
endif
ifdef TARGET_PLATFORM_CHIP
obj-$(CONFIG_HAL_GPIO) += hal_chip_gpio.o
hal_chip_gpio-objs := hal/drivers/hal_chip_gpio.o hal/drivers/chip/mmap_gpio.o
endif
ifdef TARGET_PLATFORM_ZEDBOARD
obj-$(CONFIG_HAL_GPIO) += hal_zed_gpio.o
hal_zed_gpio-objs := hal/drivers/hal_zed_gpio.o
obj-$(CONFIG_HAL_CAN) += hal_zed_can.o
hal_zed_can-objs := hal/drivers/hal_zed_can.o
endif
# hal_pru_generic driver
ifdef TARGET_PLATFORM_BEAGLEBONE
ifeq ($(BUILD_SYS),user-dso)
obj-m += hal_pru_generic.o
hal_pru_generic-objs := \
hal/drivers/hal_pru_generic/hal_pru_generic.o \
hal/drivers/hal_pru_generic/pwmgen.o \
hal/drivers/hal_pru_generic/stepgen.o \
hal/drivers/hal_pru_generic/encoder.o \
hal/support/pru/prussdrv.o \
$(LIBPTHREAD)
endif
endif
# these won't compile as-is with userland threading
ifneq ($(BUILD_SYS),user-dso)
obj-$(CONFIG_HAL_M5I20) += hal_m5i20.o
hal_m5i20-objs := hal/drivers/hal_m5i20.o $(MATHSTUB)
obj-$(CONFIG_HAL_PPMC) += hal_ppmc.o
hal_ppmc-objs := hal/drivers/hal_ppmc.o $(MATHSTUB)
obj-$(CONFIG_OPTO_AC5) += opto_ac5.o
opto_ac5-objs := hal/drivers/opto_ac5.o $(MATHSTUB)
obj-$(CONFIG_HAL_GM) += hal_gm.o
hal_gm-objs := hal/drivers/hal_gm.o $(MATHSTUB)
endif
# Gnu make 'expression' syntax is pathetic. What were these guys smoking?
# turn on by default
BUILD_HOSTMOT2=yes
ifeq ($(USERMODE_PCI),yes)
# reconfirm our intent..
BUILD_HOSTMOT2=yes
else
#except if userland and USERMODE_PCI isnt set
ifeq ($(BUILD_SYS),user-dso)
BUILD_HOSTMOT2=no
endif
endif
ifeq ($(BUILD_HOSTMOT2),yes)
obj-$(CONFIG_HOSTMOT2) += hostmot2.o hm2_7i43.o hm2_7i90.o hm2_pci.o hm2_test.o
ifeq ($(BUILD_SYS),user-dso)
obj-$(CONFIG_HOSTMOT2) += hm2_eth.o
hm2_eth-objs := \
hal/drivers/mesa-hostmot2/hm2_eth.o \
$(MATHSTUB)
endif
#obj-$(CONFIG_HOSTMOT2) += hostmot2.o hm2_pci.o hm2_7i43.o
hostmot2-objs += \
hal/drivers/mesa-hostmot2/hostmot2.o \
hal/drivers/mesa-hostmot2/backported-strings.o \
hal/drivers/mesa-hostmot2/ioport.o \
hal/drivers/mesa-hostmot2/encoder.o \
hal/drivers/mesa-hostmot2/abs_encoder.o\
hal/drivers/mesa-hostmot2/resolver.o \
hal/drivers/mesa-hostmot2/pwmgen.o \
hal/drivers/mesa-hostmot2/tp_pwmgen.o \
hal/drivers/mesa-hostmot2/sserial.o \
hal/drivers/mesa-hostmot2/stepgen.o \
hal/drivers/mesa-hostmot2/bspi.o \
hal/drivers/mesa-hostmot2/uart.o \
hal/drivers/mesa-hostmot2/pktuart.o \
hal/drivers/mesa-hostmot2/watchdog.o \
hal/drivers/mesa-hostmot2/pins.o \
hal/drivers/mesa-hostmot2/dpll.o \
hal/drivers/mesa-hostmot2/irq.o \
hal/drivers/mesa-hostmot2/led.o \
hal/drivers/mesa-hostmot2/fwid.o \
hal/drivers/mesa-hostmot2/tram.o \
hal/drivers/mesa-hostmot2/raw.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
hm2_7i90-objs := \
hal/drivers/mesa-hostmot2/hm2_7i90.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
hm2_7i43-objs := \
hal/drivers/mesa-hostmot2/hm2_7i43.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
hm2_pci-objs := \
hal/drivers/mesa-hostmot2/hm2_pci.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
hm2_test-objs := \
hal/drivers/mesa-hostmot2/hm2_test.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
setsserial-objs := \
hal/drivers/mesa-hostmot2/setsserial.o \
$(MATHSTUB)
endif
ifeq ($(BUILD_HOSTMOT2),yes)
obj-$(CONFIG_HOSTMOT2) += hm2_pci.o
hm2_pci-objs := \
hal/drivers/mesa-hostmot2/hm2_pci.o \
hal/drivers/mesa-hostmot2/bitfile.o \
$(MATHSTUB)
endif
obj-$(CONFIG_PROBE_PARPORT) += probe_parport.o
probe_parport-objs := hal/drivers/probe_parport.o $(MATHSTUB)
endif
obj-$(CONFIG_CLASSICLADDER_RT) += classicladder_rt.o
classicladder_rt-objs := hal/classicladder/module_hal.o $(MATHSTUB)
classicladder_rt-objs += hal/classicladder/arithm_eval.o
classicladder_rt-objs += hal/classicladder/arrays.o
classicladder_rt-objs += hal/classicladder/calc.o
classicladder_rt-objs += hal/classicladder/calc_sequential.o
classicladder_rt-objs += hal/classicladder/manager.o
classicladder_rt-objs += hal/classicladder/symbols.o
classicladder_rt-objs += hal/classicladder/vars_access.o
ifdef SEQUENTIAL_SUPPORT
classicladder_rt-objs += hal/classicladder/calc_sequential_rt.o
endif
obj-m += scope_rt.o
scope_rt-objs := hal/utils/scope_rt.o $(MATHSTUB)
obj-m += trivkins.o
trivkins-objs := emc/kinematics/trivkins.o
obj-m += trivkinstest.o
trivkinstest-objs := emc/kinematics/trivkinstest.o
obj-m += XYZACkins.o
XYZACkins-objs := emc/kinematics/XYZACkins.o
obj-m += 5axiskins.o
5axiskins-objs := emc/kinematics/5axiskins.o
obj-m += maxkins.o
maxkins-objs := emc/kinematics/maxkins.o
obj-m += gantrykins.o
gantrykins-objs := emc/kinematics/gantrykins.o
obj-m += rotatekins.o
rotatekins-objs := emc/kinematics/rotatekins.o
obj-m += tripodkins.o
tripodkins-objs := emc/kinematics/tripodkins.o
obj-m += lineardeltakins.o
lineardeltakins-objs := emc/kinematics/lineardeltakins.o
obj-m += genhexkins.o
genhexkins-objs := emc/kinematics/genhexkins.o
genhexkins-objs += libnml/posemath/_posemath.o
genhexkins-objs += libnml/posemath/sincos.o $(MATHSTUB)
obj-m += genserkins.o
genserkins-objs := emc/kinematics/genserkins.o
genserkins-objs += libnml/posemath/gomath.o
genserkins-objs += libnml/posemath/sincos.o $(MATHSTUB)
obj-m += drawbotkins.o
drawbotkins-objs := emc/kinematics/drawbotkins.o
drawbotkins-objs += libnml/posemath/gomath.o
drawbotkins-objs += libnml/posemath/sincos.o $(MATHSTUB)
obj-m += pumakins.o
pumakins-objs := emc/kinematics/pumakins.o
pumakins-objs += libnml/posemath/_posemath.o
pumakins-objs += libnml/posemath/sincos.o $(MATHSTUB)
obj-m += scarakins.o
scarakins-objs := emc/kinematics/scarakins.o
scarakins-objs += libnml/posemath/_posemath.o
scarakins-objs += libnml/posemath/sincos.o $(MATHSTUB)
obj-$(CONFIG_MOTMOD) += motmod.o
motmod-objs := emc/kinematics/cubic.o
motmod-objs += emc/motion/motion.o
motmod-objs += emc/motion/command.o
motmod-objs += emc/motion/control.o
motmod-objs += emc/motion/homing.o
motmod-objs += emc/motion/emcmotglb.o
motmod-objs += emc/motion/emcmotutil.o
motmod-objs += emc/motion/stashf.o
motmod-objs += emc/motion/dbuf.o
motmod-objs += libnml/posemath/_posemath.o
motmod-objs += libnml/posemath/sincos.o $(MATHSTUB)
# obj-m += vtexport.o
# vtexport-objs := hal/vtable-example/vtexport.o
# vtexport-objs += hal/vtable-example/vcode.o
obj-m += jplan.o
jplan-objs := hal/jplanner/jplan.o
obj-m += interpolate.o
interpolate-objs := hal/interpolator/interpolate.o
obj-m += icomp.o
icomp-objs := hal/icomp-example/icomp.o
# clashes with component in i_components
obj-m += lutn-demo.o
lutn-demo-objs := hal/icomp-example/lutn-demo.o
obj-m += ufdemo.o
ufdemo-objs := hal/userfunct-example/ufdemo.o
obj-m += tp.o
tp-objs := $(addprefix emc/tp/, \
tc.o \
tcq.o \
tp.o \
tpmain.o \
blendmath.o \
spherical_arc.o \
) \
emc/nml_intf/emcpose.o \
libnml/posemath/_posemath.o \
libnml/posemath/sincos.o $(MATHSTUB)
TORTOBJS = $(foreach file,$($(patsubst %.o,%,$(1))-objs), $(OBJDIR)/$(file))
# USER_DSO module building
# (don't build when 'BUILD_ALL_FLAVORS' or 'BUILD_THREADS_MODULES' are set;
# these are intermediate make runs)
ifeq ($(BUILD_SYS)+$(BUILD_THREAD_MODULES),user-dso+yes)
EXTRA_CFLAGS += -fPIC
RTOBJS := $(sort $(foreach mod,$(obj-m),$(call TORTOBJS,$(mod))))
RTDEPS := $(sort $(patsubst $(OBJDIR)/%.o,$(DEPDIR)/%.d, $(RTOBJS)))
# this arcane step warrants some explanation.
# this is about linking userland RT modules to be loaded by rtapi_app
# Those modules are supposed to behave the same as kernel RT modules as far as
# symbol visibility goes. Other than in plain C, in-kernel symbol
# export is explicitly controlled by the EXPORT_SYMBOL(sym) macro.
# only variables and functions tagged such will be visible to the rest of the
kernel
# and other modules.
# See
http://stackoverflow.com/questions/9836467/whats-meaning-of-export-symbol-in-linux-kernel-code
# for an explanation and use.
#
# userland RT modules need to follow the same visibility rules as kernel modules
# to prevent accidential spillover of symbols between components (which does
not happen
# in kernel space).
#
# The kernel behavior of EXPORT_SYMBOL is emulated as follows:
# rtapi_export.h defines
# #define EXPORT_SYMBOL(x) __attribute__((section(".rtapi_export"))) \
# char rtapi_exported_##x[] = #x;
#
# This means any symbol 'foo' exported as EXPORT_SYMBOL(foo) will:
# - have a variable defined which looks like so:
# char rtapi_exported_foo = "foo";
# - have put this variable put in the .rtapi_export section of the object file.
# (see http://wiki.osdev.org/ELF_Tutorial#The_String_Table)
# - this string table is different from the default string table named .srtab.
#
# Hence, the .rtapi_export section of a RT module is a pure string table; no
other
# variables live there. The strings in this table is the set of symbols
exported by
# this module.
#
# Now, during linking, all symbols which are NOT in this set need to be removed.
#
# to do so, first the .rtapi_export section (the string table) is extracted and
stored
# in a file - one can reproduce with:
#
# objcopy -j .rtapi_export -O binary objects/posix/hal_lib.tmp /dev/stdout |
strings
# rtapi_info_author
# rtapi_info_description
# rtapi_info_license
# rtapi_app_main
# rtapi_app_exit
# hal_init
# hal_xinit
# hal_xinitf
# hal_ready
# ....
#
# In the second objcopy step, all symbols not in this set are removed. This is
done
# by determining the list of symbols to be kept, and generating a list of lines
like
# -G <symbol>
# which is the objcopy option for removing all other symbols not in this list:
# -G symbolname
# --keep-global-symbol=symbolname
# Keep only symbol symbolname global. Make all other symbols local to the
file, so that they are not
# visible externally. This option may be given more than once.
# This objcopy step is in-place, i.e. overwriting the .tmp file.
#
# The final linking step uses the -Bsymbolic flag - what this does is:
#
# This element's presence in a shared object library alters the dynamic
linker's symbol resolution
# algorithm for references within the library. Instead of starting a symbol
search with the
# executable file, the dynamic linker starts from the shared object itself. If
the shared object
# fails to supply the referenced symbol, the dynamic linker then searches the
executable
# file and other shared objects as usual.
# (from https://www.technovelty.org/c/what-exactly-does-bsymblic-do.html)
#
# this is important for symbol resolution when the .so is loaded within
rtapi_app:
# it means that symbols referenced are resolved within the object first,
instead of looking
# at any symbols exported (maybe by accident) by rtap_app proper.
#
modules: $(patsubst %.o,$(RTLIBDIR)/%.so,$(obj-m))
$(RTLIBDIR)/%.so:
$(ECHO) Linking $@
@mkdir -p $(dir $@)
@# link all objects files into a single .so
$(Q)$(LD) -d -r -o $(OBJDIR)/$*.tmp $^
@# use the .rtapi_export string table to generate a ld version script
@# explicitly defining the EXPORT_SYMBOL syms as global, and everything
else as local:
$(Q)$(OBJCOPY) -j .rtapi_export -O binary $(OBJDIR)/$*.tmp
$(OBJDIR)/$*.exported
$(Q)(echo '{ global : '; tr -s '\0' <$(OBJDIR)/$*.exported | xargs -r0
printf '%s;\n' | grep .; echo 'local : * ; };') > $(OBJDIR)/$*.ver
@# link the final object using this version script:
$(Q)$(CC) -shared -Bsymbolic $(LDFLAGS)
-Wl,--version-script,$(OBJDIR)/$*.ver -o $@ $^ $(EXTRA_LDFLAGS)
$(sort $(RTDEPS)): $(DEPDIR)/%.d: %.c
@mkdir -p $(dir $@)
$(ECHO) Depending $<
$(Q)$(call DEP,$(CC),$@ \
$(patsubst depends/%.d,objects/%.o,$@),$@,$(OPT) \
$(DEBUG) $(CPPFLAGS) $(EXTRA_CFLAGS) $<)
# Rules to make .o (object) files
$(sort $(RTOBJS)) : $(OBJDIR)/%.o : %.c $(DEPDIR)/%.d
$(ECHO) Compiling realtime $<
@rm -f $@
@mkdir -p $(dir $@)
$(Q)$(CC) -c $(OPT) $(DEBUG) $(EXTRA_CFLAGS) $< -o $@
# Rules to make .o (object) files from .cc
$(sort $(CXXRTOBJS)) : $(OBJDIR)/%.o : %.cc $(DEPDIR)/%.d
$(ECHO) Compiling realtime++ $<
@rm -f $@
@mkdir -p $(dir $@)
$(Q)$(CXX) -c $(OPT) $(DEBUG) $(RT_CXXFLAGS) $(EXTRA_CFLAGS) $< -o $@
endif # end BUILD_SYS=user-dso
# # ------ not used anymore -------------
# ifeq ($(BUILD_SYS),normal)
# modules: $(patsubst %,$(RTLIBDIR)/%,$(obj-m))
# RTOBJS := $(sort $(foreach mod,$(obj-m),$(call TORTOBJS,$(mod))))
# RTDEPS := $(sort $(patsubst objects/%.o,depends/%.d, $(RTOBJS)))
# $(sort $(RTDEPS)): $(DEPDIR)/%.d: %.c
# @mkdir -p $(dir $@)
# $(ECHO) Depending $<
# $(Q)$(call DEP,$(CC),$@ $(patsubst
depends/%.d,objects/%.o,$@),$@,$(EXTRA_CFLAGS) $<)
# # Rules to make .o (object) files
# $(sort $(RTOBJS)) : $(OBJDIR)/%.o : %.c
# $(ECHO) Compiling realtime $<
# @mkdir -p $(dir $@)
# $(Q)$(CC) -c -DRTAPI -nostdinc -isystem $(shell $(CC)
-print-file-name=include) -I$(KERNELDIR)/include $(EXTRA_CFLAGS) $< -o $@
# $(RTLIBDIR)/%.o:
# $(ECHO) Linking $@
# $(Q)ld -r -static -S $(LDFLAGS) -o $@ $^ $(EXTRALINK)
# endif # end 'normal'
# build kernel RTAPI modules
ifneq "$(filter normal user-dso,$(BUILD_SYS))" ""
#$(RTLIBDIR)/instance$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(instance-objs))
#$(RTLIBDIR)/rtapi$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(rtapi-objs))
$(RTLIBDIR)/classicladder_rt$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(classicladder_rt-objs))
$(RTLIBDIR)/boss_plc$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(boss_plc-objs))
$(RTLIBDIR)/encoder$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(encoder-objs))
$(RTLIBDIR)/encoderv2$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(encoderv2-objs))
$(RTLIBDIR)/counter$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(counter-objs))
$(RTLIBDIR)/encoder_ratio$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(encoder_ratio-objs))
$(RTLIBDIR)/encoder_ratiov2$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(encoder_ratiov2-objs))
$(RTLIBDIR)/stepgen$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(stepgen-objs))
$(RTLIBDIR)/stepgenv2$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(stepgenv2-objs))
$(RTLIBDIR)/lcd$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(lcd-objs))
$(RTLIBDIR)/matrix_kb$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(matrix_kb-objs))
$(RTLIBDIR)/mux_generic$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(mux_generic-objs))
$(RTLIBDIR)/freqgen$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(freqgen-objs))
$(RTLIBDIR)/pwmgen$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(pwmgen-objs))
$(RTLIBDIR)/pwmgenv2$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(pwmgenv2-objs))
$(RTLIBDIR)/siggen$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(siggen-objs))
$(RTLIBDIR)/at_pid$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(at_pid-objs))
$(RTLIBDIR)/threads$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(threads-objs))
$(RTLIBDIR)/supply$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(supply-objs))
$(RTLIBDIR)/sim_encoder$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(sim_encoder-objs))
$(RTLIBDIR)/watchdog$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(watchdog-objs))
$(RTLIBDIR)/modmath$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(modmath-objs))
$(RTLIBDIR)/streamer$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(streamer-objs))
$(RTLIBDIR)/sampler$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(sampler-objs))
$(RTLIBDIR)/hal_parport$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_parport-objs))
$(RTLIBDIR)/probe_parport$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(probe_parport-objs))
ifeq ($(BUILD_SYS),user-dso)
$(RTLIBDIR)/probe_parport$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(probe_parport-objs))
endif
ifeq ($(USERMODE_PCI),yes)
$(RTLIBDIR)/hostmot2$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hostmot2-objs))
$(RTLIBDIR)/hm2_7i43$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_7i43-objs))
$(RTLIBDIR)/hm2_7i90$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_7i90-objs))
$(RTLIBDIR)/hm2_pci$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_pci-objs))
ifeq ($(BUILD_SYS),user-dso)
$(RTLIBDIR)/hm2_eth$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_eth-objs))
endif
$(RTLIBDIR)/hm2_test$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_test-objs))
endif
ifdef TARGET_PLATFORM_SOCFPGA
ifeq ($(BUILD_SYS),user-dso)
$(RTLIBDIR)/hostmot2$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hostmot2-objs))
$(RTLIBDIR)/hm2_soc_ol$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hm2_soc_ol-objs))
endif
endif
ifdef TARGET_PLATFORM_BEAGLEBONE
ifeq ($(BUILD_SYS),user-dso)
$(RTLIBDIR)/hal_pru$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_pru-objs))
$(RTLIBDIR)/hal_pru_generic$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_pru_generic-objs))
$(RTLIBDIR)/hal_prudebug$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_prudebug-objs))
$(RTLIBDIR)/hal_gpio$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_gpio-objs))
$(RTLIBDIR)/hal_bb_gpio$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_bb_gpio-objs))
$(RTLIBDIR)/pepper$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(pepper-objs))
$(RTLIBDIR)/hal_arm335xQEP$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_arm335xQEP-objs))
endif
endif
ifdef TARGET_PLATFORM_CHIP
$(RTLIBDIR)/hal_chip_gpio$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_chip_gpio-objs))
endif
ifdef TARGET_PLATFORM_RASPBERRY
$(RTLIBDIR)/hal_gpio$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_gpio-objs))
$(RTLIBDIR)/hal_spi$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_spi-objs))
endif
ifdef TARGET_PLATFORM_ZEDBOARD
$(RTLIBDIR)/hal_zed_gpio$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_zed_gpio-objs))
$(RTLIBDIR)/hal_zed_can$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_zed_can-objs))
endif
$(RTLIBDIR)/pci_8255$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(pci_8255-objs))
$(RTLIBDIR)/hal_tiro$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_tiro-objs))
$(RTLIBDIR)/hal_stg$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_stg-objs))
$(RTLIBDIR)/hal_vti$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_vti-objs))
#$(RTLIBDIR)/hal_evoreg$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_evoreg-objs))
$(RTLIBDIR)/hal_motenc$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_motenc-objs))
$(RTLIBDIR)/hal_ax5214h$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_ax5214h-objs))
$(RTLIBDIR)/hal_ppmc$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_ppmc-objs))
$(RTLIBDIR)/hal_skeleton$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_skeleton-objs))
$(RTLIBDIR)/hal_speaker$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(hal_speaker-objs))
$(RTLIBDIR)/opto_ac5$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(opto_ac5-objs))
$(RTLIBDIR)/scope_rt$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(scope_rt-objs))
$(RTLIBDIR)/motmod$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(motmod-objs))
$(RTLIBDIR)/trivkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(trivkins-objs))
$(RTLIBDIR)/trivkinstest$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(trivkinstest-objs))
$(RTLIBDIR)/XYZACkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(XYZACkins-objs))
$(RTLIBDIR)/5axiskins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(5axiskins-objs))
$(RTLIBDIR)/maxkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(maxkins-objs))
$(RTLIBDIR)/gantrykins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(gantrykins-objs))
$(RTLIBDIR)/rotatekins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(rotatekins-objs))
$(RTLIBDIR)/tripodkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(tripodkins-objs))
$(RTLIBDIR)/lineardeltakins$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(lineardeltakins-objs))
$(RTLIBDIR)/genhexkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(genhexkins-objs))
$(RTLIBDIR)/genserkins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(genserkins-objs))
$(RTLIBDIR)/drawbotkins$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(drawbotkins-objs))
$(RTLIBDIR)/pumakins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(pumakins-objs))
$(RTLIBDIR)/scarakins$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(scarakins-objs))
$(RTLIBDIR)/hal_gm$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(hal_gm-objs))
$(RTLIBDIR)/tp$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(tp-objs))
$(RTLIBDIR)/ufdemo$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(ufdemo-objs))
$(RTLIBDIR)/jplan$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(jplan-objs))
$(RTLIBDIR)/interpolate$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(interpolate-objs))
$(RTLIBDIR)/icomp$(MODULE_EXT): $(addprefix $(OBJDIR)/,$(icomp-objs))
$(RTLIBDIR)/lutn-demo$(MODULE_EXT): $(addprefix
$(OBJDIR)/,$(lutn-demo-objs))
ifeq ($(TRIVIAL_BUILD),no)
READ_RTDEPS = $(wildcard $(RTDEPS))
$(shell echo 1>&2 Reading $(words $(READ_RTDEPS))/$(words $(RTDEPS)) realtime
dependency files)
-include $(READ_RTDEPS)
$(shell echo 1>&2 Done reading realtime dependencies)
endif
endif # build kernel RTAPI modules
# Phony so that it is always rebuilt when requested, not because it
# shouldn't exist as a file
.PHONY: tags
# dont create tags from these directories
NOTAGSIN := \
depends \
objects \
machinetalk/build \
machinetalk/nanopb
CTAGOPTS := $(addprefix --exclude=,$(NOTAGSIN))
ETAGOPTS := $(CTAGOPTS)
FINDOPTS := -not \( $(patsubst %,-path ./% -prune -o,$(NOTAGSIN)) -type d \)
tags:
ctags-exuberant --extra=+fq \
$(CTAGOPTS) \
'--langmap=make:+(Submakefile),make:+(Makefile.inc),c:+.comp' \
-I EXPORT_SYMBOL+,RTAPI_MP_INT+,RTAPI_MP_LONG+,RTAPI_MP_STRING+
\
-I
RTAPI_MP_ARRAY_INT+,RTAPI_MP_ARRAY_LONG+,RTAPI_MP_ARRAY_STRING+ \
-I MODULE_AUTHOR+,MODULE_DESCRIPTION+,MODULE_LICENSE+ \
-R . ../tcl ../scripts ../share/axis/tcl
rm -f TAGS
find . -type f -name '*.[ch]' $(FINDOPTS) | xargs etags -l c --append
find . -type f -name '*.cc' $(FINDOPTS) | xargs etags -l c++ --append
find . -type f -name '*.hh' $(FINDOPTS) | xargs etags -l c++ --append
find . -type f -name '*.proto' $(FINDOPTS) | xargs etags -l c++
--append
# etags from exuberant-ctags package
etags:
etags --extra=+fq \
$(ETAGOPTS) \
'--langmap=make:+(Submakefile),make:+(Makefile.inc),c:+.comp' \
-I EXPORT_SYMBOL+,RTAPI_MP_INT+,RTAPI_MP_LONG+,RTAPI_MP_STRING+
\
-I
RTAPI_MP_ARRAY_INT+,RTAPI_MP_ARRAY_LONG+,RTAPI_MP_ARRAY_STRING+ \
-I MODULE_AUTHOR+,MODULE_DESCRIPTION+,MODULE_LICENSE+ \
-R . ../tcl ../scripts ../share/axis/tcl
find . -type f -name '*.[ch]' $(FINDOPTS) |xargs etags
--language-force=C --append
find . -type f -name '*.cc' $(FINDOPTS) |xargs etags
--language-force=C++ --append
find . -type f -name '*.hh' $(FINDOPTS) |xargs etags
--language-force=C++ --append
find . -type f -name '*.proto' $(FINDOPTS) |xargs etags
--language-force=C++ --append
# emacs etags; does not support tcl
eetags:
@rm -f TAGS
@find . $(FINDOPTS) -type f -name '*.[ch]' |xargs etags --language=c
--append
@find . $(FINDOPTS) -type f -name '*.cc' |xargs etags
--language=c++ --append
@find . $(FINDOPTS) -type f -name '*.hh' |xargs etags
--language=c++ --append
@find . $(FINDOPTS) -type f -name '*.proto' |xargs etags
--language=c++ --append
.PHONY: swish
swish:
swish-e -c .swish_config -v 0 -i $(BASEPWD) \
$(dir $(BASEPWD))tcl \
$(dir $(BASEPWD))share/axis/tcl \
$(dir $(BASEPWD))lib/python \
$(dir $(BASEPWD))scripts \
$(dir $(BASEPWD))configs
# When you depend on objects/var-ZZZ you are depending on the contents of the
# variable ZZZ, which is assumed to depend on a Makefile, a Submakefile, or
# Makefile.inc
objects/var-%: Makefile $(wildcard $(SUBMAKEFILES)) Makefile.inc
@mkdir -p $(dir $@)
@echo $($*) > [email protected]
@sh move-if-change [email protected] $@
../lib/%.so: ../lib/%.so.0
ln -sf $(notdir $<) $@
cscope:
cscope -Rb
cscope/man/:
bash -c 'for f in `find ./ -name "cscope.*out"`;do rm $$f;done'
NOSETESTS := $(wildcard ../nosetests/*.py)
nosetest:
$(foreach var,$(NOSETESTS),nosetests -v $(var);)