Files
pcas/configure/RULES_BUILD
2004-01-15 22:05:38 +00:00

402 lines
9.5 KiB
Plaintext

#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
#
# Rules for making things specified in Makefile
#
# we are in O.$(OS_CLASS), but most sources are one dir above:
#
ifndef BASE_RULES_BUILD
BASE_RULES_BUILD=1
vpath %.c $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.cc $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.cpp $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.C $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.rc $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.h $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.skel.static $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.y $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.l $(USR_VPATH) $(ALL_SRC_DIRS)
#---------------------------------------------------------------
include $(CONFIG)/CONFIG_ADDONS
#---------------------------------------------------------------
# Set PROD, TESTPROD, OBJS, and LIBRARY
ifeq ($(findstring Host,$(VALID_BUILDS)),Host)
LIBRARY += $(LIBRARY_HOST)
LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_HOST)
OBJS += $(OBJS_HOST)
PROD += $(PROD_HOST)
SCRIPTS += $(SCRIPTS_HOST)
TESTPROD += $(TESTPROD_HOST)
endif
ifeq ($(findstring Ioc,$(VALID_BUILDS)),Ioc)
LIBRARY += $(LIBRARY_IOC)
OBJS += $(OBJS_IOC)
PROD += $(PROD_IOC)
SCRIPTS += $(SCRIPTS_IOC)
TESTPROD += $(TESTPROD_IOC)
endif
#---------------------------------------------------------------
ifdef TEMPLATES_DIR
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)/$(TEMPLATES_DIR)
else
INSTALL_TEMPLATES_SUBDIR = $(INSTALL_TEMPLATES)
endif
#---------------------------------------------------------------
# First target
all: install
-include $(CONFIG)/RULES.Db
-include $(CONFIG)/RULES_JAVA
ifneq (,$(strip $(HDEPENDS_FILES)))
-include $(HDEPENDS_FILES)
endif
#---------------------------------------------------------------
# Create included Makefile for prod,testprod, and library targets
ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY)))
MakefileInclude: ../Makefile
@$(RM) $@
@$(PERL) $(TOOLS)/makeMakefileInclude.pl $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY) $@
-include MakefileInclude
endif # PROD, TESTPROD, LIBRARY, or LOADABLE_LIBRARY defined
#---------------------------------------------------------------
# Products and Object libraries
#
PRODTARGETS += $(PRODNAME) $(MUNCHNAME) $(CTDT_SRCS) $(CTDT_OBJS) $(NMS)
#---------------------------------------------------------------
# Libraries
#
LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) \
$(SHRLIBNAME) $(INSTALL_SHRLIBS) \
$(DLL_LINK_LIBNAME) $(INSTALL_DLL_LINK_LIBS) \
$(LOADABLE_SHRLIBNAME) $(INSTALL_LOADABLE_SHRLIBS)
#---------------------------------------------------------------
ifneq ($(CONFIG),$(TOP)/configure)
-include $(TOP)/configure/RULES_BUILD
endif
-include $(TOP)/configure/O.$(T_A)/RULES_INCLUDE
#---------------------------------------------------------------
# Main targets
install: buildInstall
buildInstall : build
rebuild: clean install
build : inc
build: $(OBJSNAME) $(LIBTARGETS) $(PRODTARGETS) $(TESTPRODNAME) \
$(TARGETS)
inc : $(COMMON_INC) $(INSTALL_INC)
buildInstall : \
$(INSTALL_SCRIPTS) $(INSTALL_PROD) $(INSTALL_MUNCHS) \
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \
$(INSTALL_OBJS) \
$(INSTALL_DOCS) \
$(INSTALL_HTMLS) \
$(INSTALL_TEMPLATE) \
$(INSTALL_CONFIGS)
ifdef BIN_INSTALLS
buildInstall : binInstalls
endif
clean::
@echo "Cleaning"
@$(RM) *.i *$(OBJ) *.a $(TESTPRODNAME) $(LIBNAME) $(SHRLIBNAME)\
$(INC) *$(RES) $(TARGETS) $(DLL_LINK_LIBNAME) $(TDS) \
*.out MakefileInclude $(LOADABLE_SHRLIBNAME) \
$(COMMON_INC) $(HDEPENDS_FILES) $(PRODTARGETS)
ifdef BAF
@$(RM) $(PROD_BAF) $(LIB_BAF) *$(BOF)
endif
# WIN95/NT source browser
#ifdef BAF
browse: $(LIB_BAF) $(PROD_BAF)
#endif
$(DIRECTORY_TARGETS) :
$(MKDIR) -p $@
#---------------------------------------------------------------
# The order of the following rules is
# VERY IMPORTANT !!!!
$(TESTPRODNAME) $(PRODNAME):%$(EXE): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
@$(RM) $@
$(DEBUGCMD) $(LINK.cpp)
# object libs for R3.13 vxWorks compatibility only
$(OBJLIBNAME):%$(OBJ): $(OBJLIB_LD_OBJS)
@$(RM) $@
$(OBJLIB_LINK.cpp)
%_ctdt$(OBJ) : %_ctdt.c
@$(RM) $@
$(COMPILE.ctdt) $<
%$(OBJ): %.c
@$(HDEPENDS_CMD)
@$(RM) $@
$(COMPILE.c) $(call PATH_FILTER,$<)
%$(OBJ): %.cc
@$(HDEPENDS_CMD)
@$(RM) $@
$(COMPILE.cpp) $(call PATH_FILTER,$<) $(COMPILE_FILTER.cpp)
%$(OBJ): %.cpp
@$(HDEPENDS_CMD)
@$(RM) $@
$(COMPILE.cpp) $(call PATH_FILTER,$<) $(COMPILE_FILTER.cpp)
%$(OBJ): %.C
@$(HDEPENDS_CMD)
@$(RM) $@
$(COMPILE.cpp) $(call PATH_FILTER,$<) $(COMPILE_FILTER.cpp)
# WIN95/NT resource compiler
%$(RES): %.rc
@$(RM) $@
$(RCCMD)
# WIN95/NT source browser
%.bsc: %.sbr
@echo "building source browser archive $@"
@$(RM) $@
$(BAFCMD) $<
#
# rename the y.tab.h file only if we
# are creating it
#
ifeq ($(findstring -d, $(YACCOPT)),-d)
%.h %.c: %.y
$(RM) $*.c y.tab.c
$(RM) $*.h y.tab.h
$(YACC) $(YACCOPT) $<
$(MV) y.tab.c $*.c
$(MV) y.tab.h $*.h
else
%.c: %.y
$(RM) $*.c y.tab.c
$(YACC) $(YACCOPT) $<
$(MV) y.tab.c $*.c
endif
%.c: %.l
@$(RM) lex.yy.c
$(LEX) $(LEXOPT) $<
@$(RM) $@
$(MV) lex.yy.c $@
# Adl2dl rule
%.dl : ../%.adl
@$(RM) $@
-$(ADL2DL) $< $@
# Mangen Rule:
%.1:%
$(MANGEN) -s $<
$(MV) $(<F).nr $(<F).1
# Mangen Rule:
%.1:../%
$(MANGEN) -s $<
$(MV) $(<F).nr $(<F).1
# WIN95/NT source browser
ifdef BAF
$(LIB_BAF): $(addsuffix $(BOF),$(basename $(LIBRARY_LD_OBJS)))
@echo "Building source browser archive $@"
@$(RM) $@
$(BAFCMD) $^
endif
ifneq (,$(wildcard ../baseLIBOBJS))
$(LIBNAME): ../baseLIBOBJS
endif
# rule for lib (archive of object files) creation
$(LIBNAME): $(LIB_PREFIX)%$(LIB_SUFFIX): $(LIBRARY_OBJS)
@$(RM) $@
$(ARCMD)
ifneq ($(strip $(RANLIB)),)
$(RANLIB) $@
endif # RANLIB
$(DLL_LINK_LIBNAME):$(LIB_PREFIX)%.lib: $(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
@$(RM) $@
$(LINK.shrlib)
$(SHRLIBNAME):$(LIB_PREFIX)%$(SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
@$(RM) $@
$(LINK.shrlib)
$(LOADABLE_SHRLIBNAME):$(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
@$(RM) $@
$(LINK.loadable_shrlib)
# C++ munching for VxWorks
%.nm : %$(EXE)
@$(RM) $@
$(NM) $< > $@
%.nm : %$(OBJ)
@$(RM) $@
$(NM) $< > $@
%_ctdt.c : %.nm
@$(RM) $@
$(PERL) $(TOOLS)/munch.pl < $< > $@
$(MUNCHNAME):%.munch : %_ctdt$(OBJ) %$(EXE)
@$(RM) $@
$(LDCMD)
$(OBJLIB_MUNCHNAME):%.munch : %_ctdt$(OBJ) %$(OBJ)
@$(RM) $@
$(LDCMD)
# Ext, app and module rules
RULES_INCLUDE CONFIG_APP_INCLUDE: $(wildcard $(TOP)/configure/RELEASE*)
@$(RM) $@
$(PERL) $(TOOLS)/convertRelease.pl -h $(EPICS_HOST_ARCH) $@
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_LIBRARY) -d -m 644 $< $(INSTALL_LIB)
ifneq ($(strip $(RANLIB)),)
$(RANLIB) $@
endif # RANLIB
$(INSTALL_LIB)/%.lib: %.lib
@echo "Installing library $@"
@$(INSTALL_LIBRARY) -d -m 644 $< $(INSTALL_LIB)
$(INSTALL_SHRLIB)/lib%: lib%
@echo "Installing shared library $@"
@$(INSTALL_LIBRARY) -d -m 555 $< $(INSTALL_SHRLIB)
ifdef SHRLIB_VERSION
@$(RM) $(subst .$(SHRLIB_VERSION),,$@)
ln -s $< $(subst .$(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_LOADABLE_SHRLIBS): $(INSTALL_SHRLIB)/%: %
@echo "Installing loadable shared library $@"
@$(INSTALL_LIBRARY) -d -m 555 $< $(INSTALL_SHRLIB)
$(INSTALL_CONFIG)/%: %
@echo "Installing config file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_CONFIG)/%: ../%
@echo "Installing config file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_INCLUDE)/% : $(COMMON_DIR)/%
@echo "Installing generated generic include file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_INCLUDE)/% : %
@echo "Installing generic include file $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_INCLUDE)/os/$(OS_CLASS)/% : %
@echo "Installing os dependent 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_SUBDIR)/%: ../%
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(@D)
$(INSTALL_TEMPLATES_SUBDIR)/%: %
@echo "Installing $@"
@$(INSTALL) -d -m 644 $< $(@D)
.PRECIOUS: %.i %.o %.c %.nm %.cpp %.cc
.PRECIOUS: $(COMMON_INC)
.PHONY: all inc build install clean rebuild buildInstall binInstalls
endif # BASE_RULES_BUILD
# EOF RULES_BUILD