Subversion Repositories tendra.SVN

Rev

Rev 105 | Blame | Compare with Previous | Last modification | View Log | RSS feed


# BUILD OPTIONS
#
# These flags control which components of the release should be installed.
#
# If BUILD_UPDATE is true then the public executables and their configuration
# files will be installed (this has to be done on every target platform).
#
# If BUILD_MACHINE is true then all the other target dependent components
# will be installed (this also has to be done on every target platform).
#
# If BUILD_COMMON is true then the target independent components will be
# installed (this only has to be done once, indeed if the release is being
# built simultaneously on several platforms then the builds can conflict
# with each other, so start the quickest machine off first to install
# the complete release, and get the other machines to only install the
# target dependent sections).
#
# BUILD_OK is set to false if an error occurs.

BUILD_UPDATE=   true
BUILD_MACHINE=  true
BUILD_COMMON=   true
BUILD_OK=       true

include defs.mk

all:
        $(MAKE) stage0
        $(MAKE) stage1
        $(MAKE) stage2

INSTALL0_DIR=$(BASE_DIR)/install0
stage0:
        @echo "==> Starting TenDRA bootstrap build..."
        $(MAKE) install-utilities STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) tools STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-tools STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-producers STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-installer STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-startup STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-env STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-apis STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) build-apilibs STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        $(MAKE) install-syslibs STAGE=0 INSTALL_DIR=$(INSTALL0_DIR)
        @echo "==> TenDRA bootstrap build done."

INSTALL1_DIR=$(BASE_DIR)/install1
TCC0='$(INSTALL0_DIR)/machines/$(OSFAM)/$(BLDARCH)/bin/tcc -yTENDRA_BASEDIR=$(INSTALL0_DIR)  -Y$(INSTALL0_DIR)/machines/$(OSFAM)/$(BLDARCH)/env/default -Yposix2 -DFS_POSIX' 
stage1:
        @echo "==> Starting TenDRA bootstrap build..."
        $(MAKE) install-utilities STAGE=1 \
                INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) tools STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-tools STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-producers STAGE=1 \
                INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-installer STAGE=1 \
                INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-startup STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-env STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-apis STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) build-apilibs STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        $(MAKE) install-syslibs STAGE=1 INSTALL_DIR=$(INSTALL1_DIR) CC=$(TCC0)
        @echo "==> TenDRA bootstrap build done."






TCC1='$(INSTALL1_DIR)/machines/$(OSFAM)/$(BLDARCH)/bin/tcc -yTENDRA_BASEDIR=$(INSTALL1_DIR)  -Y$(INSTALL1_DIR)/machines/$(OSFAM)/$(BLDARCH)/env/default -Yposix2 -DFS_POSIX'
stage2:
        @echo "==> Starting TenDRA bootstrap build..."
        $(MAKE) install-utilities STAGE=2 CC=$(TCC1)
        $(MAKE) tools STAGE=2 CC=$(TCC1)
        $(MAKE) install-tools STAGE=2 CC=$(TCC1)
        $(MAKE) install-producers STAGE=2 CC=$(TCC1)
        $(MAKE) install-installer STAGE=2 CC=$(TCC1)
        $(MAKE) install-startup STAGE=2 CC=$(TCC1)
        $(MAKE) install-env STAGE=2 CC=$(TCC1)
        $(MAKE) install-apis STAGE=2 CC=$(TCC1)
        $(MAKE) build-apilibs STAGE=2 CC=$(TCC1)
        $(MAKE) install-syslibs STAGE=2 CC=$(TCC1)
        @echo "==> TenDRA bootstrap build done."





# RANDOM BITS 'N PIECES

SUBDIR=         src

#.include "Makefile.defs"

sedfile: defs.mk 
        @${ECHO} "# Create ${.TARGET}"
        @${ECHO} "1,\$$s%-MACH-%${OSFAM}/${BLDARCH}%g"          \
                > ${.TARGET}
        @${ECHO} "1,\$$s%-BLDARCH-%${BLDARCH}%g"                \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-OSFAM-%${OSFAM}%g"                    \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-MACHDIR-%$(MACH_BASE)%g"              \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-BINDIR-%$(MACH_BASE)/bin%g"           \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-ENVDIR-%$(MACH_BASE)/env%g"           \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-LIBDIR-%$(MACH_BASE)/lib%g"           \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-INCLDIR-%${COMMON_DIR}/include%g"     \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-ASCMD-%${ASCMD}%g"    \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-LDCMD-%${LDCMD}%g"    \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-MKDIRCMD-%${MKDIRCMD}%g"      \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-RMCMD-%${RMCMD}%g"    \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-LDCRT-%${LDCRT}%g"    \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-STARTUPDIR-%$(INSTALL_DIR)/lib/startup%g"     \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-TMPDIR-%${TMP_DIR}%g"                 \
                >> ${.TARGET}
        @${ECHO} "1,\$$s%-LIBS-%${LIBS}%g"              \
                >> ${.TARGET}


install-installer:
        cd src/installers/$(BLDARCH)/$(OSFAM) && $(MAKE) && $(MAKE) install || exit 1


#.if !exists(Makefile.defs)
#.BEGIN:
#       @${ECHO} "Please run '$(MAKE)defs' prior to running (b)$(MAKE)"
#       @${ECHO}
#       @${EXIT} 1;
#.else
#all:
#. if defined(BOOTSTRAP)
#       @${ECHO} "==> Starting TenDRA build..."
#       @${ECHO} "==> Creating object directory and symbolic links"
#       @${ECHO} "==> Object directory created, bootstrapping build"
#       @cd ${BASE_DIR} && ${MAKE} _objdirs_done=yes obj;
#. else
#.  if !exists(${.CURDIR}/obj/_obj_tree_complete)
#.   if "${_objdirs_done}" != "yes"
#       @${ECHO} "==> Starting TenDRA build..."
#       @${ECHO} "==> Creating object directory and symbolic links"
#       @cd ${BASE_DIR} && ${MAKE} _objdirs_done=yes obj;
#       @${ECHO} "Do not remove this file." > ${OBJ_DIR_INDICATOR};
#       @${ECHO} "==> Object directory created, building"
#       @${ECHO}

#_objdirs_done=yes
#.   endif
#.  endif
#. endif
#.endif


wrappers:
        mkdir -p $(PUBLIC_BIN)
        rm -f ${PUBLIC_BIN}/tcc
        echo '#!/bin/sh' > ${PUBLIC_BIN}/tcc
        echo exec $(INSTALL_BINDIR)/tcc -yTENDRA_BASEDIR=$(INSTALL_DIR) -Y$(INSTALL_ENVDIR)/default \$${@+"\$$@"} >> ${PUBLIC_BIN}/tcc
        chmod +x ${PUBLIC_BIN}/tcc
        rm -f ${PUBLIC_BIN}/tld
        echo '#!/bin/sh' > ${PUBLIC_BIN}/tld
        echo exec $(INSTALL_BINDIR)/tld \$${@+"\$$@"} >> ${PUBLIC_BIN}/tld
        chmod +x ${PUBLIC_BIN}/tld
        echo '#!/bin/sh' > ${PUBLIC_BIN}/tnc
        echo exec $(INSTALL_BINDIR)/tnc \$${@+"\$$@"} >> ${PUBLIC_BIN}/tnc
        chmod +x ${PUBLIC_BIN}/tnc
        rm -f ${PUBLIC_BIN}/tspec
        ln -s $(INSTALL_BINDIR)/tspec ${PUBLIC_BIN}/tspec

#       echo '#!/bin/sh' > ${PUBLIC_BIN}/tspec
#       echo exec $(INSTALL_BINDIR)/tspec \$${@+"\$$@"} >> ${PUBLIC_BIN}/tspec
#       chmod +x ${PUBLIC_BIN}/tspec
        


dirs:
        mkdir -p $(INSTALL_DIR) || exit 1
        mkdir -p $(MACH_BASE)\
                $(MACH_BASE)/bin\
                $(MACH_BASE)/env\
                 $(MACH_BASE)/lib\
                 $(MACH_BASE)/lib/diag\
                 $(MACH_BASE)/lib/sys
        
#       mkdir -p $(MACH_WORK) || exit 1
        mkdir -p $(COMMON_DIR) || exit 1
#       rm -f ${MACH_BASE}/startup.tar
#       cd $(BASE_DIR)/src/lib && tar cvf ${MACH_BASE}/startup.tar startup || exit 1 
#       cd ${COMMON_DIR} &&  rm -rf startup && tar xvf ${MACH_BASE}/startup.tar
#       rm -f ${MACH_BASE}/startup.tar


api-depend:
        @${ECHO} "# Creating API source for ${API}"
        ${TSPEC} -I${BASE_DIR}/${APIS} -O./ -S./building ${API}

$(MAKE)api: ${APILIB}

#${APILIB}: ${APIOBJS}
#       @${ECHO} "# Linking ${API} API"
#       ${TLD} -mc -o ${APILIB} ${APIOBJS}


b:
        @echo "==> Starting TenDRA build..."
        @${ECHO} "==> Creating object directory and symbolic links"
        @${ECHO} "==> Object directory created, bootstrapping build"
        cd $(BASE_DIR)/src/utilities/ && $(MAKE) 
        cd $(BASE_DIR)/src/tools/ && $(MAKE) 


clean:
        cd $(BASE_DIR)/src/utilities/ && $(MAKE) clean
        cd $(BASE_DIR)/src/tools/ && $(MAKE) clean
        rm -rf $(WORK_DIR)
        cd src/installers/$(BLDARCH)/$(OSFAM) && $(MAKE) clean || exit 1
        @cd src/producers/c && $(MAKE) clean
        @cd src/producers/cpp && $(MAKE) clean


clean-all:
        $(MAKE) clean STAGE=0
        $(MAKE) clean STAGE=1
        $(MAKE) clean




producers:
        @cd src/producers/c && $(MAKE)
        @cd src/producers/cpp && $(MAKE)

install-producers:
        @cd src/producers/c && $(MAKE) install
        @cd src/producers/cpp && $(MAKE) install


tools:
        @cd src/tools && $(MAKE)

install-tools:
        @cd src/tools && $(MAKE) install

utilities:
        @cd src/utilities/ && $(MAKE) 

install-utilities:
        @cd src/utilities/ && $(MAKE) install



install-env:
        cd src/lib/env && $(MAKE) install

install-startup:
        mkdir -p $(INSTALL_DIR)
        cp -R $(BASE_DIR)/src/lib/startup  $(INSTALL_DIR)/startup
        mkdir -p $(INSTALL_MACHDIR)
        cp -R $(BASE_DIR)/src/lib/machines/$(OSFAM)/$(BLDARCH)/startup \
                $(INSTALL_MACHDIR)/startup
        cp -R $(BASE_DIR)/src/lib/machines/$(OSFAM)/$(BLDARCH)/include \
                $(INSTALL_MACHDIR)/include

install-apis:
        # Install API source files by generating them with tspec
        mkdir -p $(INSTALL_DIR)/src
        mkdir -p $(INSTALL_DIR)/include
        mkdir -p $(INSTALL_DIR)/lib
        for API in `cat $(BASE_DIR)/src/build/APIS` ; do \
                echo Installing API $${API} ... ; \
                echo "$(TSPEC) -O$(INSTALL_DIR)/include -S$(INSTALL_DIR)/src -I$(BASE_DIR)/src/lib/apis -w -v $${API}" ; \
                $(TSPEC) -O$(INSTALL_DIR)/include -S$(INSTALL_DIR)/src -I$(BASE_DIR)/src/lib/apis -w -v $${API} ; \
                echo all done  $${TSPEC_INPUT};\
        done

build-apilibs:
        # Compile the API libraries
        for API in `cat $(BASE_DIR)/src/build/APIS$(STAGE)` ; do \
                echo Compiling lib $${API} ... ; \
                cd $(INSTALL_DIR)/src/$${API}.api || exit 1 ;\
                if [ -f ${INSTALL_STARTUPDIR}/$${API}.h ] ; then \
                        $(MAKE) "TCC=$(TCC) -yTENDRA_BASEDIR=$(INSTALL_DIR) -Y$(INSTALL_ENVDIR)/default -Y32bit"  TLD=$(INSTALL_BINDIR)/tld || exit 1;\
                        $(MAKE) PREFIX=$(INSTALL_DIR) install ;\
                else \
                        echo Skipped ; \
                fi ;\
        done
        
install-syslibs:
        cd $(BASE_DIR)/src/lib/machines/$(OSFAM)/$(BLDARCH)/tokens && \
        $(MAKE) "TCC=$(TCC) -yTENDRA_BASEDIR=$(INSTALL_DIR) -Y$(INSTALL_ENVDIR)/default -Y32bit"  TLD=$(INSTALL_BINDIR)/tld TPL=$(INSTALL_BINDIR)/tpl install

libs:


                #${PUBLIC_BIN}/tspec -w -v ${API} ; \


#       cd $(BASE_DIR)/src/utilities && $(MAKE) -DBOOTSTRAP 
#       cd $(BASE_DIR)/src/tools && $(MAKE) -DBOOTSTRAP 



#       cd ${BASE_DIR}/${APIS}/${API}/ && ${.MAKE} -DBOOTSTRAP