2013-07-13 17:19:22 +01:00
#! /bin/bash
2013-08-19 14:31:11 +01:00
###########################################################################
# GLUED: GNU/Linux Uniform Environment Distribution #
2019-02-11 10:50:52 +00:00
# Copyright (C) 2007-2019 Universidade do Porto - Faculdade de Engenharia #
2013-08-19 14:31:11 +01:00
# Laboratório de Sistemas e Tecnologia Subaquática (LSTS) #
###########################################################################
# 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; either version 2 of the License, or (at #
# your option) any later version. #
# #
# 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. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program; if not, write to the Free Software #
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #
# 02110-1301 USA. #
###########################################################################
2014-02-02 04:04:03 +00:00
# Author: Ricardo Martins #
###########################################################################
2013-07-13 17:19:22 +01:00
# Config: GLUED version.
2017-11-27 16:16:51 +00:00
cfg_glued_version = '2017.11'
2013-07-13 17:19:22 +01:00
# Config: GLUED vendor.
cfg_glued_vendor = 'lsts'
# Check shell type.
if [ -z " $BASH_VERSION " ] ; then
echo "ERROR: you must use bash to run this script."
exit 1
fi
# Validate command line parameters.
if [ $# -ne 1 ] ; then
echo " Usage: $0 <system> "
exit 1
fi
# Check if user requested system list.
if [ " $1 " = "list" ] ; then
for family in $( ls -1 systems | sort) ; do
echo -e " \n + Family $family "
find " systems/ $family " -name '*.cfg' | egrep -v "devlinks|linux-[0-9.]*.cfg" | while read s; do
echo " - $( basename " $s " .cfg) "
done | sort
done
echo ""
exit 1
fi
# Check number of CPU cores.
if [ -f /proc/cpuinfo ] ; then
cfg_host_cores = " $( grep "processor[^:]:" /proc/cpuinfo | wc -l) "
fi
if [ -z " $cfg_host_cores " ] ; then
cfg_host_cores = 1
fi
# Find system configuration files.
if [ -f "systems/" *" / $1 .cfg " ] ; then
system_cfg = " $( echo "systems/" *" / $1 .cfg " ) "
family_cfg = " $( dirname $system_cfg ) /config "
if ! [ -f " $family_cfg " ] ; then
echo " ERROR: no base configuration available for system ' $1 ' "
exit 1
fi
family_dir = " $( dirname $family_cfg ) "
family_name = " $( basename $family_dir ) "
source " $family_cfg "
if ! [ -f " $system_cfg " ] ; then
echo " ERROR: no configuration available for system ' $1 ' "
exit 1
fi
source " $system_cfg "
fi
# Read architecture configuration.
if ! [ -f " architectures/ $cfg_architecture .cfg " ] ; then
echo " ERROR: configuration for ' $1 ' architecture does not exist "
exit 1
fi
source " architectures/ $cfg_architecture .cfg "
2014-01-07 18:25:29 +00:00
# Create a MAC address based on the IP address if cfg_eth_ext_soft_mac
# is set.
if [ -n " $cfg_eth_ext_ip " ] && [ -n " $cfg_eth_ext_soft_mac " ] ; then
ips = ( ` echo $cfg_eth_ext_ip | sed -e 's/\./\n/g' ` )
for i in " ${ ips [@] } "
do
hip = ( " ${ hip [@] } " ` printf '%x' $i ` )
done
cfg_eth_ext_mac = " 80:c1: ${ hip [0] } : ${ hip [1] } : ${ hip [2] } : ${ hip [3] } "
2013-07-13 17:19:22 +01:00
fi
# Config: system name.
if [ -z $cfg_sys_name ] ; then
cfg_sys_name = " $1 "
fi
# Config: system family.
cfg_sys_family = " $family_name "
# Config: GLUED source tree base path.
cfg_dir_base = " $PWD "
# Config: system configuration folder.
cfg_dir_system = " $cfg_dir_base / $family_dir "
# Config: package rules folder.
2014-02-02 09:53:29 +00:00
cfg_dir_rules = " $cfg_dir_base /rules "
2013-07-13 17:19:22 +01:00
# Config: configuration rules folder.
cfg_dir_postconfiguration = " $cfg_dir_base /postconfiguration "
# Config: package sources folder.
cfg_dir_downloads = " $cfg_dir_base /downloads "
# Config: build folder.
cfg_dir_builds = " $cfg_dir_base / $cfg_sys_family /builds "
# Config: toolchain destination folder.
cfg_dir_toolchain = " $cfg_dir_base / $cfg_sys_family /toolchain "
# Config: root filesystem folder.
cfg_dir_rootfs = " $cfg_dir_base / $cfg_sys_family /rootfs "
# Config: system root folder.
cfg_dir_toolchain_sysroot = " $cfg_dir_toolchain / $cfg_target_canonical /sysroot "
# Target prefix:
cmd_target_prefix = " $cfg_dir_toolchain /bin/ $cfg_target_canonical - "
# Config: target C compiler executable.
cmd_target_cc = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -gcc "
# Config: target C pre-processor executable.
cmd_target_cpp = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -cpp "
# Config: target C++ compiler executable.
cmd_target_cxx = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -g++ "
# Config: target archiver executable.
cmd_target_ar = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -ar "
# Config: target linker executable.
cmd_target_ld = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -ld "
# Config: target strip executable.
cmd_target_strip = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -strip "
# Config: target archive indexer executable.
cmd_target_ranlib = " $cfg_dir_toolchain /bin/ $cfg_target_canonical -ranlib "
# Config: host compiler executable.
cmd_host_cc = "gcc"
# Command: strip command.
cmd_target_strip = " $cmd_target_strip --strip-unneeded "
# Command: command to create folders.
cmd_mkdir = "mkdir -pv"
# Command: copy data.
cmd_cp = "cp -avr"
# Command: allow execution.
cmd_chmod755 = "chmod 755"
# Config: host canonical name.
cfg_host_canonical = " $( $cmd_host_cc -dumpmachine 2> /dev/null) "
# Command: make command with one process.
cmd_make_single = "make -j1"
# Command: make command.
cmd_make = " make -j $cfg_host_cores "
# Config: rootfs tar file.
if [ -z $cfg_rootfs_tar ] ; then
cfg_rootfs_tar = " $cfg_dir_base / $cfg_sys_family /glued- $cfg_glued_version - $cfg_sys_name -rootfs.tar.bz2 "
fi
# Config: toolchain tar file.
if [ -z $cfg_toolchain_tar ] ; then
cfg_toolchain_tar = " $cfg_dir_base / $cfg_sys_family /glued- $cfg_glued_version - $cfg_sys_family -toolchain- $cfg_host_canonical - $cfg_target_canonical .tar.bz2 "
fi
2015-12-28 10:51:57 +00:00
# Config: Git revision.
git_branch = $( echo $( git rev-parse --symbolic-full-name --abbrev-ref HEAD 2> /dev/null) )
git_revision = $( echo $( git rev-parse --short HEAD 2> /dev/null) )
git_status = $( echo $( git status -s 2> /dev/null) )
if [ -z " $git_branch " ] || [ -z " $git_revision " ] ; then
cfg_glued_git_version = 'unknown'
else
cfg_glued_git_version = " $git_branch - $git_revision "
if [ -n " $git_status " ] ; then
cfg_glued_git_version = " $cfg_glued_git_version -dirty "
fi
fi
2013-07-13 17:19:22 +01:00
if ! [ -d " $cfg_sys_family " ] ; then
mkdir -p " $cfg_sys_family "
fi &&
# Save configuration values to file.
set \
| egrep '^cfg_|^cmd_' \
| awk '{print "export " $0}' \
> " $cfg_sys_family / $1 .bash "
echo " Configuration file written to ' $cfg_sys_family / $1 .bash' "