# Emacs should use -*- Makefile -*- mode. ################################################# # # the user can specify the following targets # # install_inc:: # installs the include files # # default:: # # the user must define the following: # # # TARGET_TO_MAKE # # BIN_OR_LIB = BIN or LIB # # TRUESRC # # DEPENDINCLUDE # # TRUEINCLUDES # # OTHERFILES # # LIBOBJ # BINOBJ # # LIBS # # SABER_FILES # ################################################# .PHONY: default install install_devel install_inc install_target clean default:: install:: install_devel:: .PHONY: testbuild testrun testbuild: $(TESTPROGS) testrun: $(TESTPROGS:%=%.testrun) # The target specific variable can be set to control testrun: # To skip testrun: # %.testrun: DO_TESTRUN=no # To give arguments to the command # %.testrun: TESTRUN_ARGS=arglist %.testrun: % if test "$(DO_TESTRUN)" != no; then \ echo ----------- Running $< $(TESTRUN_ARGS) -----------; \ if test -f $(SRCDIR)/$<.out; then \ ./$< $(TESTRUN_ARGS) > $<.out.testrun 2>&1 || exit 1; \ diff -u $<.out.testrun $(SRCDIR)/$<.out || exit 1; \ else \ ./$< $(TESTRUN_ARGS) || exit 1; \ fi \ else \ echo ----------- Skipping run of $< -----------; \ fi ifeq ($(BIN_OR_LIB),LIB) ifeq ($(TMPLINLIB),yes) $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ) /bin/rm -f $@ $(AR) $(ARFLAGS) $@ $^ $(wildcard $(TMPLREPO)/*.o) $(RANLIB) $@ $(TOPDIR)/lib/$(TARGET_TO_MAKE).la: $(LIBOBJ) $(LTLINK) $(CXX) -o $@ $^ $(wildcard $(TMPLREPO)/*.o) $(LTLINKLIBOPTS) else ifeq ($(TMPLINST),yes) SCLIBS := $(shell $(LISTLIBS) $(INCLUDE) $(SRCDIR)/LIBS.h) SCLIBSOTHER := $(SCLIBS:$(TARGET_TO_MAKE).$(LIBSUF)=) SCLIBSEXIST := $(wildcard $(SCLIBSOTHER:%=$(TOPDIR)/lib/%)) $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ) $(SCLIBSEXIST) @echo "Doing template instantiations (expect errors)." -$(LD) $(LDFLAGS) -o a.out.tmplinst $^ $(SYSLIBS) 2> /dev/null /bin/rm -f a.out.tmplinst @echo "Finished template instantiations (errors were expected)." /bin/rm -f $@ $(AR) $(ARFLAGS) $@ $(LIBOBJ) $(RANLIB) $@ else $(TOPDIR)/lib/$(TARGET_TO_MAKE).a: $(LIBOBJ) /bin/rm -f $@ $(AR) $(ARFLAGS) $@ $(LIBOBJ) $(RANLIB) $@ endif $(TOPDIR)/lib/$(TARGET_TO_MAKE).la: $(LIBOBJ) $(LTLINK) $(CXX) -o $@ $^ $(LTLINKLIBOPTS) endif default:: $(TOPDIR)/lib/$(TARGET_TO_MAKE).$(LIBSUF) ifneq ($(ENABLESHARED),yes) install_devel:: install_inc install_target install:: endif ifeq ($(ENABLESHARED),yes) install_devel:: install_inc install:: install_target endif install_inc:: $(INSTALL) $(INSTALLDIROPT) $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%) -$(INSTALL) $(INSTALLLIBOPT) $(SRCDIR)/*.h $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%) -$(INSTALL) $(INSTALLLIBOPT) *.h $(installroot)$(includedir)/$(SRCDIR:$(SRCTOPDIR)/src/lib/%=%) install_target:: $(TOPDIR)/lib/$(TARGET_TO_MAKE).$(LIBSUF) $(INSTALL) $(INSTALLDIROPT) $(installroot)$(libdir) $(LTINST) $(INSTALL) $(INSTALLLIBOPT) $< $(installroot)$(libdir) endif ifeq ($(BIN_OR_LIB),BIN) $(TARGET_TO_MAKE): $(BINOBJ) $(LIBS) $(LD) $(LDFLAGS) $^ -o $(@F) $(SYSLIBS) install_devel:: install:: install_target install_target:: $(TARGET_TO_MAKE) $(INSTALL) $(INSTALLDIROPT) $(installroot)$(bindir) $(LTINST) $(INSTALL) $(INSTALLBINOPT) $(TARGET_TO_MAKE) $(installroot)$(bindir) endif %.$(OBJSUF): %.c $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(OUTPUT_OPTION) %.lo: %.c $(LTCOMP) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(OUTPUT_OPTION) ifneq ($(OBJSUF),lo) %.$(OBJSUF): %.f $(FC) $(FFLAGS) -c $< $(OUTPUT_OPTION) %.$(OBJSUF): %.C $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION) %.$(OBJSUF): %.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION) endif %.lo: %.C $(LTCOMP) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION) %.lo: %.cc $(LTCOMP) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $(OUTPUT_OPTION) %.lo: %.f $(LTCOMP) $(FC) $(FFLAGS) -c $< $(OUTPUT_OPTION) # # cleans # clean:: oclean targetclean dclean miscclean distclean:: oclean targetclean dclean genclean miscclean miscclean:: -rm -f *~ oclean:: -rm -rf *.o $(TMPLREPO) cxx_tmpl_repo ti_files *.lo -rm -rf *.rpo -rm -rf .libs dclean:: -rm -f *.d genclean:: ifdef GENINC -rm -f $(GENINC) endif ifdef GENSRC -rm -f $(GENSRC) endif targetclean:: ifdef TARGET_TO_MAKE ifeq ($(BIN_OR_LIB),BIN) -rm -f $(TARGET_TO_MAKE) endif ifeq ($(BIN_OR_LIB),LIB) -rm -f $(TARGET_TO_MAKE).a endif endif targetclean:: -rm -f $(TESTPROGS) $(TESTPROGS:%=%.out.testrun) testclean:: /bin/rm -f $(TESTPROGS) $(TESTPROGS:%=%.out.testrun) # # dependencies # ifneq ($(CCDEPENDSUF),none) %.d: %.c $(CCDEPEND) $(CCDEPENDFLAGS) -c $(CPPFLAGS) $(CFLAGS) $< > /dev/null sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' < $(*F).$(CCDEPENDSUF) > $(@F) /bin/rm -f $(*F).$(CCDEPENDSUF) else %.d: %.c $(CCDEPEND) $(CCDEPENDFLAGS) -c $(CPPFLAGS) $(CFLAGS) $< | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' > $(@F) endif ifneq ($(CXXDEPENDSUF),none) %.d: %.cc $(CXXDEPEND) $(CXXDEPENDFLAGS) -c $(CPPFLAGS) $(CXXFLAGS) $< > /dev/null sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' < $(*F).$(CXXDEPENDSUF) > $(@F) /bin/rm -f $(*F).$(CXXDEPENDSUF) else %.d: %.cc $(CXXDEPEND) $(CXXDEPENDFLAGS) -c $(CPPFLAGS) $(CXXFLAGS) $< | sed 's/^$*.o/$*.$(OBJSUF) $*.d/g' > $(@F) endif # # sometimes it's nice to get assembler source # %.s: %.c $(CC) $(CPPFLAGS) $(CFLAGS) -S $< %.s: %.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -S $< # # sometimes it's nice to get preprocessed source # %.i: %.c $(CC) $(CPPFLAGS) $(CFLAGS) -E $< -o $@ %.ii: %.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -E $< -o $@ values:: @echo TOPDIR=$(TOPDIR) @echo SRCDIR=$(SRCDIR) @echo VPATH=$(VPATH) @echo BIN_OR_LIB=$(BIN_OR_LIB) @echo TARGET_TO_MAKE=$(TARGET_TO_MAKE) ifdef LIBS @echo LIBS=$(LIBS) endif ifeq ($(BIN_OR_LIB),LIB) @echo LIBOBJ=$(LIBOBJ) endif ifeq ($(BIN_OR_LIB),BIN) @echo BINOBJ=$(BINOBJ) endif # # rules for cca component code # $(GEN_SRCS): .babel-stamp @if test -f $@; then \ touch $@; \ else \ rm -f .babel-stamp; \ $(MAKE) .babel-stamp; \ fi $(EXTRA_CXX_SRCS): .babel-stamp .babel-stamp: $(SIDL_FILES) @rm -f .babel-stamp .babel-temp; touch .babel-temp for i in $(IMPLHDRS) $(IMPLSRCS) $(EXTRA_CXX_SRCS) $(EXTRA_INCLUDES); \ do \ if test ! -e $${i}; then \ ln -s $(SRCDIR)/$${i}; \ fi; \ done $(INSTALL) $(INSTALLDIROPT) $(REPO) /bin/rm -f $(REPO)/MPQC* $(BABEL) -e'^sidl.*' -e'^gov.*' \ -R$(CCA_CHEM_REPO) -R$(CCA_SPEC_BABEL_SHARE)/xml \ -R$(CCAFE_SHARE)/xml --text=xml -o$(REPO) $(SIDL_FILES) $(BABEL) $(BABEL_ARGS) $(BABEL_PACKAGES) $(BABEL_ENUMS) \ $(BABEL_CLASSES) @mv -f .babel-temp $@ clean-components: oclean targetclean dclean miscclean rm -f $(IORHDRS) $(IORSRCS) $(STUBHDRS) $(STUBSRCS) \ $(SKELHDRS) $(SKELSRCS) rm -f babel.make .babel-stamp for i in $(IMPLHDRS) $(IMPLSRCS) $(EXTRA_CXX_SRCS) $(EXTRA_INCLUDES); \ do \ if test -L $${i}; then \ /bin/rm $${i}; \ fi; \ done