summaryrefslogtreecommitdiffstats
path: root/include/CMakeLists.txt
blob: 48db2e81e48ac50857fdd2ab61961bfac242e7ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
###########################################################################
# Copyright (C) 2015-2018 "IoT.bzh"
#
# author: José Bollo <jose.bollo@iot.bzh>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###########################################################################

INSTALL(DIRECTORY afb DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR})
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
#!/bin/bash
###########################################################################
# Copyright 2017-2018 IoT.bzh
#
# author: Sebastien Douheret <sebastien@iot.bzh>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###########################################################################

# script_name=$(basename ${0})
CURL="curl -f -s --connect-timeout 10"

### Define urls where SDKs can be downloaded / AGL part
SDK_AGL_BASEURL="https://download.automotivelinux.org/AGL/"
DOWNLOADABLE_AGL_URLS="
    snapshots/master/latest/*

    release/dab/4.0.3/*

    release/eel/5.1.0/*
    release/eel/latest/*

    release/flounder/6.0.0/*
    release/flounder/latest/*
"
#     release/dab/4.0.2/*
#
#     release/eel/5.0.0/*
#     release/eel/5.0.1/*
#     release/eel/5.0.2/*
#     release/eel/5.0.3/*
#     release/eel/5.1.0/*
#     release/eel/latest/
#
#     release/flounder/5.99.6/*

SDK_AGL_URL_SUFFIX="/deploy/sdk/"
IMG_AGL_URL_SUFFIX="/deploy/images/"
#######################################

### Define urls where SDKs can be downloaded / IoT.bzh part
SDK_IOTBZH_BASEURL="http://iot.bzh/download/public/XDS/images/"
DOWNLOADABLE_IOTBZH_URLS="
    dab-m3ulcb/*

    eel-intel-corei7-64/*
    eel-m3ulcb/*

    flounder-h3ulcb/*
    flounder-m3ulcb/*
    flounder-qemux86-64/*

    master-m3ulcb/*
"

SDK_IOTBZH_URL_SUFFIX="/sdk/"
IMG_IOTBZH_URL_SUFFIX="/images/"
#######################################


# Compute full urls list  (parse '*' characters)
function expand_url { # url, prefix, suffix
    local result=""
    url=$2$1
    if [[ "$url" = *"*"* ]]; then
        bUrl=$(echo $url | cut -d'*' -f 1)
        eUrl=$(echo $url | cut -d'*' -f 2)
        dirs=$(curl -s ${bUrl} | grep '\[DIR\]' | grep -oP  'href="[^"]*"' | cut -d'"' -f 2)
        for dir in $(echo $dirs); do
            result="$result ${bUrl::-1}/${dir::-1}${eUrl:1}"
        done
    else
        result="$url"
    fi

    echo $result
}

function dbg_error()  { >&2 echo "ERROR:" $@; }
function dbg_warning(){ [ $DEBUG -ge 1 ] && { >&2 echo "WARNING:" $@; } ; }
function dbg_info()   { [ $DEBUG -ge 1 ] && { >&2 echo "INFO:" $@; } ; }
function dbg_debug()   { [ $DEBUG -ge 2 ] && { >&2 echo "DEBUG:" $@; } ; }

function count() { echo $#; }

function first() { echo $1; }


function search_image_url {
    htmlPage=$(${CURL} ${1}/)
    if [[ $? == 0 ]]; then # curl request without error, at least URL is OK
        if [ "${2}" = "qemux86-64" ]; then
            image_name=$(echo $(first $(echo ${htmlPage} | egrep -o 'href="agl-demo-platform-crosssdk-[^"]*\.vmdk(\.xz)?"')) | sed -E 's/.*href="([^"]*)".*/\1/')
        else
            image_name=$(echo $(first $(echo ${htmlPage} | egrep -o 'href="agl-demo-platform-crosssdk-[^"]*\.rootfs\.wic(\.xz)?"')) | sed -E 's/.*href="([^"]*)".*/\1/')
            # search for tar.xz if no wic found...
            if [ $(count $image_name) -eq 0 ]; then
                image_name=$(echo $(first $(echo ${htmlPage} | egrep -o 'href="agl-demo-platform-crosssdk-[^"]*\.tar\.xz"')) | sed -E 's/.*href="([^"]*)".*/\1/')
            fi
        fi
    else
        dbg_warning "could not list content of ${1}, HTTP request failed."
        image_name="null"
    fi

    # return string result
    if [[ ${image_name} = "null" ]]; then
        echo "null" # to be inserted as-is in the JSON output
    else
        echo "\"${1}/${image_name}\"" # if no image file found, but URL is valid, lets point to the directory
    fi
}

# Given an URL, generate the corresponding JSON chunk
function generate_json {
    url=$1
    SDK_URL=$1$2
    IMG_URL=$1$3

    arch=""

    htmlPage=$(${CURL} "${SDK_URL}")
    files=$(echo ${htmlPage} | egrep -o 'href="[^"]*crosssdk[^"]*\.sh"' | cut -d '"' -f 2)
    if [ "$?" != "0" ] || [ "${files}" = "" ]; then
        dbg_warning " IGNORED ${url}: no valid files found"
        return
    fi

    # assume that sdk name follow this format :
    #  _PROFILE_-_COMPILER_ARCH_-_TARGET_-crosssdk-_ARCH_-toolchain-_VERSION_.sh
    # for example:
    #  poky-agl-glibc-x86_64-agl-demo-platform-crosssdk-corei7-64-toolchain-4.0.1.sh
    if [ $(count files) -gt 1 ]
    then
        dbg_warning " IGNORE ${url}: multiple shell script containing 'crosssdk' in their names"
        return
    fi
    sdkFile=${files}
    dbg_info "Processing SDK: ${sdkFile} (from ${url})"
    profile=$(echo "${sdkFile}" | sed -r 's/(.*)-glibc.*/\1/')
    version=$(echo "${sdkFile}" | sed -r 's/.*toolchain-(.*).sh/\1/')
    arch=$(echo "${sdkFile}" | sed -r 's/.*crosssdk-(.*)-toolchain.*/\1/')

    endUrl=${url#$SDK_AGL_BASEURL}
    if [ "${url::14}" = "http://iot.bzh" ]; then
        endUrl=${url#$SDK_IOTBZH_BASEURL}
        name=$(echo "IoTbzh-$(echo ${endUrl} | sed s:/:-:g)-${version}")
        board=""
    elif [ "${endUrl::4}" = "http" ]; then
        name="${profile}_${arch}_${version}"
        board=""
    else
        name=$(echo "AGL-$(echo ${endUrl} | cut -d'/' -f1,2,3,4)" | sed s:/:-:g)
        board=$(echo ${endUrl} | cut -d'/' -f4)
        board=${board%-nogfx}
    fi

    # Distringuish qemux86-64 and corei7-64
    if [[ "$name" == *"qemux86-64"* && "$arch" == "corei7-64" ]]; then
        arch="qemux86-64"
    fi

    [ "${profile}" = "" ] && { dbg_error "profile is not set" ; return ; }
    [ "${version}" = "" ] && { dbg_error "version is not set" ; return ; }
    [ "${arch}" = "" ] && { dbg_error "arch is not set" ; return ; }
    [ "${name}" = "" ] && { name=${profile}_${arch}_${version}; }

    sdkDate="$(echo "${htmlPage}" |egrep -o ${sdkFile/+/\\+}'</a>.*[0-9\-]+ [0-9]+:[0-9]+' |cut -d'>' -f 4|cut -d' ' -f1,2)"
    sdkSize="$(echo "${htmlPage}" |egrep -o  "${sdkFile/+/\\+}.*${sdkDate}.*[0-9\.MG]+</td>" |cut -d'>' -f7 |cut -d'<' -f1)"
    md5sum="$(wget -q -O - ${SDK_URL}/${sdkFile/.sh/.md5} |cut -d' ' -f1)"

    image_url=$(search_image_url ${IMG_URL}${board} ${arch})


    read -r -d '' res <<- EndOfMessage
{
    "name":         "${name}",
    "description":  "AGL SDK ${arch} (version ${version})",
    "profile":      "${profile}",
    "version":      "${version}",
    "arch":         "${arch}",
    "path":         "",
    "url":          "${SDK_URL}${sdkFile}",
    "image_url":    ${image_url},
    "status":       "Not Installed",
    "date":         "${sdkDate}",
    "size":         "${sdkSize}",
    "md5sum":       "${md5sum}",
    "setupFile":    ""
},
EndOfMessage

    sdksList="${sdksList}${res}"
}

DEBUG=0
if [[ ${1:0:2} = "-v" ]] ; then
    verbose=$(echo -s ${1} | sed -E "s/-([v]+).*/\1/")
    DEBUG=$(echo ${verbose} | wc -c)
    echo "Set verbosity level to : ${DEBUG}"
    shift
fi

# Compute list of available/installable SDKs
sdksList=" "
for base_url in $DOWNLOADABLE_AGL_URLS
do
    dbg_debug "Look into ${base_url}"
    urls="$(expand_url $base_url $SDK_AGL_BASEURL)"
    for url in $urls
    do
        dbg_debug "URL to check: ${url}"
        generate_json $url $SDK_AGL_URL_SUFFIX $IMG_AGL_URL_SUFFIX
    done
done

for base_url in $DOWNLOADABLE_IOTBZH_URLS
do
    dbg_debug "Look into ${base_url}"
    urls="$(expand_url $base_url $SDK_IOTBZH_BASEURL)"
    for url in $urls
    do
        dbg_debug "URL to check: ${url}"
        generate_json $url $SDK_IOTBZH_URL_SUFFIX $IMG_IOTBZH_URL_SUFFIX
    done
done


OUT_FILE=$(dirname "$0")/sdks_$(date +"%F_%H%M").json

echo "[" > ${OUT_FILE}
echo "${sdksList::-1}" >> ${OUT_FILE}
echo "]" >> ${OUT_FILE}

echo "SDKs list successfully saved in ${OUT_FILE}"