Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .github/scripts/install-xenomai.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/bin/bash

set -eu #Needed so CI fails when anything is wrong
set -x

DIST=$1

if false; then
#To install the Xenomai deb's from linuxcnc base (not available right now)
.github/scripts/add-linuxcnc-repository.sh "$DIST"
sudo apt-get --yes install libxenomai1 libxenomai-dev libevl libevl-dev linux-libc-evl-dev
else
CURLOPTS=( --no-progress-meter --retry-all-errors --retry 5 --retry-delay 2 -fLO )
XENOMAI3_DLD="https://github.com/hdiethelm/xenomai3-linuxcnc/releases/download"
XENOMAI4_DLD="https://github.com/hdiethelm/xenomai4-linuxcnc/releases/download"
#To install the RTAI deb's from NTULINUX git
TMPDIR=$(mktemp -d)
(
cd "$TMPDIR"
curl "${CURLOPTS[@]}" "${XENOMAI3_DLD}/xenomai-3.3-6/libxenomai1_3.3-6_amd64.deb"
curl "${CURLOPTS[@]}" "${XENOMAI3_DLD}/xenomai-3.3-6/libxenomai-dev_3.3-6_amd64.deb"
curl "${CURLOPTS[@]}" "${XENOMAI4_DLD}/libevl-0.59-3/libevl_0.59-3_amd64.deb"
curl "${CURLOPTS[@]}" "${XENOMAI4_DLD}/libevl-0.59-3/libevl-dev_0.59-3_amd64.deb"
curl "${CURLOPTS[@]}" "${XENOMAI4_DLD}/kernel-6.12.90-cip24-xenomai4-0.59_6.12.90-4/linux-libc-evl-dev_6.12.90-4_amd64.deb"
)
#dependency
sudo apt-get --quiet update
sudo apt-get --yes install libbpf1 adduser
#packages
sudo dpkg -i \
"$TMPDIR/libxenomai1_3.3-6_amd64.deb" \
"$TMPDIR/libxenomai-dev_3.3-6_amd64.deb" \
"$TMPDIR/libevl_0.59-3_amd64.deb" \
"$TMPDIR/libevl-dev_0.59-3_amd64.deb" \
"$TMPDIR/linux-libc-evl-dev_6.12.90-4_amd64.deb"
rm -rf "$TMPDIR"
fi
16 changes: 16 additions & 0 deletions .github/scripts/test-xenomai.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#! /bin/sh

#We can not really test the xenomai runtime as long as the kernel is not running
#but this would need a VM.
#What we can do is test if the libraries where built. Due to configure autodetect,
#this can silently fail.

FILES="lib/liblinuxcnc-uspace-xenomai.so.0 lib/liblinuxcnc-uspace-xenomai-evl.so.0"
for FILE in $FILES; do
if [ ! -f "$FILE" ]; then
echo "$FILE not found"
exit 1
fi
done
echo "Xenomai libraries where built"
exit 0
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,38 @@ jobs:
run: |
.github/scripts/verify-clean-repo.sh

rip-xenomai:
runs-on: ubuntu-24.04
timeout-minutes: 45
steps:
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: |
echo Number of CPUs: $(nproc)
echo "$GITHUB_CONTEXT"
- name: Checkout repository
uses: actions/checkout@v6
with:
submodules: false
fetch-depth: 1
- name: Install dependencies
run: |
set -x
.github/scripts/install-xenomai.sh trixie
.github/scripts/install-deps.sh
- name: Build RIP Xenomai
run: |
set -x
.github/scripts/build-rip.sh --with-realtime=uspace
- name: Verify xenomai build
run: |
set -x
.github/scripts/test-xenomai.sh
- name: Verify no untracked or modified files after build
run: |
.github/scripts/verify-clean-repo.sh

rip-and-test-clang:
runs-on: ubuntu-24.04
timeout-minutes: 45
Expand Down
2 changes: 2 additions & 0 deletions debian/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ linuxcnc-doc-*/
# generated from `.in` by debian/configure
linuxcnc-uspace.install
linuxcnc-uspace.manpages
linuxcnc-uspace-xenomai-evl.install
linuxcnc-uspace-xenomai.install

*.debhelper
shlibs.local
Expand Down
36 changes: 32 additions & 4 deletions debian/configure
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ EXTRA_BUILD=
LIBREADLINE_DEV="libeditreadline-dev"

ENABLE_BUILD_DOCUMENTATION=--enable-build-documentation=pdf
BUILD_XENOMAI=false
BUILD_XENOMAI_EVL=false

# Specialize these based on DISTRIB_NAME as needed
# These do not run-time depend on a specific package because
Expand All @@ -82,10 +84,24 @@ ENABLE_BUILD_DOCUMENTATION=--enable-build-documentation=pdf

while test $# -ne 0; do
case "$1" in
sim|uspace|noauto) echo "I: Argument $1 is accepted for compatibility, but ignored";;
help|-h|--help) usage; exit 0 ;;
no-docs|nodocs|nodoc|no-doc) unset ENABLE_BUILD_DOCUMENTATION ;;
*) echo 1>&2 "Unknown option: $1"
sim|uspace|noauto)
echo "I: Argument $1 is accepted for compatibility, but ignored"
;;
help|-h|--help)
usage;
exit 0
;;
no-docs|nodocs|nodoc|no-doc)
unset ENABLE_BUILD_DOCUMENTATION
;;
xenomai)
BUILD_XENOMAI=true;
;;
xenomai-evl)
BUILD_XENOMAI_EVL=true;
;;
*)
echo 1>&2 "Unknown option: $1"
echo 1>&2
usage
exit 99 ;;
Expand Down Expand Up @@ -206,6 +222,18 @@ fi

subst control.top.in > control

if $BUILD_XENOMAI; then
echo >> control
subst control.uspace-xenomai.in >> control
subst linuxcnc-uspace-xenomai.install.in > linuxcnc-uspace-xenomai.install
fi

if $BUILD_XENOMAI_EVL; then
echo >> control
subst control.uspace-xenomai-evl.in >> control
subst linuxcnc-uspace-xenomai-evl.install.in > linuxcnc-uspace-xenomai-evl.install
fi

echo >> control
subst control.main-pkg.in >> control

Expand Down
9 changes: 9 additions & 0 deletions debian/control.uspace-xenomai-evl.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Package: @MAIN_PACKAGE_NAME@-xenomai-evl
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: PC based motion controller for real-time Linux
LinuxCNC is the next-generation Enhanced Machine Controller which
provides motion control for CNC machine tools and robotic
applications (milling, cutting, routing, etc.).
.
This package contains extra files for use with Xenomai EVL realtime kernels.
2 changes: 1 addition & 1 deletion debian/control.uspace-xenomai.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: @MAIN_PACKAGE_NAME@-xenomai
Architecture: @XENOMAI_ARCHITECTURE@
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: PC based motion controller for real-time Linux
LinuxCNC is the next-generation Enhanced Machine Controller which
Expand Down
2 changes: 2 additions & 0 deletions debian/linuxcnc-uspace-xenomai-evl.install.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/usr/lib/liblinuxcnc-uspace-xenomai-evl.so.0
/usr/lib/liblinuxcnc-hm2_eth_net_evl.so.0
1 change: 1 addition & 0 deletions debian/linuxcnc-uspace-xenomai.install.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/usr/lib/liblinuxcnc-uspace-xenomai.so.0
10 changes: 9 additions & 1 deletion debian/linuxcnc.install.in
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,15 @@ usr/bin/xyzab-tdr-gui
usr/bin/xyzac-trt-gui
usr/bin/xyzbc-trt-gui

usr/lib/lib*.so.*
usr/lib/liblinuxcnchal.so.0
usr/lib/liblinuxcnc-uspace-posix.so.0
usr/lib/libpyplugin.so.0
usr/lib/libnml.so.0
usr/lib/librs274.so.0
usr/lib/liblinuxcncini.so.1
usr/lib/libposemath.so.0
usr/lib/libtooldata.so.0

usr/lib/linuxcnc
usr/lib/python3
usr/share/tcltk
Expand Down
2 changes: 2 additions & 0 deletions debian/not-installed
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#No package for uspace-rtai for now
usr/lib/liblinuxcnc-uspace-rtai.so.0
11 changes: 4 additions & 7 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1080,11 +1080,8 @@ hm2_pci-objs := \
$(MATHSTUB)
hm2_eth-objs := \
hal/drivers/mesa-hostmot2/hm2_eth.o \
hal/drivers/mesa-hostmot2/hm2_eth_net_posix.o
ifeq ($(CONFIG_USPACE_XENOMAI_EVL),y)
hm2_eth-objs += hal/drivers/mesa-hostmot2/hm2_eth_net_evl.o
endif
hm2_eth-objs += $(MATHSTUB)
hal/drivers/mesa-hostmot2/hm2_eth_net_posix.o \
$(MATHSTUB)
hm2_spi-objs := \
hal/drivers/mesa-hostmot2/hm2_spi.o \
hal/drivers/mesa-hostmot2/llio_info.o \
Expand Down Expand Up @@ -1329,7 +1326,7 @@ modules: $(patsubst %.o,../rtlib/%.so,$(obj-m))
$(Q)objdump -w -j .rtapi_export -t objects/$*.tmp \
| awk 'BEGIN{print "{ global :"} /rtapi_exported_/{printf("%s;\n", substr($$6,16))} END{print "local : * ; };"}' \
> objects/$*.ver
$(Q)$(CC) -shared -Bsymbolic -Wl,--version-script,objects/$*.ver -o $@ $^ -lm $(XENOMAI_EVL_LDFLAGS) $(LDFLAGS)
$(Q)$(CC) -shared -Bsymbolic -Wl,--version-script,objects/$*.ver -o $@ $^ -lm $(LDFLAGS)
$(Q)chmod -x $@

RTFLAGS += -fno-strict-aliasing -fwrapv
Expand All @@ -1340,7 +1337,7 @@ $(sort $(filter-out objects/rtemc/tp/cruckig/%,$(RTOBJS))) : objects/rt%.o : %.c
@rm -f $@
@mkdir -p $(dir $@)
$(Q)$(CC) -c $(OPT) $(DEBUG) $(EXTRA_DEBUG) -DRTAPI \
$(EXTRA_CFLAGS) $(XENOMAI_EVL_CFLAGS) \
$(EXTRA_CFLAGS) \
-MP -MD -MF "${@:.o=.d}" -MT "$@" \
$< -o $@

Expand Down
12 changes: 12 additions & 0 deletions src/hal/drivers/Submakefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,15 @@ modules: \
hal/drivers/pluto_step_rbf.h
endif


ifeq ($(CONFIG_USPACE_XENOMAI_EVL),y)
NET_EVL_SRCS := hal/drivers/mesa-hostmot2/hm2_eth_net_evl.c
USERSRCS += $(NET_EVL_SRCS)
$(call TOOBJSDEPS, $(NET_EVL_SRCS)): EXTRAFLAGS += -fPIC $(XENOMAI_EVL_CFLAGS)
../lib/liblinuxcnc-hm2_eth_net_evl.so.0: $(call TOOBJS, $(NET_EVL_SRCS))
$(ECHO) Linking $(notdir $@)
$(Q)$(CXX) -shared $(LDFLAGS) -o $@ $^ $(XENOMAI_EVL_LDFLAGS) -Wl,-soname,$(notdir $@)
TARGETS += ../lib/liblinuxcnc-hm2_eth_net_evl.so.0
TARGETS += ../lib/liblinuxcnc-hm2_eth_net_evl.so
endif

Loading