Initial release of the VFD code
[de200vfd.git] / Makefile.rules
blobe271b0d501e9efe40f78f06898f82293c1783313
1 #******************************************************************************
2 #  DDD & DVDVDVD                                                XROMA PROJECT  
3 #  XROMA: Makefile.rules
4 #******************************************************************************
6 #  File Description:
8 #   Common rules for building the targets
17 #******************************************************************************
18 #This document is distributed under the Xroma public license.
19 #See the accompanying license file for information.
20 #******************************************************************************
21 #* File       : $RCSFile$
22 #* Revision   : $Revision: 1.7 $
23 #* Date       : $Date: 2001/11/26 06:07:06 $
24 #******************************************************************************
26 CPPFLAGS=       $(DEFINES) $(DEFINES_$(BUILDENV))       \
27                 $(DEFINES_all) $(DEFINES_$(TARGET))     \
28                 $(INCLUDES) -I$(BROOT)
29 CFLAGS=         $(CPPFLAGS) $(CFLAGS_$(TARGET)) $(CFLAGS_all)
30 CXXFLAGS=       $(CPPFLAGS) $(CXXFLAGS_$(TARGET)) $(CXXFLAGS_all)
31 LDFLAGS=        $(LDFLAGS_$(TARGET)) $(LDFLAGS_all)
33 ifndef DIR
34 DIR=            $(shell pwd | (cd ./$(BROOT); sed -e s@$$(pwd)@@g))
35 endif
36 OBJROOT=        $(BROOT)obj/$(BUILDENV)/$(TARGET)
37 OBJDIR=         $(OBJROOT)$(DIR)
38 INCDIR=         $(BROOT)obj/$(BUILDENV)/include
39 OBJECTS=        $(SOURCES:%=$(OBJDIR)/%.o)
40 OBJLIBRARY=     $(LIBRARY:%=$(OBJROOT)/%)
41 OBJDRIVER=      $(DRIVER:%=$(OBJROOT)/%)
42 OBJEXE=         $(PRODUCT)
43 OBJLIBRARIES=   $(LIBRARIES:%.a=$(OBJROOT)/%.a)
44 OBJLIBDEP=      $(filter %.a, $(OBJLIBRARIES))
45 MZINFO_DEPS=    $(OBJLIBDEP)
46 GARBAGE=        *~ *.bak
48 # Default target
49 all: debug
51 everything: hello recurse build goodbye
53 debug opt:
54         @$(MAKE) everything TARGET=$@ RECURSE=everything
56 clean: dirclean
57         rm -rf $(BROOT)obj
59 dirclean:
60         rm -f $(GARBAGE) $(TOCLEAN)
61         $(MAKE) recurse RECURSE=dirclean
63 install: all
65 startup: clean all
67 depend: $(OBJDIR)/Makefile.depend
69 hello:
70         @echo ----------- Making $(TARGET) in $$(pwd) ------------
71 goodbye:
72         @echo ---------- Done with $(TARGET) in $$(pwd) ----------
74 build:                                                                  \
75         prebuild                                                        \
76         depend                                                          \
77         $(OBJDIR) $(OBJECTS) $(OBJLIBRARY) $(OBJDRIVER) $(OBJEXE)       \
78         postbuild
80 # "Hooks" for pre and post build steps
81 prebuild:
82 postbuild:
85 #------------------------------------------------------------------------------
86 #  General rules
87 #------------------------------------------------------------------------------
89 recurse: $(SUBDIRS:%=%.recurse)
90 %.recurse:
91         @cd $*;                                                             \
92         $(MAKE) BROOT=../$(BROOT) DIR=$(DIR)/$* TARGET=$(TARGET) $(RECURSE)
94 top-%:
95         cd ./$(BROOT); $(MAKE) $*
97 v-%:
98         $(MAKE) $* V= R= H=
99 s-%:
100         $(MAKE) -s --no-print-directory $* 2> build.err
101 l-%:
102         $(MAKE) v-$* 2>&1 | tee buildlog
104 #------------------------------------------------------------------------------
105 #  Product generation rules
106 #------------------------------------------------------------------------------
108 V=@if [ ! -z "$<" ]; then echo Compiling $<; fi;
109 R=@if [ ! -z "$@" ]; then echo Building $@; fi;
112 $(OBJDIR):
113         $R mkdir -p $(OBJDIR)
116 $(OBJEXE) exe: $(OBJECTS) $(OBJLIBDEP)
117         $R $(LD) $(LDFLAGS) $(LDFLAGS_$(OBJEXE))                \
118                  $(OBJECTS) -L$(OBJROOT) $(OBJLIBRARIES) -o $(OBJEXE)
120 $(OBJLIBRARY) lib: $(OBJECTS)
121         $R $(AR) -r $@ $(OBJECTS); $(RANLIB) $@
123 $(OBJDRIVER) dvr: $(OBJECTS) $(OBJLIBDEP)
124         $R $(DRIVER_LD) $@ $(LDFLAGS) $(LDFLAGS_$*)             \
125                  $(OBJECTS) -L$(OBJROOT) $(OBJLIBRARIES)
128 #------------------------------------------------------------------------------
129 #  Inference rules
130 #------------------------------------------------------------------------------
132 $(OBJDIR)/%.c.o: %.c
133         $V $(CC) $(CFLAGS) $(CPPFLAGS_$*) $(CFLAGS_$*) -o $@ -c $<
134 $(OBJDIR)/%.C.o: %.C
135         $V $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -o $@ -c $<
136 $(OBJDIR)/%.cpp.o: %.cpp
137         $V $(CXX) $(CXXFLAGS) $(CPPFLAGS_$*) $(CXXFLAGS_$*) -o $@ -c $<
138 $(MZINFO).mzinfo.cpp: # $(MZINFO_HEADER) $(MZINFO_SOURCES) $(MZINFO_DEPS)
139         $R $(TPP)                                       \
140                 -t $(MZINFO)                            \
141                 -i $(MZINFO).mzinfo.h                   \
142                 -o $(MZINFO).mzinfo.cpp                 \
143                 $(MZINFO_DEPS:%=-e %)                   \
144                 $(MZINFO_HEADERS) -x $(MZINFO_SOURCES)
146 # Dependencies generation
147 CAT_DEPEND=sed                                                          \
148         -e 's@$(@:.mkdepend=).o:@$(OBJDIR)/$(@:.mkdepend=).o:@g'        \
149         -e 's@$*.o:@$(OBJDIR)/$(@:.mkdepend=).o:@g'                     \
150         < _tmp.depend >> $(OBJDIR)/_Makefile.depend &&                  \
151         rm -f _tmp.depend
152 ifdef TARGET
153 $(OBJDIR)/Makefile.depend: $(SOURCES)
154         $R mkdir -p $(OBJDIR); touch $@; $(MAKE) TARGET=$(TARGET) mkdepend
155 else
156 $(OBJDIR)/Makefile.depend:
157 endif
158 mkdepend: predepend $(SOURCES:%=%.mkdepend)
159         @touch $(OBJDIR)/_Makefile.depend;                      \
160         mv $(OBJDIR)/_Makefile.depend $(OBJDIR)/Makefile.depend
161 predepend:
162         @echo > $(OBJDIR)/_Makefile.depend
163 %.c.mkdepend:
164         $V $(CC_DEPEND) $*.c && $(CAT_DEPEND)
165 %.C.mkdepend:
166         $V $(CXX_DEPEND) $*.C && $(CAT_DEPEND)
167 %.cpp.mkdepend:
168         $V $(CXX_DEPEND) $*.cpp && $(CAT_DEPEND)
169 %.S.mkdepend:
170         $V $(AS_DEPEND) $*.S && $(CAT_DEPEND)
171 %.s.mkdepend:
172         $V $(AS_DEPEND) $*.s && $(CAT_DEPEND)
173 %.mzinfo.cpp.mkdepend:
174         @echo No dependency for $*.mzinfo.cpp
175 %.mzinfo.h.mkdepend:
176         @echo No dependency for $*.mzinfo.h
179 # Include dependencies from current directory
180 ifdef SOURCES
181 -include $(OBJDIR)/Makefile.depend
182 endif