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