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 |
ifeq ($(MACH),) |
14 |
MACH = $(JSOC_MACHINE) |
15 |
endif |
16 |
|
17 |
OBJDIR := _$(MACH) |
18 |
PROJOBJDIR := $(OBJDIR)/proj |
19 |
|
20 |
all: $(PROJOBJDIR) $(OBJDIR) |
21 |
|
22 |
# Define the rules to build in the target subdirectories. |
23 |
# |
24 |
MAKETARGET = $(MAKE) --no-print-directory -C $@ -f $(WORKINGDIR)/Makefile \ |
25 |
SRCDIR=$(WORKINGDIR) $(MAKECMDGOALS) |
26 |
|
27 |
.PHONY: $(PROJOBJDIR) $(OBJDIR) |
28 |
|
29 |
# Create the project-specific directories too, if they exist. |
30 |
# This supplementary target.mk file is built by the configure script, using either |
31 |
# configsdp.txt (for a JSOC-SDP checkout) or a custom configuration file as input. |
32 |
-include $(WORKINGDIR)/$(LOCALIZATIONDIR)/target.mk |
33 |
|
34 |
$(OBJDIR): |
35 |
+@[ -d bin/$(MACH) ] || mkdir -p bin/$(MACH) |
36 |
+@[ -d lib/$(MACH) ] || mkdir -p lib/$(MACH) |
37 |
+@[ -d $@ ] || mkdir -p $@ |
38 |
+@[ -d $@/base/drms/apps ] || mkdir -p $@/base/drms/apps |
39 |
+@[ -d $@/base/drms/libs/api/client ] || mkdir -p $@/base/drms/libs/api/client |
40 |
+@[ -d $@/base/drms/libs/api/client_fpic ] || mkdir -p $@/base/drms/libs/api/client_fpic |
41 |
+@[ -d $@/base/drms/libs/api/server ] || mkdir -p $@/base/drms/libs/api/server |
42 |
+@[ -d $@/base/drms/libs/main/c ] || mkdir -p $@/base/drms/libs/main/c |
43 |
+@[ -d $@/base/drms/libs/main/f ] || mkdir -p $@/base/drms/libs/main/f |
44 |
+@[ -d $@/base/drms/libs/main/idl ] || mkdir -p $@/base/drms/libs/main/idl |
45 |
+@[ -d $@/base/drms/libs/meta ] || mkdir -p $@/base/drms/libs/meta |
46 |
+@[ -d $@/base/export/apps ] || mkdir -p $@/base/export/apps |
47 |
+@[ -d $@/base/export/libs/util ] || mkdir -p $@/base/export/libs/util |
48 |
+@[ -d $@/base/export/libs/exportDRMS ] || mkdir -p $@/base/export/libs/exportDRMS |
49 |
+@[ -d $@/base/libs/cmdparams/test ] || mkdir -p $@/base/libs/cmdparams/test |
50 |
+@[ -d $@/base/libs/db/client ] || mkdir -p $@/base/libs/db/client |
51 |
+@[ -d $@/base/libs/db/client_fpic ] || mkdir -p $@/base/libs/db/client_fpic |
52 |
+@[ -d $@/base/libs/db/server ] || mkdir -p $@/base/libs/db/server |
53 |
+@[ -d $@/base/libs/defs/fpic ] || mkdir -p $@/base/libs/defs/fpic |
54 |
+@[ -d $@/base/libs/dstruct/fpic ] || mkdir -p $@/base/libs/dstruct/fpic |
55 |
+@[ -d $@/base/libs/json ] || mkdir -p $@/base/libs/json |
56 |
+@[ -d $@/base/libs/inthandles ] || mkdir -p $@/base/libs/inthandles |
57 |
+@[ -d $@/base/libs/qdecoder/md5 ] || mkdir -p $@/base/libs/qdecoder/md5 |
58 |
+@[ -d $@/base/libs/threads/fpic ] || mkdir -p $@/base/libs/threads/fpic |
59 |
+@[ -d $@/base/libs/timeio/fpic ] || mkdir -p $@/base/libs/timeio/fpic |
60 |
+@[ -d $@/base/libs/misc/fpic ] || mkdir -p $@/base/libs/misc/fpic |
61 |
+@[ -d $@/base/libs/fitsrw/fpic ] || mkdir -p $@/base/libs/fitsrw/fpic |
62 |
+@[ -d $@/base/libs/errlog ] || mkdir -p $@/base/libs/errlog |
63 |
+@[ -d $@/base/local/libs/dsds ] || mkdir -p $@/base/local/libs/dsds |
64 |
+@[ -d $@/base/local/libs/soi ] || mkdir -p $@/base/local/libs/soi |
65 |
+@[ -d $@/base/sums/apps ] || mkdir -p $@/base/sums/apps |
66 |
+@[ -d $@/base/sums/libs/api ] || mkdir -p $@/base/sums/libs/api |
67 |
+@[ -d $@/base/sums/libs/pg ] || mkdir -p $@/base/sums/libs/pg |
68 |
+@[ -d $@/base/util/apps ] || mkdir -p $@/base/util/apps |
69 |
+@[ -d $@/proj/example/apps ] || mkdir -p $@/proj/example/apps |
70 |
+@[ -d $@/proj/myproj/apps ] || mkdir -p $@/proj/myproj/apps |
71 |
+@[ -d $@/proj/cookbook ] || mkdir -p $@/proj/cookbook |
72 |
+@$(MAKETARGET) |
73 |
|
74 |
# These rules keep make from trying to use the match-anything rule below to |
75 |
# rebuild the makefiles--ouch! Obviously, if you don't follow my convention |
76 |
# of using a `.mk' suffix on all non-standard makefiles you'll need to change |
77 |
# the pattern rule. |
78 |
# |
79 |
Makefile : ; |
80 |
%.mk :: ; |
81 |
|
82 |
|
83 |
# Anything we don't know how to build will use this rule. The command is a |
84 |
# do-nothing command, but the prerequisites ensure that the appropriate |
85 |
# recursive invocations of make will occur. |
86 |
# |
87 |
% :: $(PROJOBJDIR) $(OBJDIR) ; : |
88 |
|
89 |
|
90 |
# The clean rule is best handled from the source directory: since we're |
91 |
# rigorous about keeping the target directories containing only target files |
92 |
# and the source directory containing only source files, `clean' is as trivial |
93 |
# as removing the target directories! |
94 |
# |
95 |
.PHONY: clean |
96 |
clean: |
97 |
rm -rf $(OBJDIR); rm -rf bin/$(MACH); rm -rf lib/$(MACH) |
98 |
|