From 79d26c7a83fd2b14cc9a787e7820824931336d85 Mon Sep 17 00:00:00 2001 From: Patrick Georgi Date: Fri, 8 Jun 2018 18:10:58 +0200 Subject: util/docker/coreboot.org-status: collect report generators Move generators for the board status report and the kconfig options report into a common directory and wrap them in a docker container. Also rework to emit HTML not wiki syntax. Change-Id: If42e1dd312c5fa4e32f519865e3b551bc471bc72 Signed-off-by: Patrick Georgi Reviewed-on: https://review.coreboot.org/26977 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- util/board_status/to-wiki/README | 39 -- util/board_status/to-wiki/bucketize.sh | 45 -- util/board_status/to-wiki/foreword.wiki | 38 -- util/board_status/to-wiki/push-to-wiki.sh | 80 ---- util/board_status/to-wiki/status-to-wiki.sh | 2 - util/board_status/to-wiki/towiki.sh | 507 -------------------- util/docker/coreboot.org-status/Dockerfile | 7 + util/docker/coreboot.org-status/README.md | 4 + .../coreboot.org-status/board-status.html/README | 39 ++ .../board-status.html/bucketize.sh | 45 ++ .../board-status.html/foreword.html | 37 ++ .../board-status.html/status-to-html.sh | 2 + .../board-status.html/tohtml.sh | 521 +++++++++++++++++++++ util/docker/coreboot.org-status/kconfig2html | 118 +++++ util/docker/coreboot.org-status/run.sh | 28 ++ util/optionlist/Makefile | 20 - util/optionlist/README | 1 - util/optionlist/kconfig2html | 118 ----- 18 files changed, 801 insertions(+), 850 deletions(-) delete mode 100644 util/board_status/to-wiki/README delete mode 100755 util/board_status/to-wiki/bucketize.sh delete mode 100644 util/board_status/to-wiki/foreword.wiki delete mode 100755 util/board_status/to-wiki/push-to-wiki.sh delete mode 100755 util/board_status/to-wiki/status-to-wiki.sh delete mode 100755 util/board_status/to-wiki/towiki.sh create mode 100644 util/docker/coreboot.org-status/Dockerfile create mode 100644 util/docker/coreboot.org-status/README.md create mode 100644 util/docker/coreboot.org-status/board-status.html/README create mode 100755 util/docker/coreboot.org-status/board-status.html/bucketize.sh create mode 100644 util/docker/coreboot.org-status/board-status.html/foreword.html create mode 100755 util/docker/coreboot.org-status/board-status.html/status-to-html.sh create mode 100755 util/docker/coreboot.org-status/board-status.html/tohtml.sh create mode 100755 util/docker/coreboot.org-status/kconfig2html create mode 100755 util/docker/coreboot.org-status/run.sh delete mode 100644 util/optionlist/Makefile delete mode 100644 util/optionlist/README delete mode 100755 util/optionlist/kconfig2html diff --git a/util/board_status/to-wiki/README b/util/board_status/to-wiki/README deleted file mode 100644 index 0a0d591c87..0000000000 --- a/util/board_status/to-wiki/README +++ /dev/null @@ -1,39 +0,0 @@ -Scripts to publish board-status data to the wiki -================================================ - -These scripts parse the board-status repository (and the coreboot repository as companion) -to build a meaningful representation of the test coverage stored in board-status. - -The server runs these nightly (CET/CEST), so no user interaction with the wiki page is needed. - -How to use ----------- -When modifying the scripts, or when publishing the results elsewhere, you might want to run them -yourself. You'll need the board-status and the coreboot repository checked out side by side, named -"board-status" and "coreboot" respectively (in particular without .git suffix). - -To emit wiki-text, in the board-status repository's top-level directory, run - - $ ../util/board_status/to-wiki/status-to-wiki.sh - -The output ends up on stdout, so you'll have to store it yourself, if you need it later. - -`push-to-wiki.sh FILENAME TITLE` can be used to push a file into the wiki. -User credentials are looked up in ~/.wikiaccount, which should look like - - USERNAME=user - USERPASS=password - -How it works ------------- -status-to-wiki collects the reports and sorts them in buckets by report date. These can have -weekly, monthly and quarterly granularity. -It then passes these into the towiki script, which reads the data in more details and prints -them in the output format. - -Contributions -------------- -These scripts are rather bare, and you're welcome to extend them to extract more useful data -from both repositories, and to present the data in a nicer way. -A rewrite into another (reasonable) language is fine, too - shell quickly finds its limits -for this kind of text processing. diff --git a/util/board_status/to-wiki/bucketize.sh b/util/board_status/to-wiki/bucketize.sh deleted file mode 100755 index cb643e73bc..0000000000 --- a/util/board_status/to-wiki/bucketize.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -# usage: $0 [weekly|monthly|quarterly] < filenames -# sorts files of the form VENDOR/BOARD/COMMIT/DATE/revision.txt -# into buckets of the given granularity - -weekly() { - date --date="$1" +%GW%V 2>/dev/null - return $? -} - -monthly() { - date --date="$1" +%Y-%m 2>/dev/null - return $? -} - -quarterly() { - date --date="$1" "+%Y %m" 2>/dev/null | awk '{ q=int(($2-1)/3+1); print $1 "Q" q}' - return $? -} - -# Restrict $1 to allowed values -if [ "$1" != "weekly" ] && [ "$1" != "monthly" ] && [ "$1" != "quarterly" ]; then - exit 1 -fi - -curr="" -sort -r -k4 -t/ | while read file; do - # Exclude 'oem' directories - if echo "$file" | grep -q '/oem/'; then continue; fi - timestamp=$(printf "%s" "$file" | cut -d/ -f4 | tr _ :) - - # If the directory is not a date, skip it. - new=$($1 "$timestamp");retval=$? - if [ "$retval" != "0" ]; then continue; fi - - if [ "$new" != "$curr" ]; then - if [ "$curr" != "" ]; then - printf "\n" - fi - printf "%s:" "$new" - curr=$new - fi - printf "%s " "$file" -done -printf "\n" diff --git a/util/board_status/to-wiki/foreword.wiki b/util/board_status/to-wiki/foreword.wiki deleted file mode 100644 index 6b2af63aaf..0000000000 --- a/util/board_status/to-wiki/foreword.wiki +++ /dev/null @@ -1,38 +0,0 @@ -__NOTOC__ -This page was automatically generated. Please do not edit, any edits will be overwritten by an -automatic utility. - -= Mainboards supported by coreboot = - -This page shows two representations of the same data: - -First a list of all mainboards supported by coreboot (current within -one hour) ordered by category. For each mainboard the table shows the -latest user-contributed report of a successful boot on the device. - -After that, the page provides a time-ordered list of these contributed -reports, with the newest report first. - -Boards without such reports may boot or there may be some maintenance -required. The reports contain the coreboot configuration and precise commit -id, so it is possible to reproduce the build. - -We encourage developers and users to contribute reports so we know which -devices are well-tested. We have -[https://review.coreboot.org/gitweb/cgit/coreboot.git/tree/util/board_status a tool in the coreboot repository] -to make contributing easy. The data resides in the -[https://review.coreboot.org/gitweb/cgit/board-status.git/ board status repository]. -Contributing requires an account on review.coreboot.org - -Sometimes the same board is sold under different names, we've tried to -list all known names but some names might be missing. - -If the board is not found in the coreboot's source code, there might -be some form of support that is not ready yet for inclusion in coreboot, -usually people willing to send their patches to coreboot goes through -[https://review.coreboot.org gerrit], so looking there could find some -code for boards that are not yet merged. - -= Vendor trees = -Some vendors have their own coreboot trees/fork, like for instance: -* [http://git.chromium.org/gitweb/?p=chromiumos/third_party/coreboot.git;a=summary chrome/chromium's tree] diff --git a/util/board_status/to-wiki/push-to-wiki.sh b/util/board_status/to-wiki/push-to-wiki.sh deleted file mode 100755 index 6ad3c4a3f8..0000000000 --- a/util/board_status/to-wiki/push-to-wiki.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash -# $1: file containing text -# $2: wiki page to update - -. ~/.wikiaccount -WIKIAPI="https://www.coreboot.org/api.php" -TITLE="$2" -cookie_jar="$HOME/.wikicookiejar" -#Will store file in wikifile - -#################login -#Login part 1 -CR=$(curl -sS \ - --location \ - --retry 2 \ - --retry-delay 5\ - --cookie $cookie_jar \ - --cookie-jar $cookie_jar \ - --user-agent "Curl Shell Script" \ - --keepalive-time 60 \ - --header "Accept-Language: en-us" \ - --header "Connection: keep-alive" \ - --compressed \ - --data-urlencode "lgname=${USERNAME}" \ - --data-urlencode "lgpassword=${USERPASS}" \ - --request "POST" "${WIKIAPI}?action=login&format=json") - -TOKEN=`echo $CR| sed -e 's,^.*"token":"\([^"]*\)".*$,\1,'` -if [ -z "$TOKEN" ]; then - exit -fi - -#Login part 2 -CR=$(curl -sS \ - --location \ - --cookie $cookie_jar \ - --cookie-jar $cookie_jar \ - --user-agent "Curl Shell Script" \ - --keepalive-time 60 \ - --header "Accept-Language: en-us" \ - --header "Connection: keep-alive" \ - --compressed \ - --data-urlencode "lgname=${USERNAME}" \ - --data-urlencode "lgpassword=${USERPASS}" \ - --data-urlencode "lgtoken=${TOKEN}" \ - --request "POST" "${WIKIAPI}?action=login&format=json") - -############### -#Get edit token -CR=$(curl -sS \ - --location \ - --cookie $cookie_jar \ - --cookie-jar $cookie_jar \ - --user-agent "Curl Shell Script" \ - --keepalive-time 60 \ - --header "Accept-Language: en-us" \ - --header "Connection: keep-alive" \ - --compressed \ - --request "POST" "${WIKIAPI}?action=query&meta=tokens&format=json") - -EDITTOKEN=`echo $CR| sed -e 's,^.*"csrftoken":"\([^"]*\)".*$,\1,'` -EDITTOKEN=`printf "$EDITTOKEN"` -if [ ${#EDITTOKEN} != 34 ]; then - exit -fi -######################### - -CR=$(curl -sS \ - --location \ - --cookie $cookie_jar \ - --cookie-jar $cookie_jar \ - --user-agent "Curl Shell Script" \ - --keepalive-time 60 \ - --header "Accept-Language: en-us" \ - --header "Connection: keep-alive" \ - --header "Expect:" \ - --form "token=${EDITTOKEN}" \ - --form "title=${TITLE}" \ - --form "text=<$1" \ - --request "POST" "${WIKIAPI}?action=edit&") diff --git a/util/board_status/to-wiki/status-to-wiki.sh b/util/board_status/to-wiki/status-to-wiki.sh deleted file mode 100755 index 8d3d2a4a70..0000000000 --- a/util/board_status/to-wiki/status-to-wiki.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -ls -d */*/*/*/ | `dirname $0`/bucketize.sh weekly | `dirname $0`/towiki.sh diff --git a/util/board_status/to-wiki/towiki.sh b/util/board_status/to-wiki/towiki.sh deleted file mode 100755 index e8d2fb22fd..0000000000 --- a/util/board_status/to-wiki/towiki.sh +++ /dev/null @@ -1,507 +0,0 @@ -#!/bin/sh -export COREBOOT_DIR="../coreboot" -export GIT_DIR="$COREBOOT_DIR/.git" -CODE_GITWEB="https://review.coreboot.org/gitweb/cgit/coreboot.git/commit/?id=" -STATUS_GITWEB="https://review.coreboot.org/gitweb/cgit/board-status.git/tree/" -if [ -f `dirname $0`/foreword.wiki ]; then - cat `dirname $0`/foreword.wiki -fi -detailed= -nl=" -" -have= -while read line; do - timeframe=`echo $line | cut -d: -f1` - rest=`echo $line | cut -d: -f2-` - detailed="$detailed= $timeframe =$nl" - for i in $rest; do - vendor_board=`echo $i | cut -d/ -f1-2` - commit=`echo $i | cut -d/ -f3` - datetime_path=`echo $i | cut -d/ -f4` - datetime=`echo $datetime_path | tr _ :` - datetime_human=`LC_ALL=C TZ=UTC0 date --date="$datetime"` - upstream=`grep "^Upstream revision:" $vendor_board/$commit/$datetime_path/revision.txt |cut -d: -f2-` - upstream=`git log -1 --format=%H $upstream` - if ! echo "$have"| grep "^$vendor_board:" > /dev/null; then - detailed="$detailed$nl" - have="$have$vendor_board:$datetime$nl" - fi - - detailed="$detailed[[Board:$vendor_board|$vendor_board]] at $datetime_human$nl" - detailed="$detailed[$CODE_GITWEB$upstream upstream tree] ($nl" - for file in "$vendor_board/$commit/$datetime_path/"*; do - if [ "$file" = "$vendor_board/$commit/$datetime_path/revision.txt" ]; then - continue - fi - detailed="$detailed[$STATUS_GITWEB$file `basename $file`] $nl" - done - detailed="$detailed)$nl$nl" - done -done - -cat <ROM 1 -! align="left" | 2 -! align="left" | 3 -! align="left" | 4 -! align="left" | VCS5 -EOF - -for category in laptop server desktop half mini settop "eval" sbc emulation misc unclass; do - last_vendor= - color=eeeeee - case "$category" in - desktop) - cat <Desktops / Workstations - -EOF - ;; - server) - cat <Servers - -EOF - ;; - laptop) - cat <Laptops - -EOF - ;; - half) - cat <Embedded / PC/104 / Half-size boards - -EOF - ;; - mini) - cat <Mini-ITX / Micro-ITX / Nano-ITX - -EOF - ;; - settop) - cat <Set-top-boxes / Thin clients - -EOF - ;; - "eval") - cat <Devel/Eval Boards - -EOF - ;; - sbc) - cat <Single-Board computer - -EOF - ;; - emulation) - cat <Emulation - -EOF - ;; - misc) - cat <Miscellaneous - -EOF - ;; - unclass) - cat <Unclassified - -EOF - ;; - esac - - for vendor_board_dir in "$COREBOOT_DIR"/src/mainboard/*/* ; do - board="$(basename "$vendor_board_dir")" - vendor="$(basename "$(dirname "$vendor_board_dir")")" - if [ "$board" = Kconfig ] || [ "$board" = Kconfig.name ]; then - continue - fi - - if [ -f "$vendor_board_dir/board_info.txt" ]; then - cur_category="$(sed -n "/^[[:space:]]*Category:/ s,^[[:space:]]*Category:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - else - cur_category= - fi - - case "$cur_category" in - desktop|server|laptop|half|mini|settop|"eval"|emulation|sbc|misc) - ;; - *) - cur_category=unclass - ;; - esac - if [ "$cur_category" != "$category" ]; then - continue - fi - - if [ -f "$vendor_board_dir/board_info.txt" ]; then - vendor_2nd="$(sed -n "/^[[:space:]]*Vendor name:/ s,^[[:space:]]*Vendor name:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - board_nice="$(sed -n "/^[[:space:]]*Board name:/ s,^[[:space:]]*Board name:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - rom_package="$(sed -n "/^[[:space:]]*ROM package:/ s,^[[:space:]]*ROM package:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - rom_protocol="$(sed -n "/^[[:space:]]*ROM protocol:/ s,^[[:space:]]*ROM protocol:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - rom_socketed="$(sed -n "/^[[:space:]]*ROM socketed:/ s,^[[:space:]]*ROM socketed:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - flashrom_support="$(sed -n "/^[[:space:]]*Flashrom support:/ s,^[[:space:]]*Flashrom support:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - vendor_cooperation_score="$(sed -n "/^[[:space:]]*Vendor cooperation score:/ s,^[[:space:]]*Vendor cooperation score:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - vendor_cooperation_page="$(sed -n "/^[[:space:]]*Vendor cooperation page:/ s,^[[:space:]]*Vendor cooperation page:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - board_url="$(sed -n "/^[[:space:]]*Board URL:/ s,^[[:space:]]*Board URL:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - clone_of="$(sed -n "/^[[:space:]]*Clone of:/ s,^[[:space:]]*Clone of:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" - else - vendor_2nd= - board_nice= - rom_package= - rom_protocol= - rom_socketed= - flashrom_support= - vendor_cooperation_score= - vendor_cooperation_page= - board_url= - clone_of= - fi - if [ "$last_vendor" != "$vendor" ]; then - last_vendor="$vendor" - if [ "$color" = dddddd ]; then - color=eeeeee - else - color=dddddd - fi - fi - - vendor_nice="$(grep -A1 -i "config VENDOR_$vendor" "$COREBOOT_DIR"/src/mainboard/$vendor/Kconfig.name|tail -n1|sed -n 's,^[[:space:]]*bool[[:space:]]*"\(.*\)"[[:space:]]*$,\1,p')" - - if [ -z "$vendor_nice" ]; then - vendor_nice="$(echo "$vendor" |sed -e "s/\(.\)/\u\1/g")"; - fi - if [ -z "$board_nice" ]; then - board_nice="$(grep -A2 -i "config MAINBOARD_PART_NUMBER" "$COREBOOT_DIR"/src/mainboard/$vendor/$board/Kconfig|tail -n1|sed -n 's,^[[:space:]]*default[[:space:]]*"\(.*\)"[[:space:]]*$,\1,p')" - fi - if [ -z "$board_nice" ]; then - board_nice="$(echo "$board" |sed -e "s,_, ,g;s/\(.\)/\u\1/g")"; - fi - - venboard="$vendor/$board" - if [ -n "$clone_of" ]; then - venboard="$clone_of" - fi - - lastgood="$(echo "$have"| sed -n "/^$(echo "$venboard"|sed 's,/,\\/,g'):/ s,^[^:]*:,,gp")" - - vendor_board_dir="$COREBOOT_DIR"/src/mainboard/"$venboard"; - - northbridge="$(sed -n "/^[[:space:]]*select NORTHBRIDGE_/ s,^[[:space:]]*select NORTHBRIDGE_,,p" "$vendor_board_dir/Kconfig")" - northbridge_nice="$(echo "$northbridge"|sed 's,AMD_AGESA_FAMILY\([0-9a-fA-F]*\)\(.*\),AMD Family \1h\2 (AGESA),g;s,AMD_PI_\(.*\),AMD \1 (PI),g;s,INTEL_FSP_\(.*\),Intel® \1 (FSP),g;s,AMD_FAMILY\([0-9a-fA-F]*\),AMD Family \1h,g;s,AMD_AMDFAM\([0-9a-fA-F]*\),AMD Family \1h,g;s,_, ,g;s,INTEL,Intel®,g;')" - - southbridge="$(sed -n "/[[:space:]]*select SOUTHBRIDGE_/ s,[[:space:]]*select SOUTHBRIDGE_\([^ ]*\).*$,\1,p" "$vendor_board_dir/Kconfig"|grep -v SKIP_|grep -v DISABLE_)" - southbridge_nice="$(echo "$southbridge"|sed 's,_, ,g;s,INTEL,Intel®,g')" - superio="$(sed -n "/[[:space:]]*select SUPERIO_/ s,[[:space:]]*select SUPERIO_,,p" "$vendor_board_dir/Kconfig"|grep -v OVERRIDE_FANCTL)" - superio_nice="$(echo "$superio"|sed 's,_, ,g;s,WINBOND,Winbond™,g;s,ITE,ITE™,g;s,SMSC,SMSC®,g;s,NUVOTON,Nuvoton ,g')" - cpu="$(sed -n "/ select CPU_/ s, select CPU_,,p" "$vendor_board_dir/Kconfig"|grep -v "AMD_AGESA_FAMILY"|grep -v CPU_MICROCODE_CBFS_NONE)" - case "$cpu" in - ALLWINNER_A10) - cpu_nice="Allwinner A10" - socket_nice="?";; - AMD_GEODE_*) - cpu_nice="AMD Geode™ ${cpu#AMD_GEODE_}"; - socket_nice="—";; - AMD_SOCKET_754) - cpu_nice="AMD Sempron™ / Athlon™ 64 / Turion™ 64"; - socket_nice="Socket 754";; - AMD_SOCKET_ASB2) - cpu_nice="AMD Turion™ II Neo/Athlon™ II Neo"; - socket_nice="ASB2 (BGA812)";; - AMD_SOCKET_S1G1) - cpu_nice="AMD Turion™ / X2 Sempron™"; - socket_nice="Socket S1G1";; - AMD_SOCKET_G34|AMD_SOCKET_G34_NON_AGESA) - cpu_nice="AMD Opteron™ Magny-Cours/Interlagos"; - socket_nice="Socket G34";; - AMD_SOCKET_C32|AMD_SOCKET_C32_NON_AGESA) - cpu_nice="AMD Opteron™ Magny-Cours/Interlagos"; - socket_nice="Socket C32";; - AMD_SOCKET_AM2) - cpu_nice="?"; - socket_nice="Socket AM2" - ;; - AMD_SOCKET_AM3) - cpu_nice="AMD Athlon™ 64 / FX / X2"; - socket_nice="Socket AM3" - ;; - AMD_SOCKET_AM2R2) - cpu_nice="AMD Athlon™ 64 / X2 / FX, Sempron™"; - socket_nice="Socket AM2+" - ;; - AMD_SOCKET_F) - cpu_nice="AMD Opteron™"; - socket_nice="Socket F" - ;; - AMD_SOCKET_F_1207) - cpu_nice="AMD Opteron™"; - socket_nice="Socket F 1207" - ;; - AMD_SOCKET_940) - cpu_nice="AMD Opteron™"; - socket_nice="Socket 940" - ;; - AMD_SOCKET_939) - cpu_nice="AMD Athlon™ 64 / FX / X2"; - socket_nice="Socket 939" - ;; - AMD_SC520) - cpu_nice="AMD Élan™SC520"; - socket_nice="—";; - ARMLTD_CORTEX_A9) - cpu_nice="ARM Cortex A9"; - socket_nice="?";; - DMP_VORTEX86EX) - cpu_nice="DMP VORTEX86EX"; - socket_nice="?";; - SAMSUNG_EXYNOS5420) - cpu_nice="Samsung Exynos 5420"; - socket_nice="?";; - SAMSUNG_EXYNOS5250) - cpu_nice="Samsung Exynos 5250"; - socket_nice="?";; - TI_AM335X) - cpu_nice="TI AM335X"; - socket_nice="?";; - INTEL_SLOT_1) - cpu_nice="Intel® Pentium® II/III, Celeron®"; - socket_nice="Slot 1";; - INTEL_SOCKET_MPGA604) - cpu_nice="Intel® Xeon®"; - socket_nice="Socket 604";; - INTEL_SOCKET_MFCPGA478) - cpu_nice="Intel® Core™ 2 Duo Mobile, Core™ Duo/Solo, Celeron® M"; - socket_nice="Socket mPGA478";; - INTEL_SOCKET_LGA771) - cpu_nice="Intel Xeon™ 5000 series"; - socket_nice="Socket LGA771";; - INTEL_SOCKET_LGA775) - cpu_nice="Intel® Core 2, Pentium 4/D"; - socket_nice="Socket LGA775";; - INTEL_SOCKET_PGA370) - cpu_nice="Intel® Pentium® III-800, Celeron®" - socket_nice="Socket 370";; - INTEL_SOCKET_MPGA479M) - cpu_nice="Intel® Mobile Celeron" - socket_nice="Socket 479" - ;; - INTEL_HASWELL) - cpu_nice="Intel® 4th Gen (Haswell) Core i3/i5/i7" - socket_nice="?" - ;; - INTEL_FSP_RANGELEY) - cpu_nice="Intel® Atom Rangeley (FSP)" - socket_nice="?" - ;; - INTEL_SOCKET_RPGA989|INTEL_SOCKET_LGA1155|INTEL_SOCKET_RPGA988B) - socket_nice="`echo $cpu | sed 's,INTEL_SOCKET_,Socket ,g'`" - case $northbridge in - INTEL_HASWELL) - cpu_nice="Intel® 4th Gen (Haswell) Core i3/i5/i7";; - INTEL_IVYBRIDGE|INTEL_FSP_IVYBRIDGE) - cpu_nice="Intel® 3rd Gen (Ivybridge) Core i3/i5/i7";; - INTEL_SANDYBRIDGE) - cpu_nice="Intel® 2nd Gen (Sandybridge) Core i3/i5/i7";; - *) - cpu_nice="$northbridge";; - esac - ;; - INTEL_SOCKET_441) - cpu_nice="Intel® Atom™ 230"; - socket_nice="Socket 441";; - INTEL_SOCKET_BGA956) - case $northbridge in - INTEL_GM45) - cpu_nice="Intel® Core 2 Duo (Penryn)" - socket_nice="Socket P";; - *) - cpu_nice="Intel® Pentium® M"; - socket_nice="BGA956";; - esac - ;; - INTEL_SOCKET_FC_PGA370) - cpu_nice="Intel® Pentium® III / Celeron®"; - socket_nice="Socket 370" - ;; - INTEL_EP80579) - cpu_nice="Intel® EP80579"; - socket_nice="Intel® EP80579" - ;; - INTEL_SOCKET_MFCBGA479) - cpu_nice="Intel® Mobile Celeron" - socket_nice="Socket 479";; - VIA_C3) - cpu_nice="VIA C3™"; - socket_nice="?" - ;; - VIA_C7) - cpu_nice="VIA C7™"; - socket_nice="?" - ;; - VIA_NANO) - cpu_nice="VIA Nano™"; - socket_nice="?" - ;; - QEMU_X86) - cpu_nice="QEMU x86"; - socket_nice="—" - ;; - "") - case $northbridge in - INTEL_NEHALEM) - cpu_nice="Intel® 1st Gen (Nehalem) Core i3/i5/i7" - socket_nice="?";; - RDC_R8610) - cpu_nice="RDC 8610" - socket_nice="—";; - AMD_AGESA_*|AMD_PI_*) - cpu_nice="$northbridge_nice" - socket_nice="?";; - *) - cpu_nice="$northbridge" - socket_nice="$northbridge";; - esac - ;; - *) - cpu_nice="$cpu" - socket_nice="$cpu";; - esac - - echo "|- bgcolor=\"#$color\"" - - if [ -z "$board_url" ]; then - echo "| $vendor_nice" - else - echo "| [$board_url $vendor_nice]" - fi - if ! [ -z "$vendor_2nd" ]; then - echo "( $vendor_2nd )" - fi - - echo "| [[Board:$vendor/$board|$board_nice]]" - - if [ -z "$lastgood" ]; then - echo "| style=\"background:red\" | Unknown" - else - lastgood_diff=0 - lastgood_ts=$(date -d "$lastgood" "+%s") - if [ "$lastgood_ts" != "" ]; then - current_ts=$(date "+%s") - if [ "$lastgood_ts" -lt "$current_ts" ]; then - lastgood_diff=$(( current_ts - lastgood_ts )) - # Convert seconds to days - lastgood_diff=$(( lastgood_diff / 86400 )) - # Set maximum age at 255 days for convenience of code - if [ $lastgood_diff -gt 255 ]; then - lastgood_diff=255 - fi - fi - fi - lastgood_diff_hex=$(echo "obase=16; $lastgood_diff" | bc) - if [ "$lastgood_diff" -lt 16 ]; then - lastgood_diff_hex="0${lastgood_diff_hex}" - fi - cell_bgcolor="#${lastgood_diff_hex}ff00" - echo "| style=\"background:${cell_bgcolor}\" | [[#$venboard|$lastgood]]" - fi - - echo "| $northbridge_nice" - echo "| $southbridge_nice" - echo "| $superio_nice" - echo "| $cpu_nice" - echo "| $socket_nice" - if [ "$rom_package" = "" ]; then - echo "| ?" - else - echo "| $rom_package" - fi - if [ "$rom_protocol" = "" ]; then - echo "| ?" - else - echo "| $rom_protocol" - fi - if [ "$rom_socketed" = "y" ]; then - echo "| style=\"background:lime\" | Y" - elif [ "$rom_socketed" = "n" ]; then - echo "| style=\"background:red\" | N" - elif [ "$flashrom_support" = "variable" ]; then - echo "| ...7" - elif [ "$rom_socketed" = "" ]; then - echo "| ?" - else - echo "| $rom_socketed" - fi - if [ "$flashrom_support" = "y" ]; then - echo "| style=\"background:lime\" | Y" - elif [ "$flashrom_support" = "n" ]; then - echo "| style=\"background:red\" | N" - elif [ "$flashrom_support" = "coreboot-only" ]; then - echo "| style=\"background:yellow\" | ...6" - elif [ "$flashrom_support" = "" ]; then - echo "| ?" - else - echo "| $flashrom_support" - fi - if [ "$vendor_cooperation_score" = "4" ]; then - echo -n "| style=\"background:lime\"" - elif [ "$vendor_cooperatio_scoren" = "3" ]; then - echo -n "| style=\"background:yellow\"" - fi - if [ "$vendor_cooperation_page" != "" ]; then - echo "| [[$vendor_cooperation_page|$vendor_cooperation_score]]" - elif [ "$vendor_cooperation_score" = "" ]; then - echo "| —" - else - echo "| $vendor_cooperation_score" - fi - echo - done -done -echo "|}" - -cat < -1 ROM chip package (PLCC, DIP32, DIP8, SOIC8).
-2 ROM chip protocol/type (parallel flash, LPC, FWH, SPI).
-3 ROM chip socketed (Y/N)?
-4 Board supported by [http://www.flashrom.org flashrom] (Y/N)?
-5 Vendor Cooperation Score.
-6 [http://www.flashrom.org flashrom] does not work when the vendor BIOS is booted, but it does work when the machine is booted with coreboot.
-7 Some boards have ROM sockets, others are soldered.
- -EOF - - -echo "$detailed" diff --git a/util/docker/coreboot.org-status/Dockerfile b/util/docker/coreboot.org-status/Dockerfile new file mode 100644 index 0000000000..910f8e75cc --- /dev/null +++ b/util/docker/coreboot.org-status/Dockerfile @@ -0,0 +1,7 @@ +FROM debian:sid + +RUN apt-get update && apt-get install -y python git bc && apt-get clean + +ADD board-status.html kconfig2html run.sh /opt/tools/ + +ENTRYPOINT /opt/tools/run.sh diff --git a/util/docker/coreboot.org-status/README.md b/util/docker/coreboot.org-status/README.md new file mode 100644 index 0000000000..f35cf55223 --- /dev/null +++ b/util/docker/coreboot.org-status/README.md @@ -0,0 +1,4 @@ +# Docker container to create coreboot status reports + +This container expects input in `/data-in/{coreboot,board-status}.git` and +emits two files `/data-out/{board-status.html,kconfig-options.html}`. diff --git a/util/docker/coreboot.org-status/board-status.html/README b/util/docker/coreboot.org-status/board-status.html/README new file mode 100644 index 0000000000..0a0d591c87 --- /dev/null +++ b/util/docker/coreboot.org-status/board-status.html/README @@ -0,0 +1,39 @@ +Scripts to publish board-status data to the wiki +================================================ + +These scripts parse the board-status repository (and the coreboot repository as companion) +to build a meaningful representation of the test coverage stored in board-status. + +The server runs these nightly (CET/CEST), so no user interaction with the wiki page is needed. + +How to use +---------- +When modifying the scripts, or when publishing the results elsewhere, you might want to run them +yourself. You'll need the board-status and the coreboot repository checked out side by side, named +"board-status" and "coreboot" respectively (in particular without .git suffix). + +To emit wiki-text, in the board-status repository's top-level directory, run + + $ ../util/board_status/to-wiki/status-to-wiki.sh + +The output ends up on stdout, so you'll have to store it yourself, if you need it later. + +`push-to-wiki.sh FILENAME TITLE` can be used to push a file into the wiki. +User credentials are looked up in ~/.wikiaccount, which should look like + + USERNAME=user + USERPASS=password + +How it works +------------ +status-to-wiki collects the reports and sorts them in buckets by report date. These can have +weekly, monthly and quarterly granularity. +It then passes these into the towiki script, which reads the data in more details and prints +them in the output format. + +Contributions +------------- +These scripts are rather bare, and you're welcome to extend them to extract more useful data +from both repositories, and to present the data in a nicer way. +A rewrite into another (reasonable) language is fine, too - shell quickly finds its limits +for this kind of text processing. diff --git a/util/docker/coreboot.org-status/board-status.html/bucketize.sh b/util/docker/coreboot.org-status/board-status.html/bucketize.sh new file mode 100755 index 0000000000..cb643e73bc --- /dev/null +++ b/util/docker/coreboot.org-status/board-status.html/bucketize.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# usage: $0 [weekly|monthly|quarterly] < filenames +# sorts files of the form VENDOR/BOARD/COMMIT/DATE/revision.txt +# into buckets of the given granularity + +weekly() { + date --date="$1" +%GW%V 2>/dev/null + return $? +} + +monthly() { + date --date="$1" +%Y-%m 2>/dev/null + return $? +} + +quarterly() { + date --date="$1" "+%Y %m" 2>/dev/null | awk '{ q=int(($2-1)/3+1); print $1 "Q" q}' + return $? +} + +# Restrict $1 to allowed values +if [ "$1" != "weekly" ] && [ "$1" != "monthly" ] && [ "$1" != "quarterly" ]; then + exit 1 +fi + +curr="" +sort -r -k4 -t/ | while read file; do + # Exclude 'oem' directories + if echo "$file" | grep -q '/oem/'; then continue; fi + timestamp=$(printf "%s" "$file" | cut -d/ -f4 | tr _ :) + + # If the directory is not a date, skip it. + new=$($1 "$timestamp");retval=$? + if [ "$retval" != "0" ]; then continue; fi + + if [ "$new" != "$curr" ]; then + if [ "$curr" != "" ]; then + printf "\n" + fi + printf "%s:" "$new" + curr=$new + fi + printf "%s " "$file" +done +printf "\n" diff --git a/util/docker/coreboot.org-status/board-status.html/foreword.html b/util/docker/coreboot.org-status/board-status.html/foreword.html new file mode 100644 index 0000000000..4d77c3f66e --- /dev/null +++ b/util/docker/coreboot.org-status/board-status.html/foreword.html @@ -0,0 +1,37 @@ +

Mainboards supported by coreboot

+ +

This page shows two representations of the same data:

+ +

First a list of all mainboards supported by coreboot (current within +one hour) ordered by category. For each mainboard the table shows the +latest user-contributed report of a successful boot on the device.

+ +

After that, the page provides a time-ordered list of these contributed +reports, with the newest report first.

+ +

Boards without such reports may boot or there may be some maintenance +required. The reports contain the coreboot configuration and precise commit +id, so it is possible to reproduce the build.

+ +

We encourage developers and users to contribute reports so we know which +devices are well-tested. We have +a tool in the coreboot repository +to make contributing easy. The data resides in the +board status repository. +Contributing requires an account on review.coreboot.org

+ +

Sometimes the same board is sold under different names, we've tried to +list all known names but some names might be missing.

+ +

If the board is not found in the coreboot's source code, there might +be some form of support that is not ready yet for inclusion in coreboot, +usually people willing to send their patches to coreboot goes through +gerrit, so looking there could find some +code for boards that are not yet merged.

+ +

Vendor trees

+

Some vendors have their own coreboot trees/fork, for instance: +

+

diff --git a/util/docker/coreboot.org-status/board-status.html/status-to-html.sh b/util/docker/coreboot.org-status/board-status.html/status-to-html.sh new file mode 100755 index 0000000000..6630b30c1f --- /dev/null +++ b/util/docker/coreboot.org-status/board-status.html/status-to-html.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ls -d */*/*/*/ | `dirname $0`/bucketize.sh weekly | `dirname $0`/tohtml.sh diff --git a/util/docker/coreboot.org-status/board-status.html/tohtml.sh b/util/docker/coreboot.org-status/board-status.html/tohtml.sh new file mode 100755 index 0000000000..b1a7ccdc9a --- /dev/null +++ b/util/docker/coreboot.org-status/board-status.html/tohtml.sh @@ -0,0 +1,521 @@ +#!/bin/sh +export COREBOOT_DIR="../coreboot.git" +export GIT_DIR="$COREBOOT_DIR/.git" +CODE_GITWEB="https://review.coreboot.org/gitweb/cgit/coreboot.git/commit/?id=" +STATUS_GITWEB="https://review.coreboot.org/gitweb/cgit/board-status.git/tree/" +if [ -f `dirname $0`/foreword.html ]; then + cat `dirname $0`/foreword.html +fi +detailed= +nl=" +" +have= +while read line; do + timeframe=`echo $line | cut -d: -f1` + rest=`echo $line | cut -d: -f2-` + detailed="$detailed

$timeframe

$nl" + for i in $rest; do + vendor_board=`echo $i | cut -d/ -f1-2` + commit=`echo $i | cut -d/ -f3` + datetime_path=`echo $i | cut -d/ -f4` + datetime=`echo $datetime_path | tr _ :` + datetime_human=`LC_ALL=C TZ=UTC0 date --date="$datetime"` + upstream=`grep "^Upstream revision:" $vendor_board/$commit/$datetime_path/revision.txt |cut -d: -f2-` + upstream=`git log -1 --format=%H $upstream` + if ! echo "$have"| grep "^$vendor_board:" > /dev/null; then + detailed="$detailed$nl" + have="$have$vendor_board:$datetime$nl" + fi + + detailed="$detailed$vendor_board at $datetime_human$nl" + detailed="$detailedupstream tree ($nl" + for file in "$vendor_board/$commit/$datetime_path/"*; do + if [ "$file" = "$vendor_board/$commit/$datetime_path/revision.txt" ]; then + continue + fi + detailed="$detailed`basename $file` $nl" + done + detailed="$detailed)
" + done +done + +cat <Motherboards supported in coreboot + + + + + + + + + + + + + + + + + +EOF + +for category in laptop server desktop half mini settop "eval" sbc emulation misc unclass; do + last_vendor= + color=eeeeee + case "$category" in + desktop) + cat < + + + +EOF + ;; + server) + cat < + + + +EOF + ;; + laptop) + cat < + + + +EOF + ;; + half) + cat < + + + +EOF + ;; + mini) + cat < + + + +EOF + ;; + settop) + cat < + + + +EOF + ;; + "eval") + cat < + + + +EOF + ;; + sbc) + cat < + + + +EOF + ;; + emulation) + cat < + + + +EOF + ;; + misc) + cat < + + + +EOF + ;; + unclass) + cat < + + + +EOF + ;; + esac + + for vendor_board_dir in "$COREBOOT_DIR"/src/mainboard/*/* ; do + board="$(basename "$vendor_board_dir")" + vendor="$(basename "$(dirname "$vendor_board_dir")")" + if [ "$board" = Kconfig ] || [ "$board" = Kconfig.name ]; then + continue + fi + + if [ -f "$vendor_board_dir/board_info.txt" ]; then + cur_category="$(sed -n "/^[[:space:]]*Category:/ s,^[[:space:]]*Category:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + else + cur_category= + fi + + case "$cur_category" in + desktop|server|laptop|half|mini|settop|"eval"|emulation|sbc|misc) + ;; + *) + cur_category=unclass + ;; + esac + if [ "$cur_category" != "$category" ]; then + continue + fi + + if [ -f "$vendor_board_dir/board_info.txt" ]; then + vendor_2nd="$(sed -n "/^[[:space:]]*Vendor name:/ s,^[[:space:]]*Vendor name:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + board_nice="$(sed -n "/^[[:space:]]*Board name:/ s,^[[:space:]]*Board name:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + rom_package="$(sed -n "/^[[:space:]]*ROM package:/ s,^[[:space:]]*ROM package:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + rom_protocol="$(sed -n "/^[[:space:]]*ROM protocol:/ s,^[[:space:]]*ROM protocol:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + rom_socketed="$(sed -n "/^[[:space:]]*ROM socketed:/ s,^[[:space:]]*ROM socketed:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + flashrom_support="$(sed -n "/^[[:space:]]*Flashrom support:/ s,^[[:space:]]*Flashrom support:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + vendor_cooperation_score="$(sed -n "/^[[:space:]]*Vendor cooperation score:/ s,^[[:space:]]*Vendor cooperation score:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + vendor_cooperation_page="$(sed -n "/^[[:space:]]*Vendor cooperation page:/ s,^[[:space:]]*Vendor cooperation page:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + board_url="$(sed -n "/^[[:space:]]*Board URL:/ s,^[[:space:]]*Board URL:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + clone_of="$(sed -n "/^[[:space:]]*Clone of:/ s,^[[:space:]]*Clone of:[[:space:]]*,,p" "$vendor_board_dir/board_info.txt")" + else + vendor_2nd= + board_nice= + rom_package= + rom_protocol= + rom_socketed= + flashrom_support= + vendor_cooperation_score= + vendor_cooperation_page= + board_url= + clone_of= + fi + if [ "$last_vendor" != "$vendor" ]; then + last_vendor="$vendor" + if [ "$color" = dddddd ]; then + color=eeeeee + else + color=dddddd + fi + fi + + vendor_nice="$(grep -A1 -i "config VENDOR_$vendor" "$COREBOOT_DIR"/src/mainboard/$vendor/Kconfig.name|tail -n1|sed -n 's,^[[:space:]]*bool[[:space:]]*"\(.*\)"[[:space:]]*$,\1,p')" + + if [ -z "$vendor_nice" ]; then + vendor_nice="$(echo "$vendor" |sed -e "s/\(.\)/\u\1/g")"; + fi + if [ -z "$board_nice" ]; then + board_nice="$(grep -A2 -i "config MAINBOARD_PART_NUMBER" "$COREBOOT_DIR"/src/mainboard/$vendor/$board/Kconfig|tail -n1|sed -n 's,^[[:space:]]*default[[:space:]]*"\(.*\)"[[:space:]]*$,\1,p')" + fi + if [ -z "$board_nice" ]; then + board_nice="$(echo "$board" |sed -e "s,_, ,g;s/\(.\)/\u\1/g")"; + fi + + venboard="$vendor/$board" + if [ -n "$clone_of" ]; then + venboard="$clone_of" + fi + + lastgood="$(echo "$have"| sed -n "/^$(echo "$venboard"|sed 's,/,\\/,g'):/ s,^[^:]*:,,gp")" + + vendor_board_dir="$COREBOOT_DIR"/src/mainboard/"$venboard"; + + northbridge="$(sed -n "/^[[:space:]]*select NORTHBRIDGE_/ s,^[[:space:]]*select NORTHBRIDGE_,,p" "$vendor_board_dir/Kconfig")" + northbridge_nice="$(echo "$northbridge"|sed 's,AMD_AGESA_FAMILY\([0-9a-fA-F]*\)\(.*\),AMD Family \1h\2 (AGESA),g;s,AMD_PI_\(.*\),AMD \1 (PI),g;s,INTEL_FSP_\(.*\),Intel® \1 (FSP),g;s,AMD_FAMILY\([0-9a-fA-F]*\),AMD Family \1h,g;s,AMD_AMDFAM\([0-9a-fA-F]*\),AMD Family \1h,g;s,_, ,g;s,INTEL,Intel®,g;')" + + southbridge="$(sed -n "/[[:space:]]*select SOUTHBRIDGE_/ s,[[:space:]]*select SOUTHBRIDGE_\([^ ]*\).*$,\1,p" "$vendor_board_dir/Kconfig"|grep -v SKIP_|grep -v DISABLE_)" + southbridge_nice="$(echo "$southbridge"|sed 's,_, ,g;s,INTEL,Intel®,g')" + superio="$(sed -n "/[[:space:]]*select SUPERIO_/ s,[[:space:]]*select SUPERIO_,,p" "$vendor_board_dir/Kconfig"|grep -v OVERRIDE_FANCTL)" + superio_nice="$(echo "$superio"|sed 's,_, ,g;s,WINBOND,Winbond™,g;s,ITE,ITE™,g;s,SMSC,SMSC®,g;s,NUVOTON,Nuvoton ,g')" + cpu="$(sed -n "/ select CPU_/ s, select CPU_,,p" "$vendor_board_dir/Kconfig"|grep -v "AMD_AGESA_FAMILY"|grep -v CPU_MICROCODE_CBFS_NONE)" + case "$cpu" in + ALLWINNER_A10) + cpu_nice="Allwinner A10" + socket_nice="?";; + AMD_GEODE_*) + cpu_nice="AMD Geode™ ${cpu#AMD_GEODE_}"; + socket_nice="—";; + AMD_SOCKET_754) + cpu_nice="AMD Sempron™ / Athlon™ 64 / Turion™ 64"; + socket_nice="Socket 754";; + AMD_SOCKET_ASB2) + cpu_nice="AMD Turion™ II Neo/Athlon™ II Neo"; + socket_nice="ASB2 (BGA812)";; + AMD_SOCKET_S1G1) + cpu_nice="AMD Turion™ / X2 Sempron™"; + socket_nice="Socket S1G1";; + AMD_SOCKET_G34|AMD_SOCKET_G34_NON_AGESA) + cpu_nice="AMD Opteron™ Magny-Cours/Interlagos"; + socket_nice="Socket G34";; + AMD_SOCKET_C32|AMD_SOCKET_C32_NON_AGESA) + cpu_nice="AMD Opteron™ Magny-Cours/Interlagos"; + socket_nice="Socket C32";; + AMD_SOCKET_AM2) + cpu_nice="?"; + socket_nice="Socket AM2" + ;; + AMD_SOCKET_AM3) + cpu_nice="AMD Athlon™ 64 / FX / X2"; + socket_nice="Socket AM3" + ;; + AMD_SOCKET_AM2R2) + cpu_nice="AMD Athlon™ 64 / X2 / FX, Sempron™"; + socket_nice="Socket AM2+" + ;; + AMD_SOCKET_F) + cpu_nice="AMD Opteron™"; + socket_nice="Socket F" + ;; + AMD_SOCKET_F_1207) + cpu_nice="AMD Opteron™"; + socket_nice="Socket F 1207" + ;; + AMD_SOCKET_940) + cpu_nice="AMD Opteron™"; + socket_nice="Socket 940" + ;; + AMD_SOCKET_939) + cpu_nice="AMD Athlon™ 64 / FX / X2"; + socket_nice="Socket 939" + ;; + AMD_SC520) + cpu_nice="AMD Élan™SC520"; + socket_nice="—";; + ARMLTD_CORTEX_A9) + cpu_nice="ARM Cortex A9"; + socket_nice="?";; + DMP_VORTEX86EX) + cpu_nice="DMP VORTEX86EX"; + socket_nice="?";; + SAMSUNG_EXYNOS5420) + cpu_nice="Samsung Exynos 5420"; + socket_nice="?";; + SAMSUNG_EXYNOS5250) + cpu_nice="Samsung Exynos 5250"; + socket_nice="?";; + TI_AM335X) + cpu_nice="TI AM335X"; + socket_nice="?";; + INTEL_SLOT_1) + cpu_nice="Intel® Pentium® II/III, Celeron®"; + socket_nice="Slot 1";; + INTEL_SOCKET_MPGA604) + cpu_nice="Intel® Xeon®"; + socket_nice="Socket 604";; + INTEL_SOCKET_MFCPGA478) + cpu_nice="Intel® Core™ 2 Duo Mobile, Core™ Duo/Solo, Celeron® M"; + socket_nice="Socket mPGA478";; + INTEL_SOCKET_LGA771) + cpu_nice="Intel Xeon™ 5000 series"; + socket_nice="Socket LGA771";; + INTEL_SOCKET_LGA775) + cpu_nice="Intel® Core 2, Pentium 4/D"; + socket_nice="Socket LGA775";; + INTEL_SOCKET_PGA370) + cpu_nice="Intel® Pentium® III-800, Celeron®" + socket_nice="Socket 370";; + INTEL_SOCKET_MPGA479M) + cpu_nice="Intel® Mobile Celeron" + socket_nice="Socket 479" + ;; + INTEL_HASWELL) + cpu_nice="Intel® 4th Gen (Haswell) Core i3/i5/i7" + socket_nice="?" + ;; + INTEL_FSP_RANGELEY) + cpu_nice="Intel® Atom Rangeley (FSP)" + socket_nice="?" + ;; + INTEL_SOCKET_RPGA989|INTEL_SOCKET_LGA1155|INTEL_SOCKET_RPGA988B) + socket_nice="`echo $cpu | sed 's,INTEL_SOCKET_,Socket ,g'`" + case $northbridge in + INTEL_HASWELL) + cpu_nice="Intel® 4th Gen (Haswell) Core i3/i5/i7";; + INTEL_IVYBRIDGE|INTEL_FSP_IVYBRIDGE) + cpu_nice="Intel® 3rd Gen (Ivybridge) Core i3/i5/i7";; + INTEL_SANDYBRIDGE) + cpu_nice="Intel® 2nd Gen (Sandybridge) Core i3/i5/i7";; + *) + cpu_nice="$northbridge";; + esac + ;; + INTEL_SOCKET_441) + cpu_nice="Intel® Atom™ 230"; + socket_nice="Socket 441";; + INTEL_SOCKET_BGA956) + case $northbridge in + INTEL_GM45) + cpu_nice="Intel® Core 2 Duo (Penryn)" + socket_nice="Socket P";; + *) + cpu_nice="Intel® Pentium® M"; + socket_nice="BGA956";; + esac + ;; + INTEL_SOCKET_FC_PGA370) + cpu_nice="Intel® Pentium® III / Celeron®"; + socket_nice="Socket 370" + ;; + INTEL_EP80579) + cpu_nice="Intel® EP80579"; + socket_nice="Intel® EP80579" + ;; + INTEL_SOCKET_MFCBGA479) + cpu_nice="Intel® Mobile Celeron" + socket_nice="Socket 479";; + VIA_C3) + cpu_nice="VIA C3™"; + socket_nice="?" + ;; + VIA_C7) + cpu_nice="VIA C7™"; + socket_nice="?" + ;; + VIA_NANO) + cpu_nice="VIA Nano™"; + socket_nice="?" + ;; + QEMU_X86) + cpu_nice="QEMU x86"; + socket_nice="—" + ;; + "") + case $northbridge in + INTEL_NEHALEM) + cpu_nice="Intel® 1st Gen (Nehalem) Core i3/i5/i7" + socket_nice="?";; + RDC_R8610) + cpu_nice="RDC 8610" + socket_nice="—";; + AMD_AGESA_*|AMD_PI_*) + cpu_nice="$northbridge_nice" + socket_nice="?";; + *) + cpu_nice="$northbridge" + socket_nice="$northbridge";; + esac + ;; + *) + cpu_nice="$cpu" + socket_nice="$cpu";; + esac + + echo "" + + if [ -z "$board_url" ]; then + echo "" + + if [ -z "$lastgood" ]; then + echo "" + else + lastgood_diff=0 + lastgood_ts=$(date -d "$lastgood" "+%s") + if [ "$lastgood_ts" != "" ]; then + current_ts=$(date "+%s") + if [ "$lastgood_ts" -lt "$current_ts" ]; then + lastgood_diff=$(( current_ts - lastgood_ts )) + # Convert seconds to days + lastgood_diff=$(( lastgood_diff / 86400 )) + # Set maximum age at 255 days for convenience of code + if [ $lastgood_diff -gt 255 ]; then + lastgood_diff=255 + fi + fi + fi + lastgood_diff_hex=$(echo "obase=16; $lastgood_diff" | bc) + if [ "$lastgood_diff" -lt 16 ]; then + lastgood_diff_hex="0${lastgood_diff_hex}" + fi + cell_bgcolor="#${lastgood_diff_hex}ff00" + echo "" + fi + + echo "" + echo "" + echo "" + echo "" + echo "" + if [ "$rom_package" = "" ]; then + echo "" + else + echo "" + fi + if [ "$rom_protocol" = "" ]; then + echo "" + else + echo "" + fi + if [ "$rom_socketed" = "y" ]; then + echo "" + elif [ "$rom_socketed" = "n" ]; then + echo "" + elif [ "$flashrom_support" = "variable" ]; then + echo "" + elif [ "$rom_socketed" = "" ]; then + echo "" + else + echo "" + fi + if [ "$flashrom_support" = "y" ]; then + echo "" + elif [ "$flashrom_support" = "n" ]; then + echo "" + elif [ "$flashrom_support" = "coreboot-only" ]; then + echo "" + elif [ "$flashrom_support" = "" ]; then + echo "" + else + echo "" + fi + if [ "$vendor_cooperation_score" = "4" ]; then + echo -n "" + done +done +echo "
VendorMainboardLatest known goodNorthbridgeSouthbridgeSuper I/OCPUSocketROM 1234VCS5

Desktops / Workstations

Servers

Laptops

Embedded / PC/104 / Half-size boards

Mini-ITX / Micro-ITX / Nano-ITX

Set-top-boxes / Thin clients

Devel/Eval Boards

Single-Board computer

Emulation

Miscellaneous

Unclassified

$vendor_nice" + else + echo "$vendor_nice" + fi + if ! [ -z "$vendor_2nd" ]; then + echo " ($vendor_2nd)" + fi + + echo "$board_niceUnknown$lastgood$northbridge_nice$southbridge_nice$superio_nice$cpu_nice$socket_nice?$rom_package?$rom_protocolYN...7?$rom_socketedYN...6?$flashrom_support" + elif [ "$vendor_cooperatio_scoren" = "3" ]; then + echo -n "" + else + echo -n "" + fi + if [ "$vendor_cooperation_page" != "" ]; then + echo "$vendor_cooperation_score" + elif [ "$vendor_cooperation_score" = "" ]; then + echo "—" + else + echo "$vendor_cooperation_score" + fi + echo "
" + +cat < +1 ROM chip package (PLCC, DIP32, DIP8, SOIC8).
+2 ROM chip protocol/type (parallel flash, LPC, FWH, SPI).
+3 ROM chip socketed (Y/N)?
+4 Board supported by [http://www.flashrom.org flashrom] (Y/N)?
+5 Vendor Cooperation Score.
+6 [http://www.flashrom.org flashrom] does not work when the vendor BIOS is booted, but it does work when the machine is booted with coreboot.
+7 Some boards have ROM sockets, others are soldered.
+ +EOF + + +echo "$detailed" diff --git a/util/docker/coreboot.org-status/kconfig2html b/util/docker/coreboot.org-status/kconfig2html new file mode 100755 index 0000000000..35386b14cb --- /dev/null +++ b/util/docker/coreboot.org-status/kconfig2html @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# +# kconfig2wiki - Kconfig to MediaWiki converter for +# https://www.coreboot.org/coreboot_Options +# +# Copyright (C) 2010 coresystems GmbH +# based on http://landley.net/kdocs/make/menuconfig2html.py +# Copyright (C) by Rob Landley +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +import glob + +helplen = 0 +extra_chapters = 0 + +## +## Remove quotes from Kconfig string options +## +def zapquotes(str): + if str[0]=='"': str = str[1:str.rfind('"')] + return str + +## +## Escape HTML special characters +## +def htmlescape(str): + return str.strip().replace("&","&").replace("<","<").replace(">",">") + +## +## Process Kconfig file +## +def readfile(filename): + import sys + global helplen + + source=filename.replace("src/","").replace("/Kconfig","").replace("Kconfig","toplevel") + + try: + lines = open(filename).read().split("\n") + except IOError: + sys.stderr.write("File %s missing\n" % filename) + return + config = None + description = None + configtype = None + for i in lines: + if helplen: + i = i.expandtabs() + if not len(i) or i[:helplen].isspace(): + sys.stdout.write("%s
\n" % htmlescape(i)) + continue + else: + helplen = 0 + sys.stdout.write("\n") + + words = i.strip().split(None,1) + if not len(words): continue + + if words[0] in ("config", "menuconfig"): + config = words[1] + description = "" + elif words[0] in ("bool", "boolean", "tristate", "string", "hex", "int"): + configtype = htmlescape(zapquotes(words[0])) + if len(words)>1: description = htmlescape(zapquotes(words[1])) + elif words[0]=="prompt": + description = htmlescape(zapquotes(words[1])) + elif words[0] in ("help", "---help---"): + sys.stdout.write("\n") + sys.stdout.write("%s%s%s%s\n" % (config,source,configtype,description) ) + helplen = len(i[:i.find(words[0])].expandtabs()) + elif words[0] == "comment": + sys.stdout.write("\n") + sys.stdout.write("%s(comment)%s\n" % (source, htmlescape(zapquotes(words[1])))) + elif words[0]=="menu": + if len(words)>1: + temp = htmlescape(zapquotes(words[1])) + sys.stdout.write("\n") + sys.stdout.write("Menu: %s\n" % temp) + elif words[0] == "endmenu": + sys.stdout.write("\n") + elif words[0] == "source": + fn=zapquotes(words[1]) + for name in glob.glob(fn): + readfile(name) + elif words[0] in ("default","depends", "select", "if", "endif", "#"): pass + #else: sys.stderr.write("unknown: %s\n" % i) + if helplen: sys.stdout.write("\n") + +def main(): + import sys, time + + if len(sys.argv)!=3: + sys.stderr.write("Usage: kconfig2wiki kconfigfile version\n") + sys.exit(1) + + sys.stdout.write("This is an automatically generated list of '''coreboot compile-time options'''.\n") + sys.stdout.write("\nLast update: %s\n" % sys.argv[2]) + sys.stdout.write("\n"); + sys.stdout.write("\n") + sys.stdout.write("\n") + sys.stdout.write("\n") + sys.stdout.write("\n") + sys.stdout.write("\n") + sys.stdout.write("\n") + readfile(sys.argv[1]) + sys.stdout.write("
OptionSourceFormatShort DescriptionDescription
\n") + +if __name__ == "__main__": + main() diff --git a/util/docker/coreboot.org-status/run.sh b/util/docker/coreboot.org-status/run.sh new file mode 100755 index 0000000000..08732e7372 --- /dev/null +++ b/util/docker/coreboot.org-status/run.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# This file is part of the coreboot project. +# +# Copyright (C) 2018 Google Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +set -e + +# This script is the entry point for this container and expects two git +# repositories in /data-in, board-status.git and coreboot.git (with the +# content of the repos of the same name found at https://review.coreboot.org/ +# and creates two files, board-status.html and kconfig-options.html in +# /data-out. + +cd /data-in/board-status.git +/opt/tools/status-to-html.sh > /tmp/board-status.html +mv /tmp/board-status.html /data-out/ + +cd /data-in/coreboot.git +/opt/tools/kconfig2html src/Kconfig $(git describe) > /tmp/kconfig-options.html +mv /tmp/kconfig-options.html /data-out/ diff --git a/util/optionlist/Makefile b/util/optionlist/Makefile deleted file mode 100644 index 05f720cedc..0000000000 --- a/util/optionlist/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright (C) 2010 coresystems GmbH -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# - -VERSION := $(shell git describe --dirty --always || git describe) - -all: - cd ../..; util/optionlist/kconfig2wiki src/Kconfig $(VERSION) > util/optionlist/Options.wiki - -clean: - rm -rf Options.wiki diff --git a/util/optionlist/README b/util/optionlist/README deleted file mode 100644 index da3efb33b2..0000000000 --- a/util/optionlist/README +++ /dev/null @@ -1 +0,0 @@ -This script creates the page https://www.coreboot.org/coreboot_Options diff --git a/util/optionlist/kconfig2html b/util/optionlist/kconfig2html deleted file mode 100755 index 35386b14cb..0000000000 --- a/util/optionlist/kconfig2html +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python -# -# kconfig2wiki - Kconfig to MediaWiki converter for -# https://www.coreboot.org/coreboot_Options -# -# Copyright (C) 2010 coresystems GmbH -# based on http://landley.net/kdocs/make/menuconfig2html.py -# Copyright (C) by Rob Landley -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# - -import glob - -helplen = 0 -extra_chapters = 0 - -## -## Remove quotes from Kconfig string options -## -def zapquotes(str): - if str[0]=='"': str = str[1:str.rfind('"')] - return str - -## -## Escape HTML special characters -## -def htmlescape(str): - return str.strip().replace("&","&").replace("<","<").replace(">",">") - -## -## Process Kconfig file -## -def readfile(filename): - import sys - global helplen - - source=filename.replace("src/","").replace("/Kconfig","").replace("Kconfig","toplevel") - - try: - lines = open(filename).read().split("\n") - except IOError: - sys.stderr.write("File %s missing\n" % filename) - return - config = None - description = None - configtype = None - for i in lines: - if helplen: - i = i.expandtabs() - if not len(i) or i[:helplen].isspace(): - sys.stdout.write("%s
\n" % htmlescape(i)) - continue - else: - helplen = 0 - sys.stdout.write("\n") - - words = i.strip().split(None,1) - if not len(words): continue - - if words[0] in ("config", "menuconfig"): - config = words[1] - description = "" - elif words[0] in ("bool", "boolean", "tristate", "string", "hex", "int"): - configtype = htmlescape(zapquotes(words[0])) - if len(words)>1: description = htmlescape(zapquotes(words[1])) - elif words[0]=="prompt": - description = htmlescape(zapquotes(words[1])) - elif words[0] in ("help", "---help---"): - sys.stdout.write("\n") - sys.stdout.write("%s%s%s%s\n" % (config,source,configtype,description) ) - helplen = len(i[:i.find(words[0])].expandtabs()) - elif words[0] == "comment": - sys.stdout.write("\n") - sys.stdout.write("%s(comment)%s\n" % (source, htmlescape(zapquotes(words[1])))) - elif words[0]=="menu": - if len(words)>1: - temp = htmlescape(zapquotes(words[1])) - sys.stdout.write("\n") - sys.stdout.write("Menu: %s\n" % temp) - elif words[0] == "endmenu": - sys.stdout.write("\n") - elif words[0] == "source": - fn=zapquotes(words[1]) - for name in glob.glob(fn): - readfile(name) - elif words[0] in ("default","depends", "select", "if", "endif", "#"): pass - #else: sys.stderr.write("unknown: %s\n" % i) - if helplen: sys.stdout.write("\n") - -def main(): - import sys, time - - if len(sys.argv)!=3: - sys.stderr.write("Usage: kconfig2wiki kconfigfile version\n") - sys.exit(1) - - sys.stdout.write("This is an automatically generated list of '''coreboot compile-time options'''.\n") - sys.stdout.write("\nLast update: %s\n" % sys.argv[2]) - sys.stdout.write("\n"); - sys.stdout.write("\n") - sys.stdout.write("\n") - sys.stdout.write("\n") - sys.stdout.write("\n") - sys.stdout.write("\n") - sys.stdout.write("\n") - readfile(sys.argv[1]) - sys.stdout.write("
OptionSourceFormatShort DescriptionDescription
\n") - -if __name__ == "__main__": - main() -- cgit v1.2.3