diff options
Diffstat (limited to 'nuttx/tools/mkexport.sh')
-rwxr-xr-x | nuttx/tools/mkexport.sh | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/nuttx/tools/mkexport.sh b/nuttx/tools/mkexport.sh deleted file mode 100755 index 7ddeae699..000000000 --- a/nuttx/tools/mkexport.sh +++ /dev/null @@ -1,327 +0,0 @@ -#!/bin/bash -# tools/mkexport.sh -# -# Copyright (C) 2011-2012 Gregory Nutt. All rights reserved. -# Author: Gregory Nutt <gnutt@nuttx.org> -# -# 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. -# 3. Neither the name NuttX nor the names of its contributors may be -# used to endorse or promote products derived from this software -# without specific prior written permission. -# -# 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 OWNER 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. -# - -# TODO: -# 1. This script assumes the host archiver ar may not be appropriate for -# non-GCC toolchains -# 2. For the kernel build, the user libriars should be built into some -# libuser.a. The list of user libraries would have to accepted with -# some new argument, perhaps -u. - -# Get the input parameter list - -USAGE="USAGE: $0 [-d] [-z] [-w|wy|wn] -t <top-dir> [-x <lib-ext>] -l \"lib1 [lib2 [lib3 ...]]\"" -unset TOPDIR -unset LIBLIST -unset TGZ -WINTOOL=n -LIBEXT=.a - -while [ ! -z "$1" ]; do - case $1 in - -d ) - set -x - ;; - -l ) - shift - LIBLIST=$1 - ;; - -wy ) - WINTOOL=y - ;; - -w | -wn ) - WINTOOL=n - ;; - -t ) - shift - TOPDIR=$1 - ;; - -x ) - shift - LIBEXT=$1 - ;; - -z ) - TGZ=y - ;; - -h ) - echo $USAGE - exit 0 - ;; - * ) - echo "Unrecognized argument: $1" - echo $USAGE - exit 1 - ;; - esac - shift -done - -# Check arguments - -if [ -z "${TOPDIR}" -o -z "${LIBLIST}" ]; then - echo "MK: Missing required arguments" - echo $USAGE - exit 1 -fi - -if [ ! -d "${TOPDIR}" ]; then - echo "MK: Directory ${TOPDIR} does not exist" - exit 1 -fi - -# Get the version string - -if [ ! -f "${TOPDIR}/.version" ]; then - echo "MK: File ${TOPDIR}/.version does not exist" - exit 1 -fi - -source "${TOPDIR}/.version" -if [ ! -z "${CONFIG_VERSION_STRING}" -a "${CONFIG_VERSION_STRING}" != "0.0" ]; then - VERSION="-${CONFIG_VERSION_STRING}" -fi - -# Create the export directory - -EXPORTSUBDIR="nuttx-export${VERSION}" -EXPORTDIR="${TOPDIR}/${EXPORTSUBDIR}" - -# If the export directory already exists, then remove it and create a new one - -if [ -d "${EXPORTDIR}" ]; then - echo "MK: Removing old export directory" - rm -rf "${EXPORTDIR}" -fi - -# Remove any possible previous results - -rm -f "${EXPORTDIR}.tar" -rm -f "${EXPORTDIR}.zip" -rm -f "${EXPORTDIR}.tar.gz" - -# Create the export directory and some of its subdirectories - -mkdir "${EXPORTDIR}" || { echo "MK: 'mkdir ${EXPORTDIR}' failed"; exit 1; } -mkdir "${EXPORTDIR}/startup" || { echo "MK: 'mkdir ${EXPORTDIR}/startup' failed"; exit 1; } -mkdir "${EXPORTDIR}/libs" || { echo "MK: 'mkdir ${EXPORTDIR}/libs' failed"; exit 1; } -mkdir "${EXPORTDIR}/build" || { echo "MK: 'mkdir ${EXPORTDIR}/build' failed"; exit 1; } -mkdir "${EXPORTDIR}/arch" || { echo "MK: 'mkdir ${EXPORTDIR}/arch' failed"; exit 1; } - -# Verify that we have a Make.defs file. - -if [ ! -f "${TOPDIR}/Make.defs" ]; then - echo "MK: Directory ${TOPDIR}/Make.defs does not exist" - exit 1 -fi - -# Copy the Make.defs files, but disable windows path conversions - -grep -v "WINTOOL[ \t]*=[ \t]y" "${TOPDIR}/Make.defs" > "${EXPORTDIR}/Make.defs" - -# Extract information from the Make.defs file. A Makefile can do this best - -make -C "${TOPDIR}/tools" -f Makefile.export TOPDIR="${TOPDIR}" EXPORTDIR="${EXPORTDIR}" -source "${EXPORTDIR}/makeinfo.sh" -rm -f "${EXPORTDIR}/makeinfo.sh" -rm -f "${EXPORTDIR}/Make.defs" - -# Verify the build info that we got from makeinfo.sh - -if [ ! -d "${ARCHDIR}" ]; then - echo "MK: Directory ${ARCHDIR} does not exist" - exit 1 -fi - -# Is there a linker script in this configuration? - -if [ ! -z "${LDPATH}" ]; then - - # Apparently so. Verify that the script exists - - if [ ! -f "${LDPATH}" ]; then - echo "MK: File ${LDPATH} does not exist" - exit 1 - fi - - # Copy the linker script - - cp -p "${LDPATH}" "${EXPORTDIR}/build/." || \ - { echo "MK: cp ${LDPATH} failed"; exit 1; } -fi - -# Save the compilation options - -echo "ARCHCFLAGS = ${ARCHCFLAGS}" >"${EXPORTDIR}/build/Make.defs" -echo "ARCHCXXFLAGS = ${ARCHCXXFLAGS}" >>"${EXPORTDIR}/build/Make.defs" - -# Copy the NuttX include directory (retaining attributes and following symbolic links) - -cp -LR -p "${TOPDIR}/include" "${EXPORTDIR}/." || \ - { echo "MK: 'cp ${TOPDIR}/include' failed"; exit 1; } -find "${EXPORTDIR}/include" -name .svn | xargs rm -rf - -# Copy the startup object file(s) - -make -C ${ARCHDIR} export_head TOPDIR=${TOPDIR} EXPORT_DIR="${EXPORTDIR}" - -# Copy architecture-specific header files into the arch export sub-directory. -# This is tricky because each architecture does things in a little different -# way. -# -# First copy any header files in the architecture src/ sub-directory (some -# architectures keep all of the header files there, some a few, and others -# none - -cp -f "${ARCHDIR}"/*.h "${EXPORTDIR}"/arch/. 2>/dev/null - -# Then look a list of possible places where other architecture-specific -# header files might be found. If those places exist (as directories or -# as symbolic links to directories, then copy the header files from -# those directories into the EXPORTDIR - -ARCH_HDRDIRS="arm armv7-m avr avr32 board common chip mips32" -for hdir in $ARCH_HDRDIRS; do - - # Does the directory (or symbolic link) exist? - - if [ -d "${ARCHDIR}/${hdir}" -o -h "${ARCHDIR}/${hdir}" ]; then - - # Yes.. create a export sub-directory of the same name - - mkdir "${EXPORTDIR}/arch/${hdir}" || \ - { echo "MK: 'mkdir ${EXPORTDIR}/arch/${hdir}' failed"; exit 1; } - - # Then copy the header files (only) into the new directory - - cp -f "${ARCHDIR}"/${hdir}/*.h "${EXPORTDIR}"/arch/${hdir}/. 2>/dev/null - - # One architecture has low directory called "chip" that holds the - # header files - - if [ -d "${ARCHDIR}/${hdir}/chip" ]; then - - # Yes.. create a export sub-directory of the same name - - mkdir "${EXPORTDIR}/arch/${hdir}/chip" || \ - { echo "MK: 'mkdir ${EXPORTDIR}/arch/${hdir}/chip' failed"; exit 1; } - - # Then copy the header files (only) into the new directory - - cp -f "${ARCHDIR}"/${hdir}/chip/*.h "${EXPORTDIR}"/arch/${hdir}/chip/. 2>/dev/null - fi - fi -done - -# Copy OS internal header files as well. They are used by some architecture- -# specific header files. - -mkdir "${EXPORTDIR}/arch/os" || \ - { echo "MK: 'mkdir ${EXPORTDIR}/arch/${hdir}/chip' failed"; exit 1; } -cp -f "${TOPDIR}"/sched/*.h "${EXPORTDIR}"/arch/os/. 2>/dev/null - -# Add the board library to the list of libraries - -if [ -f "${ARCHDIR}/board/libboard${LIBEXT}" ]; then - LIBLIST="${LIBLIST} ${ARCHSUBDIR}/board/libboard${LIBEXT}" -fi - -# Then process each library - -AR=${CROSSDEV}ar -for lib in ${LIBLIST}; do - if [ ! -f "${TOPDIR}/${lib}" ]; then - echo "MK: Library ${TOPDIR}/${lib} does not exist" - exit 1 - fi - - # Get some shorter names for the library - - libname=`basename ${lib} ${LIBEXT}` - shortname=`echo ${libname} | sed -e "s/^lib//g"` - - # Copy the application library unmodified - - if [ "X${libname}" = "Xlibapps" ]; then - cp -p "${TOPDIR}/${lib}" "${EXPORTDIR}/libs/." || \ - { echo "MK: cp ${TOPDIR}/${lib} failed"; exit 1; } - else - - # Create a temporary directory and extract all of the objects there - # Hmmm.. this probably won't work if the archiver is not 'ar' - - mkdir "${EXPORTDIR}/tmp" || \ - { echo "MK: 'mkdir ${EXPORTDIR}/tmp' failed"; exit 1; } - cd "${EXPORTDIR}/tmp" || \ - { echo "MK: 'cd ${EXPORTDIR}/tmp' failed"; exit 1; } - if [ "X${WINTOOL}" = "Xy" ]; then - WLIB=`cygpath -w "${TOPDIR}/${lib}"` - ${AR} x "${WLIB}" - else - ${AR} x "${TOPDIR}/${lib}" - fi - - # Rename each object file (to avoid collision when they are combined) - # and add the file to libnuttx - - for file in `ls`; do - mv "${file}" "${shortname}-${file}" - if [ "X${WINTOOL}" = "Xy" ]; then - WLIB=`cygpath -w "${EXPORTDIR}/libs/libnuttx${LIBEXT}"` - ${AR} rcs "${WLIB}" "${shortname}-${file}" - else - ${AR} rcs "${EXPORTDIR}/libs/libnuttx${LIBEXT}" "${shortname}-${file}" - fi - done - - cd "${TOPDIR}" || \ - { echo "MK: 'cd ${TOPDIR}' failed"; exit 1; } - rm -rf "${EXPORTDIR}/tmp" - fi -done - -# Now tar up the whole export directory - -cd "${TOPDIR}" || \ - { echo "MK: 'cd ${TOPDIR}' failed"; exit 1; } - -if [ "X${TGZ}" = "Xy" ]; then - tar cvf "${EXPORTSUBDIR}.tar" "${EXPORTSUBDIR}" 1>/dev/null 2>&1 - gzip -f "${EXPORTSUBDIR}.tar" -else - zip -r "${EXPORTSUBDIR}.zip" "${EXPORTSUBDIR}" 1>/dev/null 2>&1 -fi - -# Clean up after ourselves - -rm -rf "${EXPORTSUBDIR}" |