Remove libbpf as a submodule

Instead clone the libbpf repo at a specific hash during setup.
This is to fix an issue whereby submodules are not included
in the tarball and therefore won't be updated/fetched during
setup after unzipping the tarball.
This commit is contained in:
Jordan Rome 2024-03-07 12:11:48 -08:00
parent 1a6ff1a871
commit 1769dece7d
8 changed files with 33 additions and 22 deletions

View File

@ -36,11 +36,6 @@ jobs:
- uses: actions/checkout@v4
# libbpf
- run: git clone --recurse-submodules --branch v1.3.0 https://github.com/libbpf/libbpf.git
- run: make -j -C libbpf/src
- run: sudo make -j -C libbpf/src install
# meson
- run: pip install meson
@ -61,7 +56,7 @@ jobs:
### END DEPENDENCIES ###
# The actual build:
- run: meson setup build -Dlibbpf_a=`pwd`/libbpf/src/libbpf.a -Dkernel=$(pwd)/linux
- run: meson setup build -Dkernel=$(pwd)/linux
- run: meson compile -C build
# Print CPU model before running the tests (this can be useful for

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
libbpf/

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "libbpf"]
path = libbpf
url = https://github.com/libbpf/libbpf

View File

@ -198,7 +198,7 @@ repo](https://mesonbuild.com/Quick-guide.html#installation-from-source) and call
standard utilities including `awk`.
- `clang`: >=16 required, >=17 recommended
- `libbpf`: >=1.2.2 required, >=1.3 recommended (`RESIZE_ARRAY` support is
new in 1.3). It's preferred to link statically against the source from the libbpf git submodule.
new in 1.3). It's preferred to link statically against the source from the libbpf git repo, which is cloned during setup.
- Rust toolchain: >=1.72
- `libelf`, `libz`, `libzstd` if linking against staic `libbpf.a`
- `bpftool` (usually available in `linux-tools-common`)
@ -210,7 +210,7 @@ repo](https://mesonbuild.com/Quick-guide.html#installation-from-source) and call
commands in the root of the tree builds and installs all schedulers under
`~/bin`.
#### Static linking against libbpf submodule (preferred)
#### Static linking against libbpf (preferred)
```
$ cd $SCX
@ -219,7 +219,7 @@ $ meson compile -C build
$ meson install -C build
```
Note: `meson setup` will also fetch the libbpf submodule and `meson compile` will build it.
Note: `meson setup` will also clone the libbpf repo and `meson compile` will build it.
#### Dynamic linking against libbpf
```

1
libbpf

@ -1 +0,0 @@
Subproject commit 20c0a9e3d7e7d4aeb283eae982543c9cacc29477

View File

@ -23,5 +23,5 @@ for arg in ${args[@]:(idx+1)}; do
esac
done
make_out=$(env CC="$cc" CFLAGS="$cflags" BUILD_STATIC_ONLY=y "$2" -C "$3" -j"$4")
make_out=$(env CC="$cc" CFLAGS="$cflags" BUILD_STATIC_ONLY=y DESTDIR=. "$2" install -C "$3" -j"$4")
exit $?

View File

@ -0,0 +1,13 @@
#!/bin/bash
cd $1
rm -rf libbpf
git clone --depth=1 https://github.com/libbpf/libbpf
cd libbpf
git fetch --depth=1 origin $2
git checkout $2
# This is needed because we haven't built libbpf yet
# and this is where the headers will end up
mkdir src/usr
mkdir src/usr/include

View File

@ -28,6 +28,8 @@ get_sys_incls = find_program(join_paths(meson.current_source_dir(),
'meson-scripts/get_sys_incls'))
test_sched = find_program(join_paths(meson.current_source_dir(),
'meson-scripts/test_sched'))
fetch_libbpf = find_program(join_paths(meson.current_source_dir(),
'meson-scripts/fetch_libbpf'))
build_libbpf = find_program(join_paths(meson.current_source_dir(),
'meson-scripts/build_libbpf'))
if enable_rust
@ -46,9 +48,11 @@ elif bpf_clang_maj < 17
.format(bpf_clang.full_path(), bpf_clang_ver))
endif
libbpf_path = '@0@/libbpf/src'.format(meson.current_source_dir())
libbpf_path = '@0@/libbpf/src'.format(meson.current_build_dir())
libbpf_a = '@0@/libbpf.a'.format(libbpf_path)
should_build_libbpf = true
libbpf_h = get_option('libbpf_h')
libbpf_local_h = get_option('libbpf_h')
if get_option('libbpf_a') == 'disabled'
libbpf_a = ''
@ -74,10 +78,12 @@ if should_build_libbpf
error('To build the libbpf library "make" and "jq" are required')
endif
message('Updating libbpf submodule')
run_command('git', 'submodule', 'update', '--init', '--recursive', check: true)
# make sure it's clean
run_command('git', 'submodule', 'foreach', '--recursive', 'git', 'clean', '-xfd', check: true)
libbpf_h = ['@0@/usr/include'.format(libbpf_path)]
libbpf_local_h = ['.@0@/libbpf/src/usr/include'.format(meson.current_build_dir().replace(meson.current_source_dir(), ''))]
message('Fetching libbpf repo')
libbpf_commit = '4f875865b772c4f534bc0a665bbd988193825bd4'
run_command(fetch_libbpf, meson.current_build_dir(), libbpf_commit, check: true)
# setup the build target
executable('cc_cflags_probe', 'meson-scripts/cc_cflags_probe.c', install: false, pie: true)
@ -104,7 +110,7 @@ endif
if libbpf_a != ''
libbpf_dep = [declare_dependency(
link_args: libbpf_a,
include_directories: get_option('libbpf_h')),
include_directories: libbpf_local_h),
cc.find_library('elf'),
cc.find_library('z'),
cc.find_library('zstd')]
@ -156,7 +162,7 @@ message('cpu=@0@ bpf_base_cflags=@1@'.format(cpu, bpf_base_cflags))
libbpf_c_headers = []
if libbpf_a != ''
foreach header: get_option('libbpf_h')
foreach header: libbpf_h
libbpf_c_headers += ['-I', header]
endforeach
endif
@ -194,7 +200,7 @@ foreach flag: bpf_base_cflags
endforeach
if libbpf_a != ''
foreach header: get_option('libbpf_h')
foreach header: libbpf_h
cargo_env.append('BPF_EXTRA_CFLAGS_PRE_INCL', '-I' + header, separator: ' ')
endforeach