-
Notifications
You must be signed in to change notification settings - Fork 109
Expand file tree
/
Copy pathMakefile
More file actions
211 lines (187 loc) · 10.2 KB
/
Makefile
File metadata and controls
211 lines (187 loc) · 10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# Copyright (C) 2025 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
SHELL := bash -eu -o pipefail
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
ROS_DISTRO ?= humble
# Map ROS_DISTRO to Ubuntu codename
ifeq ($(ROS_DISTRO),humble)
UBUNTU_CODENAME := jammy
OPENVINO_DISTRO := ubuntu22
else
UBUNTU_CODENAME := noble
OPENVINO_DISTRO := ubuntu24
endif
# Base packages for all distributions
PACKAGES = ROS2_node \
Follow_me_RS_2D/src/follow_me_interfaces \
Follow_me_RS_2D/src/adbscan_ros2 \
Follow_me_RS_2D/src/gesture_recognition_pkg \
Follow_me_RS_2D/src/speech_recognition_pkg \
Follow_me_RS_2D/src/text_to_speech_pkg \
Follow_me_RS_2D/src/turtlebot3_simulations/followme_turtlebot3_gazebo \
package/tutorial-aaeon-adbscan \
package/tutorial_follow-me \
package/tutorial_follow-me-w-gesture
.DEFAULT_GOAL := help
.PHONY: license-check package test lint lint-all lint-clang lint-python lint-yaml lint-githubactions lint-bash lint-markdown lint-json clean-colcon clean-debian clean help
license-check:
@# Help: Perform a REUSE license check using docker container https://hub.docker.com/r/fsfe/reuse
docker run --rm --volume ${ROOT_DIR}:/data amr-registry.caas.intel.com/cache/fsfe/reuse:5.0.2 lint
package:
@# Help: Build Debian packages
docker run --rm -t --platform linux/amd64 \
-v $(ROOT_DIR):/src \
-w /src \
-e DEBIAN_FRONTEND=noninteractive \
-e OPENVINO_INSTALL_DIR="/opt/intel/openvino" \
-e OPENVINO_DOWNLOAD_MODELS="no" \
-e INTEL_OPENVINO_DIR="/opt/intel/openvino" \
-e http_proxy=$${http_proxy:-http://proxy-dmz.intel.com:912} \
-e https_proxy=$${https_proxy:-http://proxy-dmz.intel.com:912} \
-e no_proxy=$${no_proxy:-localhost,127.0.0.1/8,ch.intel.com,ka.intel.com,devtools.intel.com,backend} \
amd64/ros:${ROS_DISTRO}-ros-base \
bash -c "curl https://eci.intel.com/repos/gpg-keys/GPG-PUB-KEY-INTEL-ECI.gpg -o /usr/share/keyrings/eci-archive-keyring.gpg > /dev/null && \
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | tee /usr/share/keyrings/intel-archive-keyring.gpg > /dev/null && \
echo \"deb [signed-by=/usr/share/keyrings/eci-archive-keyring.gpg] https://eci.intel.com/repos/${UBUNTU_CODENAME} isar main\" | tee /etc/apt/sources.list.d/eci.list > /dev/null && \
echo \"deb-src [signed-by=/usr/share/keyrings/eci-archive-keyring.gpg] https://eci.intel.com/repos/${UBUNTU_CODENAME} isar main\" | tee -a /etc/apt/sources.list.d/eci.list > /dev/null && \
$(if $(filter humble,$(ROS_DISTRO)),echo -e \"Package: *\nPin: origin eci.intel.com\nPin-Priority: 1000\n\nPackage: libflann*\nPin: version 1.19.*\nPin-Priority: -1\n\nPackage: flann*\nPin: version 1.19.*\nPin-Priority: -1\" | tee /etc/apt/preferences.d/isar > /dev/null && ,)\
echo \"deb [signed-by=/usr/share/keyrings/intel-archive-keyring.gpg] https://apt.repos.intel.com/openvino ${OPENVINO_DISTRO} main\" | sudo tee /etc/apt/sources.list.d/intel-openvino.list > /dev/null && \
echo \"deb [signed-by=/usr/share/keyrings/intel-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main\" | tee /etc/apt/sources.list.d/oneAPI.list > /dev/null && \
echo -e \"Package: intel-oneapi-runtime-*\nPin: version 2025.*\nPin-Priority: 1001\" | tee /etc/apt/preferences.d/oneAPI > /dev/null && \
(apt-get -qq update || (sleep 5 && apt-get -qq update) || (sleep 10 && apt-get -qq update)) && \
(apt-get install -qq -y devscripts equivs || (sleep 5 && apt-get install -qq -y devscripts equivs)) && \
for pkg in ${PACKAGES}; do \
echo \"Building package: \$$pkg\"; \
cd /src/\$$pkg && \
rm -rf debian && cp -r ${ROS_DISTRO}/debian ./debian && \
mk-build-deps -i --host-arch amd64 --build-arch amd64 \
-t 'apt-get -y -q -o Debug::pkgProblemResolver=yes --no-install-recommends --allow-downgrades' debian/control && \
DEB_BUILD_OPTIONS='verbose' dpkg-buildpackage -us -uc -b -d && \
cd /src && \
find . -type f -name 'ros-*.deb' -not -name '*-build-deps_*' -not -name '*-dbgsym_*' ! -path '*/debian/*' -print -exec apt-get install -f -y {} \; ; \
done; \
find . -type f -name 'ros-*.deb' -not -name '*-build-deps_*' -not -name '*-dbgsym_*' ! -path '*/debian/*' -exec mv {} /src/ \; || echo 'No .deb files found'"
test:
@# Help: Test code using colcon
@echo "DEBUG: Checking for ros-$(ROS_DISTRO) packages..."
@if ! ls ros-$(ROS_DISTRO)-*.deb 2>/dev/null | grep -q .; then \
echo "Error: No ros-$(ROS_DISTRO)-*.deb packages found. Run 'make package' first"; \
echo "DEBUG: Current directory contents:"; \
ls -la *.deb 2>/dev/null || echo "No .deb files found in current directory"; \
exit 1; \
fi
@echo "DEBUG: Found ros-$(ROS_DISTRO) packages:"
@ls -1 ros-$(ROS_DISTRO)-*.deb 2>/dev/null | head -5
docker run --rm -t --platform linux/amd64 \
-v $(ROOT_DIR):/src \
-w /src \
-e DEBIAN_FRONTEND=noninteractive \
-e http_proxy=$${http_proxy:-http://proxy-dmz.intel.com:912} \
-e https_proxy=$${https_proxy:-http://proxy-dmz.intel.com:912} \
-e no_proxy=$${no_proxy:-localhost,127.0.0.1/8,ch.intel.com,ka.intel.com,devtools.intel.com,backend} \
amd64/ros:${ROS_DISTRO}-ros-base \
bash -c "curl https://eci.intel.com/repos/gpg-keys/GPG-PUB-KEY-INTEL-ECI.gpg -o /usr/share/keyrings/eci-archive-keyring.gpg > /dev/null && \
curl -fsSL https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | tee /usr/share/keyrings/intel-archive-keyring.gpg > /dev/null && \
echo \"deb [signed-by=/usr/share/keyrings/eci-archive-keyring.gpg] https://eci.intel.com/repos/${UBUNTU_CODENAME} isar main\" | tee /etc/apt/sources.list.d/eci.list > /dev/null && \
echo \"deb-src [signed-by=/usr/share/keyrings/eci-archive-keyring.gpg] https://eci.intel.com/repos/${UBUNTU_CODENAME} isar main\" | tee -a /etc/apt/sources.list.d/eci.list > /dev/null && \
echo \"deb [signed-by=/usr/share/keyrings/intel-archive-keyring.gpg] https://apt.repos.intel.com/openvino ${OPENVINO_DISTRO} main\" | sudo tee /etc/apt/sources.list.d/intel-openvino.list > /dev/null && \
echo \"deb [signed-by=/usr/share/keyrings/intel-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main\" | tee /etc/apt/sources.list.d/oneAPI.list > /dev/null && \
echo -e \"Package: intel-oneapi-runtime-*\nPin: version 2025.*\nPin-Priority: 1001\" | tee /etc/apt/preferences.d/oneAPI > /dev/null && \
(apt-get -qq update || (sleep 5 && apt-get -qq update) || (sleep 10 && apt-get -qq update)) && \
(apt install -qq -y equivs devscripts libtbb-dev \
ros-${ROS_DISTRO}-ros-gz-sim ros-${ROS_DISTRO}-pcl-conversions || \
(sleep 5 && apt install -qq -y equivs devscripts libtbb-dev \
ros-${ROS_DISTRO}-ros-gz-sim ros-${ROS_DISTRO}-pcl-conversions)) && \
echo 'Installing all built .deb packages...' && \
find . -maxdepth 1 -name 'ros-$(ROS_DISTRO)-*.deb' -not -name '*-build-deps_*' -not -name '*-dbgsym_*' -exec apt-get install -f -y {} \; && \
echo 'Setting up ROS environment and running tests...' && \
echo 'Cleaning up stale build artifacts...' && \
rm -rf install/ log/ build/ && \
. /opt/ros/${ROS_DISTRO}/setup.sh && \
colcon build --executor sequential --event-handlers console_direct+ && \
colcon test --return-code-on-test-failure --executor sequential --event-handlers console_direct+"
lint:
@# Help: Run all sub-linters using super-linter (using linters defined for this repo only)
VALIDATE_GITHUB_ACTIONS=true \
VALIDATE_YAML=true \
VALIDATE_JSON=true \
VALIDATE_PYTHON_PYLINT=true \
VALIDATE_PYTHON_FLAKE8=true \
VALIDATE_BASH=true \
VALIDATE_MARKDOWN=true \
VALIDATE_CLANG_FORMAT=true \
make lint-all
lint-all:
@# Help: Run super-linter over entire repository (auto-detects code to lint)
docker run --rm --platform linux/amd64 \
-e SHELL=/bin/bash \
-e RUN_LOCAL=true \
--env-file ".github/linters/super-linter.env" \
$(if $(VALIDATE_GITHUB_ACTIONS),-e VALIDATE_GITHUB_ACTIONS=$(VALIDATE_GITHUB_ACTIONS)) \
$(if $(VALIDATE_YAML),-e VALIDATE_YAML=$(VALIDATE_YAML)) \
$(if $(VALIDATE_JSON),-e VALIDATE_JSON=$(VALIDATE_JSON)) \
$(if $(VALIDATE_PYTHON_PYLINT),-e VALIDATE_PYTHON_PYLINT=$(VALIDATE_PYTHON_PYLINT)) \
$(if $(VALIDATE_PYTHON_FLAKE8),-e VALIDATE_PYTHON_FLAKE8=$(VALIDATE_PYTHON_FLAKE8)) \
$(if $(VALIDATE_BASH),-e VALIDATE_BASH=$(VALIDATE_BASH)) \
$(if $(VALIDATE_MARKDOWN),-e VALIDATE_MARKDOWN=$(VALIDATE_MARKDOWN)) \
$(if $(VALIDATE_CLANG_FORMAT),-e VALIDATE_CLANG_FORMAT=$(VALIDATE_CLANG_FORMAT)) \
-v $(ROOT_DIR):/tmp/lint \
ghcr.io/super-linter/super-linter:slim-v8.1.0
lint-clang:
@# Help: Run clang linter using super-linter
VALIDATE_CLANG_FORMAT=true make lint-all
lint-python:
@# Help: Run Python linter using super-linter
VALIDATE_PYTHON_PYLINT=true VALIDATE_PYTHON_FLAKE8=true make lint-all
lint-yaml:
@# Help: Run YAML linter using super-linter
VALIDATE_YAML=true make lint-all
lint-githubactions:
@# Help: Run Github Actions linter using super-linter
VALIDATE_GITHUB_ACTIONS=true make lint-all
lint-bash:
@# Help: Run Bash linter using super-linter
VALIDATE_BASH=true make lint-all
lint-markdown:
@# Help: Run Markdown linter using super-linter
VALIDATE_MARKDOWN=true make lint-all
lint-json:
@# Help: Run JSON linter using super-linter
VALIDATE_JSON=true make lint-all
clean-colcon:
@# Help: Clean up Colcon build and test artifacts
rm -rf build/ install/ log/
clean-debian:
@# Help: Clean up Debian packaging artifacts
@for path in ${PACKAGES}; do \
if [ -d "$$path/debian" ]; then \
echo "Removing $$path/debian"; \
rm -rf "$$path/debian"; \
fi; \
done
rm -f *.deb *.build *.changes *.dsc *.tar.gz *.buildinfo
rm -rf ROS2_node/.obj-x86_64-linux-gnu-oneapi/
rm -rf ROS2_node/.obj-x86_64-linux-gnu/
rm -rf package/tutorial-aaeon-adbscan/obj-x86_64-linux-gnu/
rm -rf package/tutorial_follow-me-w-gesture/obj-x86_64-linux-gnu/
rm -rf package/tutorial_follow-me/obj-x86_64-linux-gnu/
clean: clean-debian clean-colcon
@# Help: Clean up all build artifacts
help:
@printf "%-20s %s\n" "Target" "Description"
@printf "%-20s %s\n" "------" "-----------"
@grep -E '^[a-zA-Z0-9_%-]+:|^[[:space:]]+@# Help:' Makefile | \
awk '\
/^[a-zA-Z0-9_%-]+:/ { \
target = $$1; \
sub(":", "", target); \
} \
/^[[:space:]]+@# Help:/ { \
if (target != "") { \
help_line = $$0; \
sub("^[[:space:]]+@# Help: ", "", help_line); \
printf "%-20s %s\n", target, help_line; \
target = ""; \
} \
}' | sort -k1,1