#************************************************************************* # 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) $( $@ %.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