Files
epics-base/configure/RULES_BUILD
T

865 lines
21 KiB
Plaintext

# $Id$
#
# Rules for making things specified in Makefile.Host
#
# Some rules for filename-massage are system specific
# and have "ifdefs" here instead of using definitions
# from CONFIG.Host.$(ARCH_CLASS) - sorry about this,
# but so far the rules are quite similar on all systems
# except WIN32 has some specials.
#
# Maybe there is a way to use indentation to make it
# easier to read this file?
#
# Most things may also work if you say e.g.
# VAR+=ADD
# even if ADD is not there, but this way "VAR" would
# be defined in any case, that's why I try to use
# ifdef ADD
# VAR+=ADD
# endif
#
# -kuk-
# we are in O.$(OS_CLASS), but most sources are one dir above:
#
# The use of VPATH (no suffix specification) caused everything
# to break several times.
# vpath, of course, has the disadvantage that we need explicit rules
# for scripts or similar os-specific filed which have _no_ suffix...
include $(CONFIG)/RULES_ARCHS
ifdef T_A
BUILD=YES
ifneq ($(THREAD_TYPE),)
ifneq ($(OS_THREAD_TYPE),)
ifneq ($(THREAD_TYPE),$(findstring $(THREAD_TYPE),$(OS_THREAD_TYPE)))
BUILD=NO
endif
endif
endif
ifeq ($(BUILD),YES)
ifneq ($(THREAD_TYPE),ST)
OS_SRC_DIRS += $(foreach dir,$(SRC_DIRS), \
$(dir)/os/$(OS_CLASS)MT $(dir)/os/posixMT \
$(dir)/os/$(OS_CLASS) $(dir)/os/posix \
$(dir)/generic $(dir)) . ..
INSTALL_INCLUDES += $(foreach dir,$(SRC_DIRS) $(INSTALL_INCLUDE), \
-I$(dir)/os/$(OS_CLASS)MT -I$(dir)/os/posixMT \
-I$(dir)/os/$(OS_CLASS) -I$(dir)/os/posix \
-I$(dir)/generic -I$(dir))
INSTALL_INC += $(foreach inc,$(INC), \
$(firstword $(foreach dir,$(SRC_DIRS) .., \
$(subst $(dir),$(INSTALL_INCLUDE),$(firstword $(wildcard \
$(dir)/os/$(OS_CLASS)MT/$(inc) \
$(dir)/os/posixMT/$(inc) \
$(dir)/os/$(OS_CLASS)/$(inc) \
$(dir)/os/posix/$(inc)\
$(dir)/generic/$(inc) \
$(dir)/$(inc) \
../$(inc) \
)))) $(INSTALL_INCLUDE)/$(inc)))
else
OS_SRC_DIRS += $(foreach dir,$(SRC_DIRS), \
$(dir)/os/$(OS_CLASS) $(dir)/os/posix $(dir)/generic $(dir)) . ..
INSTALL_INCLUDES += $(foreach dir,$(SRC_DIRS) $(INSTALL_INCLUDE), \
-I$(dir)/os/$(OS_CLASS) -I$(dir)/os/posix -I$(dir)/generic -I$(dir))
INSTALL_INC += $(foreach inc,$(INC), \
$(firstword $(foreach dir,$(SRC_DIRS) .., \
$(subst $(dir),$(INSTALL_INCLUDE),$(firstword $(wildcard \
$(dir)/os/$(OS_CLASS)/$(inc) \
$(dir)/os/posix/$(inc)\
$(dir)/generic/$(inc) \
$(dir)/$(inc) \
../$(inc) \
)))) $(INSTALL_INCLUDE)/$(inc)))
endif
vpath %.c $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic ..
vpath %.cc $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic ..
vpath %.C $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic ..
vpath %.rc $(USER_VPATH) $(OS_SRC_DIRS) ../os/$(OS_CLASS) ../os/generic ..
# This prevents base/src/include/*.h from being installed. Why??
#vpath %.h ../os/$(OS_CLASS) ../os/generic ..
vpath %.h $(USER_VPATH) $(SRC_DIRS) .. .
# check for add-on CFLAGS and CXXFLAGS
#
# Rules:
# 1) USR_CFLAGS is used
# 2) if there is a special USR_CFLAGS_$(OS_CLASS), it's
# appended to 1)
# 3) if there is no special defined, but a generic USR_CFLAGS_DEFAULT,
# this one is appended
# 4) if you have the special case that your USR_CFLAGS_$(OS_CLASS) is
# empty but you don't want 3), you have to define it as '-nil-', e.g.:
# USR_CFLAGS = <defines for all systems>
# USR_CFLAGS_sun4 = -nil-
# USR_CFLAGS_DEFAULT = <defines for most systems, not sun4>
#
# These rules apply to these Makefile-variables:
# USR_CFLAGS C flags
# USR_CXXFLAGS C++ flags
# USR_CPPFLAGS c preprocesser flags
# INC include-files to install
# LIBSRCS source files for building library
# PROD_LIBS EPICS libs needed by PROD and TESTPROD
# USR_LIBS NONEPICS libs needed by PROD and TESTPROD
# USR_LDFLAGS ld flags
# SYS_PROD_LIBS system libs needed by PROD and TESTPROD
# PROD products to build and install
# SCRIPTS scripts to install
# USR_INCLUDES include directories
#
# Remark:
# If you define INC, e.g. INC = getopt.h, the source
# (getopt.h) must be in the source directory (..) and/or
# in one or more ../os/<OS_CLASS> directories.
# The INC source files cannot be created by the build.
#
ifneq ($(strip $(USR_CFLAGS_$(OS_CLASS))),)
USR_CFLAGS+=$(subst -nil-,,$(USR_CFLAGS_$(OS_CLASS)))
else
ifdef USR_CFLAGS_DEFAULT
USR_CFLAGS+=$(USR_CFLAGS_DEFAULT)
endif
endif
ifneq ($(strip $(USR_INCLUDES_$(OS_CLASS))),)
USR_INCLUDES+=$(subst -nil-,,$(USR_INCLUDES_$(OS_CLASS)))
else
ifdef USR_INCLUDES_DEFAULT
USR_INCLUDES+=$(USR_INCLUDES_DEFAULT)
endif
endif
ifneq ($(strip $(USR_CXXFLAGS_$(OS_CLASS))),)
USR_CXXFLAGS+=$(subst -nil-,,$(USR_CXXFLAGS_$(OS_CLASS)))
else
ifdef USR_CXXFLAGS_DEFAULT
USR_CXXFLAGS+=$(USR_CXXFLAGS_DEFAULT)
endif
endif
ifneq ($(strip $(USR_CPPFLAGS_$(OS_CLASS))),)
USR_CPPFLAGS+=$(subst -nil-,,$(USR_CPPFLAGS_$(OS_CLASS)))
else
ifdef USR_CPPFLAGS_DEFAULT
USR_CPPFLAGS+=$(USR_CPPFLAGS_DEFAULT)
endif
endif
ifneq ($(strip $(USR_LDFLAGS_$(OS_CLASS))),)
USR_LDFLAGS+=$(subst -nil-,,$(USR_LDFLAGS_$(OS_CLASS)))
else
ifdef USR_LDFLAGS_DEFAULT
USR_LDFLAGS+=$(USR_LDFLAGS_DEFAULT)
endif
endif
# check for special includes:
#
ifneq ($(strip $(INC_$(OS_CLASS))),)
# os-specific includes go to the include/os-directory:
INC += $(subst -nil-,,$(INC_$(OS_CLASS)))
else
ifdef INC_DEFAULT
INC += $(INC_DEFAULT)
endif
endif
# concat specific library contents (if defined)
#
ifneq ($(strip $(LIBSRCS_$(OS_CLASS))),)
LIBSRCS += $(subst -nil-,,$(LIBSRCS_$(OS_CLASS)))
else
ifdef LIBSRCS_DEFAULT
LIBSRCS+=$(LIBSRCS_DEFAULT)
endif
endif
ifneq ($(strip $(BIN_INSTALLS_$(OS_CLASS))),)
BIN_INSTALLS+=$(subst -nil-,,$(BIN_INSTALLS_$(OS_CLASS)))
else
ifdef BIN_INSTALLS_DEFAULT
BIN_INSTALLS+=$(BIN_INSTALLS_DEFAULT)
endif
endif
ifneq ($(strip $(LIBRARY_$(OS_CLASS))),)
LIBRARY+=$(subst -nil-,,$(LIBRARY_$(OS_CLASS)))
else
ifdef LIBRARY_DEFAULT
LIBRARY+=$(LIBRARY_DEFAULT)
endif
endif
ifneq ($(strip $(SHARED_LIBRARIES_$(OS_CLASS))),)
SHARED_LIBRARIES+=$(subst -nil-,,$(SHARED_LIBRARIES_$(OS_CLASS)))
else
ifdef SHARED_LIBRARIES_DEFAULT
SHARED_LIBRARIES_+=$(SHARED_LIBRARIES_DEFAULT)
endif
endif
ifneq ($(strip $(PROD_LIBS_$(OS_CLASS))),)
PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS)))
else
ifdef PROD_LIBS_DEFAULT
PROD_LIBS += $(PROD_LIBS_DEFAULT)
endif
endif
ifneq ($(strip $(USR_LIBS_$(OS_CLASS))),)
USR_LIBS += $(subst -nil-,,$(USR_LIBS_$(OS_CLASS)))
else
ifdef USR_LIBS_DEFAULT
USR_LIBS += $(USR_LIBS_DEFAULT)
endif
endif
#
# concat specific library contents (if defined) to SYS_PROD_LIBS
#
ifneq ($(strip $(SYS_PROD_LIBS_$(OS_CLASS))),)
SYS_PROD_LIBS += $(subst -nil-,,$(SYS_PROD_LIBS_$(OS_CLASS)))
else
ifdef SYS_PROD_LIBS_DEFAULT
SYS_PROD_LIBS += $(SYS_PROD_LIBS_DEFAULT)
endif
endif
#
# concat specific products
#
ifneq ($(strip $(PROD_$(OS_CLASS))),)
PROD += $(subst -nil-,,$(PROD_$(OS_CLASS)))
else
ifdef PROD_DEFAULT
PROD += $(PROD_DEFAULT)
endif
endif
#
# concat specific scripts
#
ifneq ($(strip $(SCRIPTS_$(OS_CLASS))),)
SCRIPTS += $(subst -nil-,,$(SCRIPTS_$(OS_CLASS)))
else
ifdef SCRIPTS_DEFAULT
SCRIPTS += $(SCRIPTS_DEFAULT)
endif
endif
#
# concat specific resource files
#
ifneq ($(strip $(RCS_$(OS_CLASS))),)
RCS += $(subst -nil-,,$(RCS_$(OS_CLASS)))
else
ifdef RCS_DEFAULT
RCS += $(RCS_DEFAULT)
endif
endif
#---------------------------------------------------------------
LIBSRCS += $($(addsuffix _SRCS,$(LIBRARY)))
###### The following stmt does not work #########
ifneq ($($(addsuffix _SRCS_$(OS_CLASS),$(LIBRARY))),)
XXX=aaa
LIBSRCS += $(subst -nil-,,$($(addsuffix _SRCS_$(OS_CLASS),$(LIBRARY))))
else
XXX=bbb
LIBSRCS+=$($(addsuffix _SRCS_DEFAULT,$(LIBRARY)))
endif
# adjust object names for library contents
#
ifdef LIBSRCS
LIBOBJS+=$(addsuffix $(OBJ), $(basename $(LIBSRCS)))
endif
# adjust executables
ifdef TESTPROD
TESTPROD := $(addsuffix $(EXE), $(TESTPROD))
endif
# adjust executables
ifdef PROD
PROD := $(addsuffix $(EXE), $(PROD))
endif
#---------------------------------------------------------------
# ----------------------------------------------------
# create names (lists) for installed things
# ----------------------------------------------------
# each list starts with the destination directory name(s)
# to make sure it's there
INCREC +=$(RECTYPES) $(MENUS)
INSTALL_PROD= $(PROD:%= $(INSTALL_BIN)/%)
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
INSTALL_INCREC = $(INCREC:%= $(INSTALL_INCLUDE)/%)
MANLIST = 1 2 3 4 5 6 7 8 9
INSTALL_MANS = $(foreach n, \
$(MANLIST), $(MAN$(n):%= $(INSTALL_MAN)/man$(n)/%))
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
ifdef TEMPLATES_DIR
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
else
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)
endif
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \
$(subst $(CONFIG),top/configure,$(TEMPLATES)))
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)
INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%)
INSTALL_DBS = $(DBDINSTALL:%= $(INSTALL_DBD)/%)\
$(RECTYPES:%.h= $(INSTALL_DBD)/%.dbd)\
$(MENUS:%.h= $(INSTALL_DBD)/%.dbd)
INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%)
MAN_DIRECTORY_TARGETS = $(foreach n, $(MANLIST),$(INSTALL_MAN)/man$(n))
#---------------------------------------------------------------
#---------------------------------------------------------------
# must use c++ linker if linking to shared libs with c++ code
#ifeq ($(strip $(SHARED_LIBRARIES)),YES)
ifneq ($(strip $(CPLUSPLUS)),)
LINK.c = $(LINK.cc)
endif # CPLUSPLUS
#endif # SHARED_LIBRARIES
#---------------------------------------------------------------
# Libraries
#
# if there are no objects LIBOBJS to include
# in this library (may be for e.g. base/src/libCompat
# on some archs), don't define (and build) any library!
ifdef LIBRARY
ifdef LIBOBJS
LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS)
CFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES)
CXXFLAGS += $($(ANSI)_SHRLIB_CFLAGS_YES)
# check if shared libraries requested
ifeq ($(strip $(SHARED_LIBRARIES)),YES)
PROD_VERSION =$(SHRLIB_VERSION)
ifeq ($(findstring cc,$(suffix $(LIBSRCS))),cc)
SHRLIB_LINKER = $(CXX)
else
SHRLIB_LINKER = $(CC)
endif
LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) $(INSTALL_DLL_LINK_LIBS)
endif # SHARED_LIBRARIES=YES
endif # LIBOBJS
endif # LIBRARY
#---------------------------------------------------------------
# Main targets
all:: install
buildInstall :: build
build :: inc
build:: $(LIBTARGETS) $(PROD) $(TESTPROD)
buildInstall :: $(TARGETS) \
$(INSTALL_SCRIPTS) $(INSTALL_PROD) \
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX)
build:: $(MENUS) $(RECTYPES) $(BPTS)
ifdef DBDEXPAND
build:: $(DBDNAME)
endif
inc:: $(INSTALL_INC)
rebuild:: clean install
install:: inc buildInstall
buildInstall :: $(INSTALL_MANS) \
$(INSTALL_DOCS) \
$(INSTALL_HTMLS) \
$(INSTALL_TEMPLATE) \
$(INSTALL_CONFIGS) \
$(INSTALL_DBS) $(INSTALL_BPTS) \
$(INSTALL_DBDNAME) $(INSTALL_INCREC)
ifdef BIN_INSTALLS
buildInstall :: binInstalls
endif
clean::
@echo "Cleaning"
@$(RM) *.i *$(OBJ) *.a $(PROD) $(TESTPROD) $(LIBNAME) $(SHRLIBNAME) \
$(INC) *$(RES) $(TARGETS) \
$(DBDINSTALL) $(MENUS) $(RECTYPES) $(BPTS) $(DBDNAME) *.out
#---------------------------------------------------------------
# Products
#
PROD += $(TESTPROD)
ifdef PROD
COND_PROD_SRCS=$(foreach prod, $(basename $(PROD)), $($(prod)_SRCS) $($(prod)_SRCS_$(OS_CLASS)))
COND_PROD_RCS=$(foreach prod, $(basename $(PROD)), $($(prod)_RCS) $($(prod)_RCS_$(OS_CLASS)))
COND_PROD_LIBS=$(foreach prod, $(basename $(PROD)), $($(prod)_LIBS))
ifdef PRODNAME
ifneq ($(strip $(PRODNAME_SRCS_$(OS_CLASS))),)
PRODNAME_SRCS += $(subst -nil-,,$(PRODNAME_SRCS_$(OS_CLASS)))
else
ifdef PRODNAME_SRCS_DEFAULT
PRODNAME_SRCS += $(PRODNAME_SRCS_DEFAULT)
endif
endif
ifneq ($(strip $(PRODNAME_RCS_$(OS_CLASS))),)
PRODNAME_RCS += $(subst -nil-,,$(PRODNAME_RCS_$(OS_CLASS)))
else
ifdef PRODNAME_RCS_DEFAULT
PRODNAME_RCS += $(PRODNAME_RCS_DEFAULT)
endif
endif
$(PRODNAME): $(PROD_DEPLIBS) $(PRODNAME_DEPLIBS)
ifdef PRODNAME_SRCS
ifeq ($(findstring cc,$(suffix $(PRODNAME_SRCS))),cc)
PRODNAME_LINKER = $(LINK.cc)
else
PRODNAME_LINKER = $(LINK.c)
endif
PRODNAME_OBJS=$(addsuffix $(OBJ), $(basename $(PRODNAME_SRCS)))
PRODNAME_RESS=$(addsuffix $(RES), $(basename $(PRODNAME_RCS)))
$(PRODNAME): $(PRODNAME_OBJS) $(PRODNAME_RESS)
@$(RM) $@
$(PRODNAME_LINKER) $(PRODNAME_OBJS) $(PRODNAME_RESS) $(LDLIBS)
endif # ifdef PRODNAME_SRCS
else # PRODNAME not defined
# We have to use the product's true dependancies and
# call make again to determine if product should be rebuilt
ifneq ($(strip $(SRCS) $(COND_PROD_SRCS)),)
PROD_OBJS=$(addsuffix $(OBJ), $(basename $(SRCS) $(COND_PROD_SRCS)))
PROD_RESS=$(addsuffix $(RES), $(basename $(RCS) $(COND_PROD_RCS)))
PROD_MAKE_COMMAND=$(MAKE) -f ../Makefile $@\
PRODNAME="$@"\
PRODNAME_SRCS="$(SRCS) $($(basename $@)_SRCS)"\
PRODNAME_SRCS_DEFAULT="$($(basename $@)_SRCS_DEFAULT)"\
PRODNAME_SRCS_$(OS_CLASS)="$($(basename $@)_SRCS_$(OS_CLASS))"\
PRODNAME_RCS="$(RCS) $($(basename $@)_RCS)"\
PRODNAME_RCS_DEFAULT="$($(basename $@)_RCS_DEFAULT)"\
PRODNAME_RCS_$(OS_CLASS)="$($(basename $@)_RCS_$(OS_CLASS))"\
PRODNAME_LIBS="$($(basename $@)_LIBS)"
$(PROD): $(SRCS) $(COND_PROD_SRCS) $(PROD_RESS) $(PROD_DEPLIBS) $(COND_PROD_DEPLIBS)
@$(PROD_MAKE_COMMAND)
endif
endif #ifdef PRODNAME
endif #ifdef PROD
#---------------------------------------------------------------
# Java classes and packages
#
INSTALL_JAVA = $(INSTALL_LOCATION)/javalib
DIRECTORY_TARGETS += $(INSTALL_JAVA)
ifdef PACKAGE
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
endif #ifdef PACKAGE
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)
CLASSES += $(subst .java,.class,$(JAVA))
TESTCLASSES += $(subst .java,.class,$(TESTJAVA))
INSTALL_CLASSES =$(CLASSES:%=$(INSTALL_JAVA)/$(PACKAGE)/%)
INSTALL_JAR =$(JAR:%=$(INSTALL_JAVA)/%)
JAR_OPTIONS = cvf
ifdef MANIFEST
JAR_OPTIONS = cvmf
endif
JAR_DEPFILES += $(wildcard $(JAR_INPUT) $(addsuffix /*,$(JAR_INPUT)))
$(DIRECTORY_TARGETS) :
# $(MKDIR) -p $@
build:: $(TESTCLASSES) $(JAR)
buildInstall :: $(DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(INSTALL_JAR)
clean::
@$(RM) $(TESTCLASSES) $(JAR)
%.class:%.java
@echo Creating java class file $@
$(RM) $@
$(JAVACCMD) $<
$(INSTALL_JAVA)/$(PACKAGE)/%.class:%.java
@echo Creating java class file $@
@$(RM) $@
$(JAVACCMD) -d $(INSTALL_JAVA) $<
$(JAR):%.jar: $(JAR_DEPFILES)
@echo Creating java jar file $@
@$(RM) $@
$(JARCMD)
$(INSTALL_JAVA)/%.jar: %.jar
@echo "Installing jar file $@"
$(INSTALL) -d -m 644 $< $(@D)
#---------------------------------------------------------------
#---------------------------------------------------------------
# Generic Rules for 'simple' targets that
# can be generated from a single source with same basename.
#
# The usual two rules .c* -> $(OBJ) and then $(OBJ) -> $(EXE)
# do not work because the $(OBJ)->$(EXE) rule wouldn't
# know if the original source was C or C++.
#
# Hint: The $(subst...) construct removes the .c or .cc
# as well as the '../' from the filename and adds $(OBJ):
# e.g. $< = '../abc.c' -> 'abc.o'
#
# The order of the following rules is
# VERY IMPORTANT !!!!
depends:: $(LIBSRCS) $(SRCS) $(COND_PROD_SRCS)
$(RM) DEPENDS
touch DEPENDS
$(DEPENDS_RULE)
%$(EXE): %.c
@$(RM) $@
$(COMPILE.c) $<
$(LINK.c) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
%$(EXE): %.cc
@$(RM) $@
$(COMPILE.cc) $<
$(LINK.cc) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
%$(EXE): %.C
@$(RM) $@
$(COMPILE.cc) $<
$(LINK.cc) $(subst ../,,$(basename $<))$(OBJ) $(LDLIBS)
# C++ munching for VxWorks
%.out : %.o
@ $(RM) ctct.o ctdt.c
$(NM) $< | $(MUNCH) > ctdt.c
$(COMPILE.c) -traditional ctdt.c
$(LINK.) $@ $< ctdt.o
@ $(RM) ctdt.c ctdt.o
%$(OBJ): %.c
@$(RM) $@
$(COMPILE.c) $<
%$(OBJ): %.cc
@$(RM) $@
$(COMPILE.cc) $<
%$(OBJ): %.C
@$(RM) $@
$(COMPILE.cc) $<
# WIN95/NT resource compiler
%$(RES): %.rc
@$(RM) $@
$(RCCMD)
#
# rename the y.tab.h file only if we
# are creating it
#
%.h %.c: ../%.y
$(RM) $*.c y.tab.c
ifeq ($(findstring -d, $(YACCOPT)),-d)
$(RM) $*.h y.tab.h
endif
$(YACC) $(YACCOPT) $<
$(MV) y.tab.c $*.c
ifeq ($(findstring -d, $(YACCOPT)),-d)
$(MV) y.tab.h $*.h
endif
%.c: ../%.l
@$(RM) lex.yy.c
$(LEX) $(LEXOPT) $<
@$(RM) $@
$(MV) lex.yy.c $@
#state notation language rule
%.c: ../%.st
@echo "preprocessing $*.st"
@$(RM) $*.i
$(CPP) $(CPPFLAGS) $< $*.i
@echo "converting $*.i"
@$(RM) $@
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.i
%.c: %.stt
@echo "converting $<
ln -s $< $*.st
$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $*.st
@$(RM) $*.st
# Capfast Rules:
%.db: %.edf
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
%.db: ../%.edf
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) $<
%.edf: ../%.sch
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
# Adl2dl rule
%.dl : ../%.adl
-$(ADL2DL) $< $@
# Mangen Rule:
%.1:%
$(MANGEN) -s $<
$(MV) $(<F).nr $(<F).1
# Mangen Rule:
%.1:../%
$(MANGEN) -s $<
$(MV) $(<F).nr $(<F).1
$(INSTALL_DBD)/%: %
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
$(INSTALL_DBD)/%: ../%
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_DBD)
%Record.h: %Record.dbd
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
$(DBDFLAGS) $<
%Record.h: ../%Record.dbd
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToRecordtypeH$(EXE) \
$(DBDFLAGS) $<
menu%.h: menu%.dbd
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
menu%.h: ../menu%.dbd
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbToMenuH$(EXE) $<
bpt%.dbd: bpt%.data
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
bpt%.dbd: ../bpt%.data
$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/makeBpt$(EXE) $<
ifdef DBDEXPAND
$(DBDNAME): ../$(DBDEXPAND)
@echo Expanding dbd
@$(RM) $@
$(EPICS_BASE)/bin/$(HOST_ARCH)/dbExpand$(EXE) $(DBDFLAGS) $< > $@
endif
ifneq (,$(wildcard ../baseLIBOBJS))
$(LIBNAME_vxWorks): ../baseLIBOBJS
endif
$(LIBNAME_vxWorks): $(LIBOBJS)
$(RM) $@
$(ARCMD) $(LIBOBJS)
ifneq ($(RANLIB)xx,xx)
$(RANLIB) $@;
endif # RANLIB
$(DLL_LINK_LIBNAME) $(SHRLIBNAME): $(LIBOBJS)
$(LINK.shrlib) $(LIBOBJS) $(DLL_LDLIBS)
# rule for lib (archive of object files) creation
$(LIBNAME): $(LIBOBJS)
$(RM) $@
$(ARCMD) $(LIBOBJS)
ifneq ($(RANLIB)xx,xx)
$(RANLIB) $@;
endif # RANLIB
binInstalls: $(BIN_INSTALLS)
@echo "Installing $(^F)"
@$(INSTALL) -d -m 555 $^ $(INSTALL_BIN)
$(INSTALL_BIN)/%: ../os/$(OS_CLASS)/%
@echo "Installing os-specific script $@"
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
$(INSTALL_BIN)/%: %
@echo "Installing binary $@"
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
$(INSTALL_BIN)/%: ../%
@echo "Installing script $@"
@$(INSTALL_PRODUCT) -d -m 555 $< $(INSTALL_BIN)
$(INSTALL_LIB)/%.a: %.a
@echo "Installing library $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_LIB)
ifneq ($(RANLIB)xx,xx)
$(RANLIB) $(RANLIBFLAGS) $@
endif # RANLIB
$(INSTALL_LIB)/%.lib: %.lib
@echo "Installing library $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_LIB)
$(INSTALL_SHRLIB)/lib%: lib%
@echo "Installing library $@"
@$(INSTALL) -d -m 555 $< $(INSTALL_SHRLIB)
ifdef SHRLIB_VERSION
@$(RM) $(@:%.$(SHRLIB_VERSION)=%)
ln -s $< $(@:%.$(SHRLIB_VERSION)=%)
endif # SHRLIB_VERSION
ifneq ($(INSTALL_TCLLIB),$(INSTALL_BIN))
$(INSTALL_TCLLIB)/%: %
@echo "Installing Tcl library $@"
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
$(INSTALL_TCLLIB)/%: ../%
@echo "Installing Tcl library $@"
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
endif
$(INSTALL_CONFIG)/%: %
@echo "Installing config file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_CONFIG)/%: ../%
@echo "Installing config file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : %
@echo "Installing man file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(addsuffix /%,$(MAN_DIRECTORY_TARGETS)) : ../%
@echo "Installing man file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_INCLUDE)/%: %
@echo "Installing include file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_INCLUDE)/%: ../%
@echo "Installing include file $@"
@$(INSTALL) -d -m 644 $< $(@D)
#$(INSTALL_INCLUDE)/os/%: %
# @echo "Installing os include file $@"
# @$(INSTALL) -d -m 644 $< $(@D)
#
#$(INSTALL_INCLUDE)/os/%: ../%
# @echo "Installing os include file $@"
# @$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_DOC)/%: %
@echo "Installing doc $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
$(INSTALL_DOC)/%: ../%
@echo "Installing doc $@"
@$(INSTALL) -d -m 644 $< $(INSTALL_DOC)
$(INSTALL_HTML)/$(HTMLS_DIR)/%: %
@echo "Installing html $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_HTML)/$(HTMLS_DIR)/%: ../%
@echo "Installing html $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: ../%
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)/%: %
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(@D)
.PRECIOUS: %.o %.c
-include DEPENDS
.PHONY:: all inc depends build install clean rebuild buildInstall binInstalls \
iocBinInstalls
ifneq (,$(wildcard ../base.dbd))
$(DBDNAME): ../base.dbd $(RECTYPES:%.h=../%.dbd)
else
$(DBDNAME): $(RECTYPES:%.h=../%.dbd)
endif
else
all::
buildInstall ::
build ::
inc::
rebuild::
install::
clean::
endif #BUILD
endif #T_A
# EOF RULES.Host