blob: 2efcc08cf1c2a931831678a60016167bce0a0fd2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# make.configuration.deps file for thorn Formaline -*-Makefile-*-
# $Header$
# Create a tarball of the source code whenever this thorn is linked
# into an executable
TARBALL_DIR = $(SCRATCH_BUILD)
CACTUSLIBLINKLINE += $(TARBALL_DIR)/cactus-source.a
$(EXEDIR)$(DIRSEP)$(EXE): $(TARBALL_DIR)/cactus-source.a
$(TARBALL_DIR)/cactus-source.a: $(TARBALL_DIR)/cactus-meta-source.o $(TARBALL_DIR)/cactus-flesh-source.o $(patsubst %,$(TARBALL_DIR)/cactus-thorn-source-%.o,$(notdir $(THORNS)))
$(AR) $(ARFLAGS) $@ $^
@echo $(DIVIDER)
## Cache optimisation:
## Build the thorns' tarballs already while the thorns are compiled
## (does not work)
#
#$(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)%$(LIBNAME_SUFFIX): $(TARBALL_DIR)/cactus-thorn-source-%.o
# Meta information
$(TARBALL_DIR)/cactus-meta-source.o: $(TARBALL_DIR)/cactus-meta-source.c
$(CC) $(CFLAGS) -c -o $@ $^
$(TARBALL_DIR)/cactus-meta-source.c: $(TARBALL_DIR)/cactus-flesh-source.c $(patsubst %,$(TARBALL_DIR)/cactus-thorn-source-%.c,$(notdir $(THORNS)))
$(TARBALL_DIR)/makemetablob Cactus $(notdir $(THORNS)) > $@
# Flesh
$(TARBALL_DIR)/cactus-flesh-source.o: $(TARBALL_DIR)/cactus-flesh-source.c
@echo "Creating tarball for the flesh"
$(CC) $(CFLAGS) -c -o $@ $^
$(TARBALL_DIR)/cactus-flesh-source.c: $(TARBALL_DIR)/cactus-flesh-source.tar.gz
$(TARBALL_DIR)/makeblob '' Cactus < $< > $@
$(TARBALL_DIR)/cactus-flesh-source.tar.gz: $(TARBALL_DIR)/cactus-flesh-source.files
cd $(CCTK_HOME) && \
tar czf $@ -T $<
# This dependency means that the tarball for a thorn is only updated
# if the thorn is actually recompiled. This does not catch changes to
# files that do not influence the executable, but that is okay.
$(TARBALL_DIR)/cactus-flesh-source.files: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)Cactus$(LIBNAME_SUFFIX)
cd $(CCTK_HOME) && \
find CONTRIBUTORS COPYRIGHT Makefile lib src \
configs/$(notdir $(TOP))/config-info \
configs/$(notdir $(TOP))/ThornList \
-name '.*' -prune -o \
-name '*~' -prune -o \
-not -type d \
-print > $@
# Thorns
$(TARBALL_DIR)/cactus-thorn-source-%.o: $(TARBALL_DIR)/cactus-thorn-source-%.c
@echo "Creating tarball for thorn $(@:$(TARBALL_DIR)/cactus-thorn-source-%.o=%)"
$(CC) $(CFLAGS) -c -o $@ $^
$(TARBALL_DIR)/cactus-thorn-source-%.c: $(TARBALL_DIR)/cactus-thorn-source-%.tar.gz
$(TARBALL_DIR)/makeblob $(patsubst %/,%,$(dir $(filter %/$(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%),$(THORNS)))) $(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%) < $< > $@
$(TARBALL_DIR)/cactus-thorn-source-%.tar.gz: $(TARBALL_DIR)/cactus-thorn-source-%.files
cd $(CCTK_HOME) && \
tar czf $@ -T $<
# This dependency means that the tarball for a thorn is only updated
# if the thorn is actually recompiled. This does not catch changes to
# files that do not influence the executable, but that is okay.
$(TARBALL_DIR)/cactus-thorn-source-%.files: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)%$(LIBNAME_SUFFIX)
cd $(CCTK_HOME) && \
find arrangements/$(filter %/$(@:$(TARBALL_DIR)/cactus-thorn-source-%.files=%),$(THORNS)) \
-path 'arrangements/*/*/doc' -prune -o \
-path 'arrangements/*/*/par' -prune -o \
-path 'arrangements/*/*/test' -prune -o \
-name '.*' -prune -o \
-name '*~' -prune -o \
-not -type d \
-print > $@
## 1. Create a list of files that should be in the tarball
## 2. Create the tarball
## 3. Use the makeblob utility (from this thorn; see make.code.deps)
## to create C source code from the tarball
## 4. Compile C code and create an archive
#
#.PHONY: make-tarball
#make-tarball:
# @echo "Creating source tarball..." && \
# cd $(CCTK_HOME) && \
# files="CONTRIBUTORS COPYRIGHT Makefile" && \
# dirs="lib src" && \
# thorns="$(THORNS:%=arrangements/%)" && \
# filelist=$(TARBALL_DIR)/source-file-list && \
# find $$files $$dirs $$thorns \
# -path 'arrangements/*/*/doc' -prune \
# -o -path 'arrangements/*/*/test' -prune \
# -o -path 'arrangements/*/*/par' -prune \
# -o -print > $$filelist && \
# echo "Adding" `cat $$filelist | wc -l` "files..." && \
# tar czf "$(TARBALL_DIR)/cactus-source.tar.gz" \
# --no-recursion -T $$filelist && \
# echo "Created tarball with" `cat $(TARBALL_DIR)/cactus-source.tar.gz | wc -c` "bytes..." && \
# cd $(TARBALL_DIR) && \
# rm -rf cactus-source && \
# mkdir cactus-source && \
# cd cactus-source && \
# ../makeblob < ../cactus-source.tar.gz && \
# $(CC) $(CFLAGS) -c *.c && \
# cd .. && \
# $(AR) $(ARFLAGS) cactus-source.a cactus-source/*.o && \
# echo "Added tarball to executable." && \
# echo $(DIVIDER)
|