1 arta 1.1 # This is used to jump from a source directory to a target directory.
2
3 .SUFFIXES:
4
5
6 # Find the target directory(ies).
7 #
8 ifndef JSOC_MACHINE
9 JSOC_MACHINE := $(shell build/jsoc_machine.csh)
10 export JSOC_MACHINE
11 endif
12
13 OBJDIR := _$(JSOC_MACHINE)
14 PROJOBJDIR := $(OBJDIR)/src/proj
15
16 all: $(PROJOBJDIR) $(OBJDIR)
17
18 # Define the rules to build in the target subdirectories.
19 #
20 MAKETARGET = $(MAKE) --no-print-directory -C $@ -f $(CURDIR)/Makefile \
21 SRCDIR=$(CURDIR) $(MAKECMDGOALS)
22 arta 1.1
23 .PHONY: $(PROJOBJDIR) $(OBJDIR)
24
25 # Create the project-specific directories too, if they exist.
26 -include $(CURDIR)/src/proj/target.mk
27
28 $(OBJDIR):
29 +@[ -d bin/$(JSOC_MACHINE) ] || mkdir -p bin/$(JSOC_MACHINE)
30 +@[ -d lib/$(JSOC_MACHINE) ] || mkdir -p lib/$(JSOC_MACHINE)
31 +@[ -d $@ ] || mkdir -p $@
32 +@[ -d $@/src/base/drms/apps ] || mkdir -p $@/src/base/drms/apps
33 +@[ -d $@/src/base/drms/libs/api/client ] || mkdir -p $@/src/base/drms/libs/api/client
34 +@[ -d $@/src/base/drms/libs/api/client_fpic ] || mkdir -p $@/src/base/drms/libs/api/client_fpic
35 +@[ -d $@/src/base/drms/libs/api/server ] || mkdir -p $@/src/base/drms/libs/api/server
36 +@[ -d $@/src/base/drms/libs/main/c ] || mkdir -p $@/src/base/drms/libs/main/c
37 +@[ -d $@/src/base/drms/libs/main/f ] || mkdir -p $@/src/base/drms/libs/main/f
38 +@[ -d $@/src/base/drms/libs/main/idl ] || mkdir -p $@/src/base/drms/libs/main/idl
39
40 +@[ -d $@/src/base/libs/cmdparams/fpic ] || mkdir -p $@/src/base/libs/cmdparams/fpic
41 +@[ -d $@/src/base/libs/db/client ] || mkdir -p $@/src/base/libs/db/client
42 +@[ -d $@/src/base/libs/db/client_fpic ] || mkdir -p $@/src/base/libs/db/client_fpic
43 arta 1.1 +@[ -d $@/src/base/libs/db/server ] || mkdir -p $@/src/base/libs/db/server
44 +@[ -d $@/src/base/libs/dstruct/fpic ] || mkdir -p $@/src/base/libs/dstruct/fpic
45 +@[ -d $@/src/base/libs/ricecomp/fpic ] || mkdir -p $@/src/base/libs/ricecomp/fpic
46 +@[ -d $@/src/base/libs/inthandles ] || mkdir -p $@/src/base/libs/inthandles
47 +@[ -d $@/src/base/libs/threads/fpic ] || mkdir -p $@/src/base/libs/threads/fpic
48 +@[ -d $@/src/base/libs/timeio/fpic ] || mkdir -p $@/src/base/libs/timeio/fpic
49 +@[ -d $@/src/base/libs/misc/fpic ] || mkdir -p $@/src/base/libs/misc/fpic
50 +@[ -d $@/src/base/local/libs/dsds ] || mkdir -p $@/src/base/local/libs/dsds
51 +@[ -d $@/src/base/local/libs/soi ] || mkdir -p $@/src/base/local/libs/soi
52 +@[ -d $@/src/base/sums/apps ] || mkdir -p $@/src/base/sums/apps
53 +@[ -d $@/src/base/sums/libs/api ] || mkdir -p $@/src/base/sums/libs/api
54 +@[ -d $@/src/base/sums/libs/pg ] || mkdir -p $@/src/base/sums/libs/pg
55 +@[ -d $@/src/base/util/apps ] || mkdir -p $@/src/base/util/apps
56 +@$(MAKETARGET)
57
58 # These rules keep make from trying to use the match-anything rule below to
59 # rebuild the makefiles--ouch! Obviously, if you don't follow my convention
60 # of using a `.mk' suffix on all non-standard makefiles you'll need to change
61 # the pattern rule.
62 #
63 Makefile : ;
64 arta 1.1 %.mk :: ;
65
66
67 # Anything we don't know how to build will use this rule. The command is a
68 # do-nothing command, but the prerequisites ensure that the appropriate
69 # recursive invocations of make will occur.
70 #
71 % :: $(PROJOBJDIR) $(OBJDIR) ; :
72
73
74 # The clean rule is best handled from the source directory: since we're
75 # rigorous about keeping the target directories containing only target files
76 # and the source directory containing only source files, `clean' is as trivial
77 # as removing the target directories!
78 #
79 .PHONY: clean
80 clean:
81 rm -rf $(OBJDIR); rm -rf bin/$(JSOC_MACHINE); rm -rf lib/$(JSOC_MACHINE)
82
|