Skip to content

Commit 7962a12

Browse files
committed
Merge branch 'master' into deploy
2 parents 57b1175 + c8de72d commit 7962a12

36 files changed

Lines changed: 1294 additions & 28 deletions

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ There are images for various toolchains, they are encoded in the distro name/ver
7878
- `ubuntu@20.04`: Ubuntu 20.04, gcc 9.4.0, binutils 2.34
7979
- `ubuntu@18.04`: Ubuntu 18.04, gcc 7.5.0, binutils 2.30
8080
- `ubuntu@16.04`: Ubuntu 16.04, gcc 5.4.0, binutils 2.26.1
81+
- `fedora@42`: Fedora 42, gcc 15.1.1, binutils 2.44-1, clang 20.1.3
82+
- `fedora@41`: Fedora 41, gcc 14.2.1, binutils 2.43.1-2, clang 19.1.7
8183
- `fedora@40`: Fedora 40, gcc 14.0.1, binutils 2.41-34, clang 18.1.1
8284
- `fedora@39`: Fedora 39, gcc 13.2.1, binutils 2.40-14, clang 17.0.6
8385
- `fedora@38`: Fedora 38, gcc 12.2.1, binutils 2.39-3, clang 16.0.2
@@ -130,6 +132,8 @@ To build modules pass `MODULES=1`
130132

131133
To convert all modules to builtin, pass `MOD2YES=1`.
132134

135+
To build with llvm pass `LLVM=1`, only works using the latest Fedora or Ubuntu image.
136+
133137
To build with clang pass `CLANG=1`, only works using the latest Fedora or Ubuntu image.
134138

135139
For a quiet build pass `QUIET=1`, for verbose pass `VERBOSE=1`.

build/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
all: help
22

3-
export FEDORA_LATEST := 40
3+
export FEDORA_LATEST := 42
44

55
x86 = $(filter x86_64,$(shell uname -m))
66
isa_3 = $(filter arch_3_00,$(shell LD_SHOW_AUXV=1 /bin/true))
@@ -16,8 +16,8 @@ endif
1616

1717
UBUNTU_DISTROS += ubuntu@20.04 ubuntu@18.04 ubuntu@16.04 ubuntu
1818

19-
FEDORA_DISTROS := fedora@${FEDORA_LATEST} fedora@39 fedora@38 fedora@37 fedora@36 fedora@35 fedora@34 fedora@33 fedora@31 fedora
20-
KORG_DISTROS := korg@14.2.0 korg@14.1.0 korg@13.3.0 korg@13.2.0 korg@13.1.0 \
19+
FEDORA_DISTROS := fedora@${FEDORA_LATEST} fedora@41 fedora@40 fedora@39 fedora@38 fedora@37 fedora@36 fedora@35 fedora@34 fedora@33 fedora@31 fedora
20+
KORG_DISTROS := korg@15.1.0 korg@14.2.0 korg@14.1.0 korg@13.3.0 korg@13.2.0 korg@13.1.0 \
2121
korg@12.4.0 korg@12.3.0 korg@12.2.0 korg@12.1.0 korg@11.3.0 \
2222
korg@11.1.0 korg@10.3.0 korg@9.4.0 korg@9.3.0 korg@8.5.0 \
2323
korg@8.1.0 korg@5.5.0

build/scripts/build.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ if [[ "$task" == "kernel" ]]; then
173173
if [[ -n "$LLVM_IAS" ]]; then
174174
cmd+="-e LLVM_IAS=$LLVM_IAS "
175175
fi
176+
177+
if [[ -n "$LLVM" ]]; then
178+
cmd+="-e LLVM=$LLVM "
179+
fi
176180
fi
177181

178182
if [[ "$task" == "ppctests" ]]; then

build/scripts/container-build.sh

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ echo "## ARCH = $ARCH"
1010
echo "## CROSS_COMPILE = $CROSS_COMPILE"
1111
echo "## gcc = $gcc_version"
1212

13-
if [[ -n "$CLANG" ]]; then
13+
if [[ -n "$CLANG" || -n "$LLVM" ]]; then
1414
clang_version=$(clang --version | head -1)
1515
echo "## clang = $clang_version"
1616
fi
@@ -40,7 +40,7 @@ rc=0
4040

4141
if [[ "$1" == "kernel" ]]; then
4242
cc="${CROSS_COMPILE}gcc"
43-
if [[ -n "$CLANG" ]]; then
43+
if [[ -n "$CLANG" || -n "$LLVM" ]]; then
4444
cc="clang"
4545
fi
4646

@@ -50,8 +50,12 @@ if [[ "$1" == "kernel" ]]; then
5050

5151
cc="CC=$cc"
5252

53+
if [[ -n "$LLVM" ]]; then
54+
llvm="LLVM=1"
55+
fi
56+
5357
if [[ -n "$PRE_CLEAN" ]]; then
54-
(set -x; make $verbose $quiet "$cc" clean)
58+
(set -x; make $verbose $quiet $llvm "$cc" clean)
5559
fi
5660

5761
if [[ "$DEFCONFIG" == .config* || "$DEFCONFIG" == *.config ]]; then
@@ -61,7 +65,7 @@ if [[ "$1" == "kernel" ]]; then
6165
# Strip off any suffix after the first '+' used for unique naming
6266
DEFCONFIG="${DEFCONFIG%%+*}"
6367
echo "## DEFCONFIG = $DEFCONFIG"
64-
(set -x; make $verbose $quiet "$cc" $DEFCONFIG)
68+
(set -x; make $verbose $quiet $llvm "$cc" $DEFCONFIG)
6569
fi
6670

6771
if [[ -n "$MERGE_CONFIG" ]]; then
@@ -73,13 +77,13 @@ if [[ "$1" == "kernel" ]]; then
7377
# merge_config.sh always writes its TMP files to $PWD, so we have to
7478
# change into /output before running it.
7579
(cd /output; set -x; /linux/scripts/kconfig/merge_config.sh -m .config ${configs[@]})
76-
(set -x; make $verbose $quiet "$cc" olddefconfig)
80+
(set -x; make $verbose $quiet $llvm "$cc" olddefconfig)
7781
fi
7882

7983
rc=$?
8084

8185
if [[ -n "$MOD2YES" ]]; then
82-
(set -x; make $verbose $quiet "$cc" mod2yesconfig)
86+
(set -x; make $verbose $quiet $llvm "$cc" mod2yesconfig)
8387
fi
8488

8589
if [[ -n "$REPRODUCIBLE" ]]; then
@@ -98,7 +102,7 @@ if [[ "$1" == "kernel" ]]; then
98102
if [[ -n "$SPARSE" ]]; then
99103
rm -f /output/sparse.log
100104
touch /output/sparse.log
101-
(set -x; make C=$SPARSE CF=">> /output/sparse.log 2>&1" $verbose $quiet "$cc" -j $JFACTOR)
105+
(set -x; make C=$SPARSE CF=">> /output/sparse.log 2>&1" $verbose $quiet $llvm "$cc" -j $JFACTOR)
102106

103107
rc=$?
104108

@@ -107,7 +111,7 @@ if [[ "$1" == "kernel" ]]; then
107111
rc=$?
108112
fi
109113
else
110-
(set -x; make $verbose $quiet "$cc" -j $JFACTOR)
114+
(set -x; make $verbose $quiet $llvm "$cc" -j $JFACTOR)
111115
rc=$?
112116
fi
113117
fi
@@ -120,7 +124,7 @@ if [[ "$1" == "kernel" ]]; then
120124
# Clean out any old modules
121125
rm -rf $mod_path
122126

123-
(set -x; make $verbose $quiet -j $JFACTOR "$cc" INSTALL_MOD_PATH=$mod_path modules_install)
127+
(set -x; make $verbose $quiet -j $JFACTOR $llvm "$cc" INSTALL_MOD_PATH=$mod_path modules_install)
124128
rc=$?
125129
if [[ $rc -eq 0 ]]; then
126130
tar -cjf /output/modules.tar.bz2 -C $mod_path lib
@@ -144,7 +148,7 @@ if [[ "$1" == "kernel" ]]; then
144148
fi
145149

146150
if [[ -n "$POST_CLEAN" ]]; then
147-
(set -x; make $verbose $quiet "$cc" clean)
151+
(set -x; make $verbose $quiet $llvm "$cc" clean)
148152
fi
149153
elif [[ "$1" == "docs" ]]; then
150154
(set -x -o pipefail; make $verbose $quiet -j $JFACTOR htmldocs 2>&1 | tee /output/docs.log)
@@ -160,7 +164,7 @@ elif [[ "$1" == "docs" ]]; then
160164
elif [[ "$1" == "perf" ]]; then
161165
cmd="make $quiet -C tools/perf O=/output"
162166

163-
if [[ $(uname -m) != "ppc64le" ]]; then
167+
if [[ $(uname -m) != "ppc64le" || $CROSS_COMPILE == "powerpc64-linux-gnu-" ]]; then
164168
cmd+=" NO_LIBELF=1 NO_LIBTRACEEVENT=1"
165169
fi
166170

build/scripts/image.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@ elif [[ "$distro" == "korg" ]]; then
2727
# Use an older distro for the 5.x toolchains.
2828
if [[ "$version" == 5.* ]]; then
2929
from="public.ecr.aws/docker/library/ubuntu:16.04"
30-
elif [[ "$version" == 13.* ]]; then
31-
from="public.ecr.aws/ubuntu/ubuntu:23.04"
3230
else
33-
from="public.ecr.aws/ubuntu/ubuntu:20.04"
31+
from="public.ecr.aws/ubuntu/ubuntu:24.04"
3432
fi
3533
elif [[ "$distro" == "ubuntu" && "$version" == 16.* ]]; then
3634
from="public.ecr.aws/docker/library/ubuntu:16.04"

build/ubuntu/packages.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ if [[ "$machine" == "ppc64le" ]]; then
2020
PACKAGES+=" libhugetlbfs-dev"
2121
PACKAGES+=" libmnl-dev"
2222
PACKAGES+=" libmount-dev"
23-
if [[ "$major" -gt 20 ]]; then
23+
if [[ "$major" -ge 22 ]]; then
2424
PACKAGES+=" liburing-dev"
25+
PACKAGES+=" pkg-config"
26+
PACKAGES+=" libelf-dev"
27+
PACKAGES+=" libtraceevent-dev"
2528
fi
2629

2730
# For the x86_64 container

etc/configs/fedora-cloud.config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
CONFIG_BTRFS_FS=y
2+
CONFIG_VFAT_FS=y
3+
CONFIG_ZRAM=y

etc/tests.py

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ def full_compile_test(args, suite=None):
290290
k('powernv_defconfig', image, merge_config=cfgs)
291291
# CELL
292292
k('cell_defconfig', image, merge_config=cell_configs)
293+
k('ps3_defconfig', image)
293294
# POWERNV, some shrinking/hardening options
294295
k('skiroot_defconfig', image)
295296
# PPC_86xx (BOOK3S_32)
@@ -387,3 +388,157 @@ def qemu_kasan(args, suite=None):
387388
# script='qemu-pseries+p9+kvm+fedora34', tests=[test], cmdline='disable_radix')
388389

389390
return suite
391+
392+
393+
def qemu_selftests(args):
394+
suite = TestSuite('qemu-selftests')
395+
k = suite.add_kernel
396+
b = suite.add_qemu_boot
397+
398+
image = 'fedora'
399+
400+
for arch in ['ppc64', 'ppc64le']:
401+
k(f'{arch}_guest_defconfig', image, merge_config=guest_configs)
402+
selftests = suite.add_selftest('ubuntu@20.04', arch)
403+
404+
exclude = []
405+
# Not clear what causes failure
406+
exclude.append('powerpc/pmu/ebb:instruction_count_test')
407+
exclude.append('powerpc/pmu/ebb:fork_cleanup_test')
408+
# Confused by qemu
409+
exclude.append('powerpc/security:rfi_flush')
410+
exclude.append('powerpc/security:entry_flush')
411+
exclude.append('powerpc/security:uaccess_flush')
412+
exclude.append('powerpc/security:spectre_v2')
413+
# Slow and not that useful for bug finding
414+
exclude.append('powerpc/benchmarks:context_switch')
415+
exclude.append('powerpc/benchmarks:fork')
416+
exclude.append('powerpc/benchmarks:futex_bench')
417+
exclude.append('powerpc/benchmarks:mmap_bench')
418+
# Tends to timeout
419+
exclude.append('powerpc/signal:sigfuz')
420+
# Requires certain hardware
421+
exclude.append('powerpc/eeh:eeh-basic.sh')
422+
423+
if arch == 'ppc64le':
424+
tests = [QemuSelftestsConfig(selftests, 'powerpc.*', exclude=exclude)]
425+
name = 'qemu-pseries+p9+kvm+fedora41'
426+
b(name, f'{arch}_guest_defconfig', image, tests=tests)
427+
else:
428+
# 64-bit tests don't work due to missing libraries
429+
exclude.append('powerpc/stringloops:.*')
430+
exclude.append('powerpc/copyloops:.*')
431+
exclude.append('powerpc/tm:.*')
432+
exclude.append('powerpc/pmu.*')
433+
exclude.append('powerpc/mm:.*')
434+
exclude.append('powerpc/math:.*')
435+
exclude.append('powerpc/ptrace:.*')
436+
exclude.append('powerpc/papr_sysparm:papr_sysparm')
437+
exclude.append('powerpc/switch_endian:switch_endian_test')
438+
exclude.append('powerpc/vphn:test-vphn')
439+
tests = [QemuSelftestsConfig(selftests, 'powerpc.*', exclude=exclude)]
440+
name = 'qemu-pseries+p9+kvm+be+debian'
441+
b(name, f'{arch}_guest_defconfig', image, tests=tests)
442+
443+
return suite
444+
445+
446+
def std_boot(args, hostname, defconfig, merge_configs, suite=None):
447+
images = args.images
448+
if not images:
449+
images = [DEFAULT_NEW_IMAGE]
450+
451+
if suite is None:
452+
suite = TestSuite(hostname)
453+
454+
for image in images:
455+
suite.add_kernel(defconfig, image, merge_config=merge_configs)
456+
suite.add_boot(hostname, defconfig, image)
457+
458+
return suite
459+
460+
461+
def std_boot_and_test(args, hostname, defconfig, merge_configs, suite=None):
462+
images = args.images
463+
if not images:
464+
images = [DEFAULT_NEW_IMAGE]
465+
466+
if suite is None:
467+
suite = TestSuite(hostname)
468+
469+
ppctests = suite.add_selftest('ubuntu@24.04', 'ppc64le', 'ppctests')
470+
471+
exclude = []
472+
# Tends to timeout
473+
exclude.append('powerpc/signal:sigfuz')
474+
# Requires certain hardware
475+
exclude.append('powerpc/eeh:eeh-basic.sh')
476+
# Not always reliable depending on firmware settings etc.
477+
exclude.append('powerpc/security:spectre_v2')
478+
# Flakey
479+
exclude.append('powerpc/pmu:count_stcx_fail')
480+
481+
tests = [SelftestsConfig(ppctests, 'powerpc', exclude)]
482+
483+
for image in images:
484+
suite.add_kernel(defconfig, image, merge_config=merge_configs)
485+
suite.add_boot(hostname, defconfig, image, tests=tests)
486+
487+
return suite
488+
489+
490+
def ltcppm1(args, suite=None):
491+
return std_boot(args, 'ltcppm1.aus.stglabs.ibm.com', 'powernv_defconfig', powernv_configs, suite)
492+
493+
def ltcppm2(args, suite=None):
494+
return std_boot(args, 'ltcppm2.aus.stglabs.ibm.com', 'ppc64le_guest_config', guest_configs, suite)
495+
496+
def ltcppm3(args, suite=None):
497+
return std_boot_and_test(args, 'ltcppm3.aus.stglabs.ibm.com', 'powernv_defconfig', powernv_configs, suite)
498+
499+
500+
def ppm_hw_boots(args):
501+
suite = TestSuite('ppm-hw-boots')
502+
ltcppm1(args, suite)
503+
ltcppm2(args, suite)
504+
ltcppm3(args, suite)
505+
return suite
506+
507+
508+
def t4240rdb(args, suite=None):
509+
images = args.images
510+
if not images:
511+
images = [DEFAULT_NEW_IMAGE]
512+
513+
if suite is None:
514+
suite = TestSuite('t4240rdb')
515+
516+
for image in images:
517+
suite.add_kernel('corenet64_smp_defconfig+e6500', image, merge_config=corenet64_configs + ['e6500-y', 'altivec-y'])
518+
suite.add_boot('t4240rdb', 'corenet64_smp_defconfig+e6500', image)
519+
520+
# XXX Can't run selftests because Void userspace is BE ELFv2
521+
# Need to build the tests with a matching toolchain.
522+
523+
return suite
524+
525+
526+
def didgo5(args, suite=None):
527+
return std_boot(args, 'didgo5', 'ppc64_guest_defconfig+legacy', legacy_guest_configs, suite)
528+
529+
530+
def mpe_g5(args, suite=None):
531+
return std_boot(args, 'mpe-g5', 'g5_defconfig', g5_configs, suite)
532+
533+
534+
def spork(args, suite=None):
535+
return std_boot_and_test(args, 'spork', 'powernv_defconfig', powernv_configs, suite)
536+
537+
538+
def oz_hw_boots(args):
539+
suite = TestSuite('oz-hw-boots')
540+
t4240rdb(args, suite)
541+
didgo5(args, suite)
542+
mpe_g5(args, suite)
543+
spork(args, suite)
544+
return suite

external/clang/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ $(eval $(call TEMPLATE,14.0.6,8.4))
2727
$(eval $(call TEMPLATE,15.0.7,8.4))
2828
$(eval $(call TEMPLATE,16.0.6,8.7))
2929
$(eval $(call TEMPLATE,17.0.4,8.8))
30+
$(eval $(call TEMPLATE,18.1.8,8.8))
3031

31-
# Only download clang-17 by default
32-
download: llvm-17.0.4
32+
# Only download clang-18 by default
33+
download: llvm-18.1.8
3334

3435
prepare: download
3536

0 commit comments

Comments
 (0)