xref: /aosp_15_r20/external/ethtool/scripts/ethtool-import-uapi (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski#!/bin/bash -e
2*1b481fc3SMaciej Żenczykowski#
3*1b481fc3SMaciej Żenczykowski# ethtool-import-uapi [commit]
4*1b481fc3SMaciej Żenczykowski#
5*1b481fc3SMaciej Żenczykowski# Imports sanitized copies of kernel uapi headers from <commit> (can be
6*1b481fc3SMaciej Żenczykowski# a commit id, a tag or a branch name). If the argument is omitted,
7*1b481fc3SMaciej Żenczykowski# commit currently checked out in the kernel repository is used.
8*1b481fc3SMaciej Żenczykowski
9*1b481fc3SMaciej Żenczykowskisn="${0##*/}"
10*1b481fc3SMaciej Żenczykowskiexport ARCH="x86_64"
11*1b481fc3SMaciej Żenczykowskimkopt="-j$(nproc)" || mkopt=''
12*1b481fc3SMaciej Żenczykowski
13*1b481fc3SMaciej Żenczykowskiif [ ! -d "$LINUX_GIT" ]; then
14*1b481fc3SMaciej Żenczykowski    echo "${sn}: please set LINUX_GIT to the location of kernel git" >&2
15*1b481fc3SMaciej Żenczykowski    exit 1
16*1b481fc3SMaciej Żenczykowskifi
17*1b481fc3SMaciej Żenczykowski
18*1b481fc3SMaciej Żenczykowskipushd "$LINUX_GIT"
19*1b481fc3SMaciej Żenczykowskiif [ -n "$1" ]; then
20*1b481fc3SMaciej Żenczykowski    git checkout "$1"
21*1b481fc3SMaciej Żenczykowskifi
22*1b481fc3SMaciej Żenczykowskidesc=$(git describe --exact-match 2>/dev/null \
23*1b481fc3SMaciej Żenczykowski       || git show -s --abbrev=12 --pretty='commit %h')
24*1b481fc3SMaciej Żenczykowskikobj=$(mktemp -d)
25*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" allmodconfig
26*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" prepare
27*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" INSTALL_HDR_PATH="${kobj}/hdr" headers_install
28*1b481fc3SMaciej Żenczykowskipopd
29*1b481fc3SMaciej Żenczykowski
30*1b481fc3SMaciej Żenczykowskipushd uapi
31*1b481fc3SMaciej Żenczykowskifind . -type f -name '*.h' -exec cp -v "${kobj}/hdr/include/{}" {} \;
32*1b481fc3SMaciej Żenczykowski
33*1b481fc3SMaciej Żenczykowskigo_on=true
34*1b481fc3SMaciej Żenczykowskiwhile $go_on; do
35*1b481fc3SMaciej Żenczykowski    go_on=false
36*1b481fc3SMaciej Żenczykowski    while read f; do
37*1b481fc3SMaciej Żenczykowski        if [ "${f#asm/}" != "$f" ]; then
38*1b481fc3SMaciej Żenczykowski            # skip architecture dependent asm/ headers
39*1b481fc3SMaciej Żenczykowski            continue
40*1b481fc3SMaciej Żenczykowski        fi
41*1b481fc3SMaciej Żenczykowski        if [ -f "$f" ]; then
42*1b481fc3SMaciej Żenczykowski            # already present
43*1b481fc3SMaciej Żenczykowski            continue
44*1b481fc3SMaciej Żenczykowski        fi
45*1b481fc3SMaciej Żenczykowski	if [ ! -f "${kobj}/hdr/include/${f}" ]; then
46*1b481fc3SMaciej Żenczykowski            # not a kernel header
47*1b481fc3SMaciej Żenczykowski            continue
48*1b481fc3SMaciej Żenczykowski        fi
49*1b481fc3SMaciej Żenczykowski        echo "+ add $f"
50*1b481fc3SMaciej Żenczykowski        go_on=true
51*1b481fc3SMaciej Żenczykowski        mkdir -p "${f%/*}"
52*1b481fc3SMaciej Żenczykowski        cp "${kobj}/hdr/include/${f}" "${f}"
53*1b481fc3SMaciej Żenczykowski    done < <(
54*1b481fc3SMaciej Żenczykowski        find . -type f -name '*.[ch]' -exec sed -nre '\_^[[:blank:]]*#include[[:blank:]]<.+>_ { s_^[[:blank:]]*#include[[:blank:]]<([^>]*)>.*$_\1_ ; p }' {} \; \
55*1b481fc3SMaciej Żenczykowski            | LC_ALL=C sort -u
56*1b481fc3SMaciej Żenczykowski    )
57*1b481fc3SMaciej Żenczykowskidone
58*1b481fc3SMaciej Żenczykowskipopd
59*1b481fc3SMaciej Żenczykowskirm -rf "$kobj"
60*1b481fc3SMaciej Żenczykowski
61*1b481fc3SMaciej Żenczykowskigit add uapi
62*1b481fc3SMaciej Żenczykowskigit commit -s -F - <<EOT
63*1b481fc3SMaciej Żenczykowskiupdate UAPI header copies
64*1b481fc3SMaciej Żenczykowski
65*1b481fc3SMaciej ŻenczykowskiUpdate to kernel ${desc}.
66*1b481fc3SMaciej Żenczykowski
67*1b481fc3SMaciej ŻenczykowskiEOT
68