Skip to content
Snippets Groups Projects
release_compile.sh 8.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Broadband Forum IEEE 1905.1/1a stack
    # 
    # Copyright (c) 2017, Broadband Forum
    # 
    
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions are
    # met:
    
    # 1. Redistributions of source code must retain the above copyright
    #    notice, this list of conditions and the following disclaimer.
    
    # 2. Redistributions in binary form must reproduce the above copyright
    #    notice, this list of conditions and the following disclaimer in the
    #    documentation and/or other materials provided with the distribution.
    # 
    # Subject to the terms and conditions of this license, each copyright
    # holder and contributor hereby grants to those receiving rights under
    # this license a perpetual, worldwide, non-exclusive, no-charge,
    # royalty-free, irrevocable (except for failure to satisfy the
    # conditions of this license) patent license to make, have made, use,
    # offer to sell, sell, import, and otherwise transfer this software,
    # where such license applies only to those patent claims, already
    # acquired or hereafter acquired, licensable by such copyright holder or
    # contributor that are necessarily infringed by:
    # 
    # (a) their Contribution(s) (the licensed copyrights of copyright holders
    #     and non-copyrightable additions of contributors, in source or binary
    #     form) alone; or
    # 
    # (b) combination of their Contribution(s) with the work of authorship to
    #     which such Contribution(s) was added by such copyright holder or
    #     contributor, if, at the time the Contribution is added, such addition
    #     causes such combination to be necessarily infringed. The patent
    #     license shall not apply to any other combinations which include the
    #     Contribution.
    # 
    # Except as expressly stated above, no rights or licenses from any
    # copyright holder or contributor is granted under this license, whether
    # expressly, by implication, estoppel or otherwise.
    # 
    # DISCLAIMER
    # 
    # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
    # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    # HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
    # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
    # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
    # DAMAGE.
    
    
    # This is a simple "packaging" utility that executes Make and installs the
    # output binaries in a "deployment" folder.
    #
    # Fell free to customize this to your own development/testing environment
    #
    # Usage:
    #
    #   ./release_compile.sh <type>
    #
    # ...where <type> can take any of the following values:
    #
    #  - "cvs"
    #      The tools will be built and installed in "$RELEASE_FOLDER/<version_tag>",
    #      but only if that folder did not already existed (otherwise, it won't do
    #      anything)
    #
    #  - "VersionXXX" (ex: "VersionA7", "VersionB13", ...)
    #      The tools will be built and installed in
    #      "$RELEASE_FOLDER/VersionXXX/<version_tag>", wiping a previous folder with
    #      the same name in case it existed.
    #
    # In both cases, "<version_tag>" is the value contained in the first line of
    # file "version.txt" and it must have the following format:
    #
    #   lowercase "i" + monotonically increasing number
    #
    # Examples: i145, i146, i147, ....
    #
    # The last line of output produced by this script will always contain two words:
    #   1. The HASH of the current git commit
    #   2. The path to the folder where the release has been installed.
    #
    
    set -e
    
    RELEASE_FOLDER="/external_dir/fs-rd-server/releases/Ieee1905Tools";
    
    CURRENT_GIT_COMMIT=`git show | head -1 | cut -d" " -f2`
    
    function help_and_quit
    {
        echo "You must provide one (and only one) argument, wich must be either ";
        echo "the string 'cvs' or a string starting with 'Version' (examples: ";
        echo "'VersionA7', 'VersionB13', ...)"
        echo ""
        echo "$CURRENT_GIT_COMMIT <ERROR>"
        exit -1;
    }
    
    
    # Check validity of input arguments
    #####################################################
    
    echo ""
    
    if [[ $# -ne 1 ]]; then
        help_and_quit;
    fi
    
    if [[ "$1" != "cvs" ]] && [[ "$1" != "CVS" ]] && ! [[ "$1" =~ "Version" ]]; then
        help_and_quit;
    fi
    
    version_tag=`cat version.txt | head -1`
    
    if ! [[ "$version_tag" =~ ^i[0-9+]+$ ]]; then
        echo "Invalid version tag in file 'version.txt'";
        echo "Open that file and make sure the first line contains a valid ";
        echo "version tag, which looks like this: o+[number] (ex: 'o106')";
        echo ""
        echo "$CURRENT_GIT_COMMIT <ERROR>"
        exit -1;
    fi
    
    
    # Check if the requested version is already installed
    #####################################################
    
    echo "*************************************************************************"
    echo "Setup..."
    echo "*************************************************************************"
    
    if [[ "$1" == "cvs" ]] || [[ "$1" == "CVS" ]]; then
    
        INSTALL_FOLDER=$RELEASE_FOLDER/$version_tag;
    
        if [[ -d $INSTALL_FOLDER ]]; then
            echo "The CVS version you are trying to generate is already installed "
            echo "in the 'releases' folder ($INSTALL_FOLDER)"
            echo "If you *really* want to regenerate it, first *manually* delete "
            echo "that folder and then re-execute this script"
            echo "Exiting..."
            echo ""
            echo "$CURRENT_GIT_COMMIT $INSTALL_FOLDER" 
            exit 0;
        fi
    
    else
    
        INSTALL_FOLDER=$RELEASE_FOLDER/$1/$version_tag
    
        if [[ -d $INSTALL_FOLDER ]]; then
            echo "The destination folder where tools are going to be installed "
            echo "already existed ($INSTALL_FOLDER)"
            echo "We are going to wipe it out."
            echo ""
            
            rm -rf $INSTALL_FOLDER
    
        fi
    
        INSTALL_FOLDER_PARENT=$RELEASE_FOLDER/$1
    
        if ! [[ -d $INSTALL_FOLDER_PARENT ]]; then
            echo "Creating folder $INSTALL_FOLDER_PARENT ..."
            mkdir $INSTALL_FOLDER_PARENT;
        fi
    fi
    
    echo "Destination folder is: $INSTALL_FOLDER"
    
    
    # Build Linux (X86 generic) tools
    #####################################################
    
    echo ""
    echo "*************************************************************************"
    echo "Building Linux (X86 generic) tools..."
    echo "*************************************************************************"
    
    PLATFORM=linux FLAVOUR=x86_generic make clean all
    rm -rf linux_x86_generic
    mkdir  linux_x86_generic
    cp output/al_entity  linux_x86_generic
    cp output/hle_entity linux_x86_generic
    
    
    # Build Linux (ARM wrt1900acx) tools
    #####################################################
    
    echo ""
    echo "*************************************************************************"
    echo "Building Linux (ARM wrt1900acx) tools..."
    echo "*************************************************************************"
    
    PLATFORM=linux FLAVOUR=arm_wrt1900acx make clean all
    rm -rf linux_arm_wrt1900acx
    mkdir  linux_arm_wrt1900acx
    cp output/al_entity  linux_arm_wrt1900acx
    cp output/hle_entity linux_arm_wrt1900acx
    
    
    # Build Linux (X86 Windows mingw cross-compilation) tools
    #########################################################
    
    echo ""
    echo "*************************************************************************"
    echo "Building Linux (X86 Windows mingw cross-compilation) tools..."
    echo "*************************************************************************"
    
    PLATFORM=linux FLAVOUR=x86_windows_mingw make clean all
    rm -rf linux_x86_windows_mingw
    mkdir  linux_x86_windows_mingw
    cp output/hle_entity linux_x86_windows_mingw/hle_entity.exe
    
    
    # Install 
    #####################################################
    
    echo ""
    echo "*************************************************************************"
    echo "Installing ..."
    echo "*************************************************************************"
    
    mkdir -p $INSTALL_FOLDER
    
    echo "X86 generic binaries   --> $INSTALL_FOLDER/linux_x86_generic/*"
    mv linux_x86_generic $INSTALL_FOLDER
    
    echo "ARM wrt1900acx binaries --> $INSTALL_FOLDER/linux_arm_wrt1900acx/*"
    mv linux_arm_wrt1900acx $INSTALL_FOLDER
    
    echo "X86 windows mingw binaries --> $INSTALL_FOLDER/linux_x86_windows_mingw/*"
    mv linux_x86_windows_mingw $INSTALL_FOLDER
    
    make clean &>/dev/null
    git archive --format=tar.gz --prefix=ieee1905/ HEAD > ieee1905_src.tgz
    echo "Source code            --> $INSTALL_FOLDER/ieee1905_src.tgz"
    mv ieee1905_src.tgz $INSTALL_FOLDER/
    
    echo ""
    echo $CURRENT_GIT_COMMIT $INSTALL_FOLDER