From 378cc22c077b9e14dfd671ab2ba46b08c7120eab Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Fri, 17 Jan 1997 16:38:02 +0000 Subject: [PATCH] Changes for Makefile.Host and also more like APS/ASD environment --- src/tools/makeBaseApp | 269 ++++++++++++++++++++++++++---------------- 1 file changed, 165 insertions(+), 104 deletions(-) diff --git a/src/tools/makeBaseApp b/src/tools/makeBaseApp index 30089f2c5..ff93ceaea 100755 --- a/src/tools/makeBaseApp +++ b/src/tools/makeBaseApp @@ -20,17 +20,24 @@ Cleanup() { done exit $rtncode } -USAGE="Usage: iocMakeApp -r release -e appname ... " +USAGE="Usage: makeBaseApp -e appname ... " if [ "$PWD" = "$HOME" ]; then Cleanup 1 "In Home Directory" "$USAGE"; fi; -#look for options (Currently only -r release and -e) -RELEASE= -while getopts r:e OPT +#Find EPICS_BASE from path portion of command +DIR=`echo $0 | sed -n -e "/bin/s/.*/bin/p"` +if [ -z "$DIR" ]; then + DIR=`echo $0 | sed -n -e "/src/s/.*/src/p"` +fi +if [ -z "$DIR" ]; then + Cleanup 1 "Cant find epics base. Use full path " "${USAGE}" +fi +EPICS_BASE=`echo $0 | sed -e "s%\(.*\)/${DIR}.*%\1%"` + +#look for options (Currently only and -e) +while getopts e OPT do case $OPT in - r) RELEASE=$OPTARG - ;; e) EXAMPLES=TRUE ;; \?) @@ -40,26 +47,12 @@ do done shift `expr $OPTIND - 1` -#if user did not specify release and none exists error -if [ -z "$RELEASE" -a ! -f EPICS_BASE ]; then - Cleanup 1 "No release " "$USAGE" -fi - -if [ ! -z "$RELEASE" ]; then - ${RELEASE}/bin/${HOST_ARCH}/getrel ${RELEASE} - if [ ! -f EPICS_BASE ]; then - Cleanup 1 "Did not detect successful getrel" "$USAGE" - fi -fi - -EPICS_BASE=`sed -e "s%EPICS_BASE=%%" < EPICS_BASE` - if [ ! -f Makefile ]; then cat > Makefile <<-\END TOP = . include $(TOP)/config/CONFIG_APP - #add directories as follows - #DIRS += + DIRS += $(shell ls | grep App ) + DIRS += iocBoot include $(EPICS_BASE)/config/RULES_TOP END fi @@ -67,44 +60,94 @@ fi if [ ! -d config ]; then mkdir config cat > config/CONFIG <<-\END + #CONFIG # Add any changes to make rules here + #CROSS_COMPILER_TARGET_ARCHS = mv167 + #SHARE_BIN = $(SHARE)/bin/$(T_A) + #ifdef MASTER_IOCAPPS + #MASTER_IOCAPPS_BIN = $(MASTER_IOCAPPS)/bin/$(T_A) + #endif END cat > config/CONFIG_APP <<-\END #CONFIG_APP DO NOT EDIT THIS FILE - include $(TOP)/EPICS_BASE + include $(TOP)/config/RELEASE include $(EPICS_BASE)/config/CONFIG include $(TOP)/config/CONFIG END - cat > config/RULES.Unix <<-\END - include $(EPICS_BASE)/config/RULES.Unix + cat > config/RELEASE <<-END + #RELEASE Location of external products + EPICS_BASE=${EPICS_BASE} + #SHARE= + #MASTER_IOCAPPS= + END + cat > config/RULES.Db <<-\END + #RULES.Db + include $(EPICS_BASE)/config/RULES.Db + END + cat > config/RULES.Host <<-\END + #RULES.Host + include $(EPICS_BASE)/config/RULES.Host + ifdef MASTER_IOCAPPS + USR_INCLUDES += -I$(MASTER_IOCAPPS)/include + endif + USR_INCLUDES += -I$(SHARE)/include END cat > config/RULES.Vx <<-\END + #RULES.Vx include $(EPICS_BASE)/config/RULES.Vx VX_WARN_YES = -Wall -pedantic + ifdef MASTER_IOCAPPS + USR_INCLUDES += -I$(MASTER_IOCAPPS)/include + endif + USR_INCLUDES += -I$(SHARE)/include + END + cat > config/RULES.ioc <<-\END + #RULES.ioc + include $(EPICS_BASE)/config/RULES.ioc + END + cat > config/RULES_ARCHS <<-\END + #RULES_ARCHS + include $(EPICS_BASE)/config/RULES_ARCHS END cat > config/RULES_DIRS <<-\END + #RULES_DIRS include $(EPICS_BASE)/config/RULES_DIRS END + cat > config/RULES_TOP <<\END +#RULES_TOP +include $(EPICS_BASE)/config/RULES_TOP + +inc: softlinks +buildInstall: softlinks + +softlinks: + @echo "softlinks" ; if [ "$(MASTER_IOCAPPS)" ]; then \ + for DIR in bin lib dbd include man ; do \ + $(SHARE)/config/makeSoftLinks $(MASTER_IOCAPPS) $${DIR} ;\ + done; fi + +.PHONY :: softlinks +END fi if [ $# = 0 ]; then Cleanup 0; fi; for APPNAME do - if [ -d "${APPNAME}" ]; then continue; fi - mkdir ${APPNAME} - if [ $? -ne 0 ]; then Cleanup 1 "$USAGE"; fi - cd ${APPNAME} + if [ -d "${APPNAME}App" ]; then continue; fi + mkdir ${APPNAME}App + if [ $? -ne 0 ]; then Cleanup 1 "$USAGE"; fi + cd ${APPNAME}App cat > Makefile <<-\END TOP = .. include $(TOP)/config/CONFIG_APP DIRS = src include $(EPICS_BASE)/config/RULES_DIRS END - mkdir db - if [ -n "${EXAMPLES}" ]; then - #if source starts with blank tab replace by tab - sed -e "s/ / /" > db/dbExample.db <<-\END + mkdir Db + if [ -n "${EXAMPLES}" ]; then + #if source starts with blank tab replace by tab + sed -e "s/ / /" > Db/dbExample.db <<-\END record(ai, "$(user):aiExample") { field(DESC, "Analog input") @@ -158,8 +201,8 @@ do field(LLSV, "MAJOR") } END - fi - mkdir src + fi + mkdir src cat > src/Makefile <<-\END TOP=../.. include $(TOP)/config/CONFIG_APP @@ -174,12 +217,12 @@ do # ADD MACRO DEFINITIONS AFTER THIS LINE END - if [ -n "${EXAMPLES}" ]; then + if [ -n "${EXAMPLES}" ]; then sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Vx <<-\END RECTYPES += xxxRecord.h USER_DBDFLAGS += -I .. -I $(EPICS_BASE)/dbd DBDEXPAND = APPNAMEInclude.dbd - DBDNAME = APPNAME.dbd + DBDNAME = APPNAMEApp.dbd SRCS.c += ../xxxRecord.c SRCS.c += ../devXxxSoft.c @@ -187,36 +230,30 @@ do LIBOBJS += xxxRecord.o LIBOBJS += devXxxSoft.o LIBOBJS += sncExample.o - LIBNAME = APPNAMESupport - SCRIPTS += st.APPNAME - SCRIPTS += vxWorks vxWorks.sym iocCore seq + LIBNAME = APPNAMELib + INSTALLS += vxWorks vxWorks.sym iocCore seq END - else + else sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Vx <<-\END #RECTYPES += anyRecord.h USER_DBDFLAGS += -I .. -I $(EPICS_BASE)/dbd #DBDEXPAND = APPNAMEInclude.dbd - #DBDNAME = APPNAME.dbd + #DBDNAME = APPNAMEApp.dbd #SRCS.c += ../anysource.c #include ../baseLIBOBJS #LIBOBJS += anysource.o - #LIBNAME = APPNAMESupport - #SCRIPTS += st.APPNAME - #SCRIPTS += vxWorks vxWorks.sym iocCore seq + #LIBNAME = APPNAMELib + #INSTALLS += vxWorks vxWorks.sym iocCore seq END - fi - sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Vx <<-\END + fi + cat >> src/Makefile.Vx <<-\END include $(TOP)/config/RULES.Vx #---------------------------------------- # ADD RULES AFTER THIS LINE - - $(LIBNAME): ../baseLIBOBJS - $(DBDNAME): ../base.dbd $(RECTYPES:%.h=../%.dbd) - END - cat > src/Makefile.Unix <<-\END - # Makefile.Unix + cat > src/Makefile.Host <<-\END + # Makefile.Host TOP = ../../.. include $(TOP)/config/CONFIG_APP INSTALL_LOCATION = $(TOP) @@ -224,74 +261,52 @@ do # ADD MACRO DEFINITIONS AFTER THIS LINE #USR_CFLAGS += - DEPLIBS += $(EPICS_BASE_LIB)/libca.a - DEPLIBS += $(EPICS_BASE_LIB)/libCom.a - - USR_LDFLAGS = -L$(EPICS_BASE_LIB) - USR_LDLIBS = -lca -lDb -lCom + PROD_LIBS_DEFAULT += m + PROD_LIBS_WIN32 += -nil- + PROD_LIBS += ca + PROD_LIBS += Db + PROD_LIBS += Com END - if [ -n "${EXAMPLES}" ]; then - sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Unix <<-\END - SRCS.c += ../caExample.c - OBJS += caExample.o + if [ -n "${EXAMPLES}" ]; then + cat >> src/Makefile.Host <<-\END PROD += caExample END - else - sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Unix <<-\END - #OBJS += xxx.o + else + cat >> src/Makefile.Host <<-\END #PROD += xxx END - fi - sed -e "s/APPNAME/${APPNAME}/" >> src/Makefile.Unix <<-\END - - include $(TOP)/config/RULES.Unix + fi + cat >> src/Makefile.Host <<-\END + + include $(TOP)/config/RULES.Host #---------------------------------------- # ADD RULES AFTER THIS LINE END - if [ -n "${EXAMPLES}" ]; then + if [ -n "${EXAMPLES}" ]; then cat > src/${APPNAME}Include.dbd <<-\END include "base.dbd" include "xxxRecord.dbd" device(xxx,CONSTANT,devXxxSoft,"SoftChannel") END - else + else cat > src/${APPNAME}Include.dbd <<-\END include "base.dbd" #private database definitions go here #device(xxx,CONSTANT,devXxxSoft,"SoftChannel") END - fi - cp ${EPICS_BASE}/dbd/base.dbd src/base.dbd - cp ${EPICS_BASE}/dbd/baseLIBOBJS src/baseLIBOBJS - sed -e "s/USER/${USER}/" \ - -e "s/APPNAME/${APPNAME}/" > src/st.${APPNAME} <<-\END - # Example vxWorks startup file - #Following must be added for many board support packages - #cd - ld < iocCore - ld < seq - ld < APPNAMESupport - - dbLoadDatabase("../../dbd/APPNAME.dbd") - END - if [ -n "${EXAMPLES}" ]; then - sed -e "s/USER/${USER}/" \ - -e "s/APPNAME/${APPNAME}/" >> src/st.${APPNAME} <<-\END - dbLoadRecords("../../APPNAME/db/dbExample.db","user=USER") - iocInit - seq &snctest - END - else - sed -e "s/USER/${USER}/" \ - -e "s/APPNAME/${APPNAME}/" >> src/st.${APPNAME} <<-\END - #dbLoadRecords("../../APPNAME/db/xxx.db","user=USER") - iocInit - #start sequence programs - #seq &sncxxx - END - fi - if [ -z "${EXAMPLES}" ]; then Cleanup 0; fi; + fi + if [ -f ${EPICS_BASE}/dbd/base.dbd ]; then + cp ${EPICS_BASE}/dbd/base.dbd src/base.dbd + else + echo "${EPICS_BASE}/dbdbase.dbd does not exist" + fi + if [ -f ${EPICS_BASE}/dbd/baseLIBOBJS ]; then + cp ${EPICS_BASE}/dbd/baseLIBOBJS src/baseLIBOBJS + else + echo "${EPICS_BASE}/baseLIBOBJS does not exist" + fi + if [ -n "${EXAMPLES}" ]; then #if source starts with blank tab replace by tab sed -e "s/ / /" > src/caExample.c <<-\END /*caExample.c*/ @@ -802,7 +817,53 @@ do } } END - cd .. - echo "add line to Makefile DIRS+=$APPNAME " + fi + cd .. + if [ ! -d iocBoot ]; then + mkdir iocBoot; + cat > iocBoot/Makefile <<-\END + TOP = .. + include $(TOP)/config/CONFIG_APP + DIRS += $(shell ls | grep ioc ) + include $(TOP)/config/RULES_DIRS + END + fi + if [ -d iocBoot/ioc${APPNAME} ]; then continue; fi + mkdir iocBoot/ioc${APPNAME} + cd iocBoot/ioc${APPNAME} + cat > Makefile <<-\END + TOP = ../.. + include $(TOP)/config/CONFIG_APP + ARCH = ??? + include $(TOP)/config/RULES.ioc + END + sed -e "s/USER/${USER}/" \ + -e "s/APPNAME/${APPNAME}/" > st.cmd <<-\END + # Example vxWorks startup file + #Following must be added for many board support packages + #cd + ld < bin/iocCore + ld < bin/seq + ld < bin/APPNAMELib + + dbLoadDatabase("dbd/APPNAMEApp.dbd") + END + if [ -n "${EXAMPLES}" ]; then + sed -e "s/USER/${USER}/" \ + -e "s/APPNAME/${APPNAME}/" >> st.cmd <<-\END + dbLoadRecords("APPNAMEApp/Db/dbExample.db","user=USER") + iocInit + seq &snctest + END + else + sed -e "s/USER/${USER}/" \ + -e "s/APPNAME/${APPNAME}/" >> src/st.cmd <<-\END + #dbLoadRecords("APPNAMEApp/Db/xxx.db","user=USER") + iocInit + #start sequence programs + #seq &sncxxx + END + fi + cd ../.. done Cleanup 0