#!/bin/sh # # ELWIX build script for world # # (C) AITNET ltd - Sofia/Bulgaria # by Michael Pounov # # $Id: build_world.sh,v 1.7 2021/07/16 18:35:50 misho Exp $ # [ -r ./config/rc.elwix ] && . ./config/rc.elwix if [ X"${ELWIX_IS_CONFIGURED}" != X"YES" ]; then echo echo "ELWIX project is not configured !?!" echo exit 1 fi if [ ! -d $BSDSRC ]; then echo echo "ELWIX project is not configured - missing BSD sources !?!" echo exit 1 fi if [ ! -d $ADIR ]; then echo echo "ELWIX project is not configured - missing TargetArch directory !?!" echo exit 1 fi if [ "${USER}" != "root" ]; then echo echo "ELWIX project is not configured - BSD kernel must compile under root !?!" echo exit 1 fi # Set TARGET_CPUTYPE only for world compiling. Don't use this in kernel build! X_TARGET_CPUTYPE="TARGET_CPUTYPE=${TARGET_CPUTYPE}" clean_world() { echo "+++ Clean ELWIX World ... $WORLD" rm -rf $WORLD mkdir -p $WORLD rm -f ${CBUILD} ${CGBUILD} ${CENV} } build_toolchain() { echo "+++ Build ELWIX Toolchain ..." cd $BSDSRC env MAKEOBJDIRPREFIX=${BSDOBJ} make ${PARALLEL_BUILD} \ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} ${X_TARGET_CPUTYPE} \ SRCCONF=${SRCCONF} __MAKE_CONF=${MAKECONF} DESTDIR=${WORLD} toolchain if [ $? -eq 0 ]; then cd - else exit 1 fi } build_world() { echo "+++ Build ELWIX World ..." cd $BSDSRC if [ -z "$1" ]; then env MAKEOBJDIRPREFIX=${BSDOBJ} make ${PARALLEL_BUILD} \ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} ${X_TARGET_CPUTYPE} \ SRCCONF=${SRCCONF} __MAKE_CONF=${MAKECONF} buildworld else env MAKEOBJDIRPREFIX=${BSDOBJ} NO_CLEAN="YES" make ${PARALLEL_BUILD} \ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} ${X_TARGET_CPUTYPE} \ SRCCONF=${SRCCONF} __MAKE_CONF=${MAKECONF} buildworld fi if [ $? -eq 0 ]; then cd - else exit 1 fi } install_world() { echo "+++ Install ELWIX World ... $WORLD" cd $BSDSRC env MAKEOBJDIRPREFIX=${BSDOBJ} make \ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} ${X_TARGET_CPUTYPE} \ SRCCONF=${SRCCONF} __MAKE_CONF=${MAKECONF} DESTDIR=${WORLD} installworld cd - if [ $? -eq 0 ]; then echo "ELWIX Platform:${PLATFORM} Version:${VERSION} TargetArch:${TARGET_ARCH}" >${WORLD}/elwix.ver fi echo "+++ Completed ELWIX World ... $WORLD" } build_cross() { echo "+++ Build ELWIX Cross script ..." cd $BSDSRC cat >${CENV} <<_EOF #!/bin/sh # # Create auto cross build env script # export \\ _EOF env MAKEOBJDIRPREFIX=${BSDOBJ} make TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} ${X_TARGET_CPUTYPE} \ WORLDTMP=${WORLD} buildenvvars >> ${CENV} cat >>${CENV} <<_EOF PATH=$WORLD/elwix/pkg/bin:$WORLD/elwix/pkg/sbin:/elwix/pkg/bin:/elwix/pkg/sbin:$PKG/bin:$PKG/sbin:\$PATH:$PATH if [ -n "\${REPLACE_MAKEOBJDIRPREFIX}" ]; then MAKEOBJDIRPREFIX="\${REPLACE_MAKEOBJDIRPREFIX}" fi export CROSS_WORLD=$WORLD export CFLAGS="\$CFLAGS -I\${CROSS_WORLD}/usr/include" export LDFLAGS="\$LDFLAGS -L\${CROSS_WORLD}/lib -L\${CROSS_WORLD}/usr/lib" _EOF cd - cp ${CENV} ${CBUILD} cp ${CENV} ${CGBUILD} cp ${CENV} ${CEXEC} cat >>${CBUILD} <<_EOF make \$* _EOF echo "+++ Ready cross script ${CBUILD}" cat >>${CGBUILD} <<_EOF gmake \$* _EOF echo "+++ Ready cross script ${CGBUILD}" cat >>${CEXEC} <<_EOF eval \$* _EOF echo "+++ Ready cross script ${CEXEC}" chmod +x ${CBUILD} ${CGBUILD} ${CEXEC} ${CENV} echo "Done." } ### main() if [ -n "${1}" ]; then rm ${WORLD}/elwix.ver fi if ! SnitVer ${WORLD}/elwix.ver; then if [ -z "$1" ]; then clean_world fi # build_toolchain $1 build_world $1 install_world build_cross else echo "Skipped ELWIX World build ..." fi echo "+++ Complete build ELWIX World"