-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile.general
More file actions
213 lines (193 loc) · 4.83 KB
/
Copy pathMakefile.general
File metadata and controls
213 lines (193 loc) · 4.83 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#-*- makefile -*-
# General rules
# Make: make sure to use version >= 3.82
ifndef MAKE
MAKE=make
endif
# Define variable representing space character (for use in subst calls)
SPACE_CHAR :=
SPACE_CHAR +=
# Utility programs
ifndef AWK
AWK=awk
endif
ifndef CAT
CAT=cat
endif
ifndef ZCAT
ZCAT=zcat
endif
ifndef GREP
GREP=grep
endif
ifndef GZIP
GZIP=gzip
GZIP_OPTIONS=
endif
##############################
# sbatch submission
##############################
ifndef SBATCH
SBATCH=sbatch
endif
ifndef SBATCH_OPTIONS
SBATCH_OPTIONS=
endif
##############################
# SLURM options
##############################
# SLURM account empty - required in calling Makefile
ifndef SLURM_ACCOUNT
SLURM_ACCOUNT=
endif
# SLURM time - 1h default
ifndef SLURM_TIME
SLURM_TIME=01:00:00
endif
# SLURM N nodes
ifndef SLURM_N_NODES
SLURM_N_NODES=1
endif
# Extra header info. Put everything in variable.
ifndef SLURM_EXTRA_HEADER
SLURM_EXTRA_HEADER=
endif
# Stuff to be inserted before command
ifndef SLURM_PREHOOK
SLURM_PREHOOK=
#="module load samtools\n\
#module load bwa\n\
#"
endif
# Jobname variable
ifndef SLURM_JOBNAME
SLURM_JOBNAME=
endif
# Logging
ifndef SLURM_OUT
SLURM_OUT=
endif
ifndef SLURM_ERR
SLURM_ERR=
endif
# Workdir variable
ifndef SLURM_WORKDIR
SLURM_WORKDIR=
endif
# username - there must be an easier way to get this info
ifndef SLURM_USER
$(eval SLURM_USER=$(shell echo $$USER))
endif
# Mailtype variable
ifndef SLURM_MAILTYPE
SLURM_MAILTYPE=All
endif
# Partition
ifndef SLURM_PARTITION
SLURM_PARTITION=devel
endif
# Cluster name
ifndef SLURM_CLUSTER
SLURM_CLUSTER=
endif
# Constraint
ifndef SLURM_CONSTRAINT
SLURM_CONSTRAINT=
endif
# Mailuser variable
ifndef SLURM_MAILUSER
SLURM_MAILUSER=
endif
# SLURM n cores
ifndef SLURM_N_CORES
SLURM_N_CORES=8
ifeq ($(SLURM_PARTITION),core)
SLURM_N_CORES=1
endif
endif
# SLURM command
ifndef SLURM_COMMAND
SLURM_COMMAND=
endif
# SLURM make_j option: number of parallel processes - not necessarily
# same as number of cores
ifndef SLURM_MAKE_J
SLURM_MAKE_J=1
endif
# Options to pass to make in sbatch file, e.g. -k
ifndef SLURM_MAKE_OPTIONS
SLURM_MAKE_OPTIONS=
endif
# SLURM_MODULES: list of modules to load
ifndef SLURM_MODULES
SLURM_MODULES=
endif
# extra output suffix = .sh so this rule is always run
%.sbatch:
ifeq ($(SLURM_ACCOUNT),)
echo -e No SLURM_ACCOUNT defined; exiting!
else
echo -e "#!/bin/bash -l" > $@.sh
echo -e "#SBATCH" -p $(SLURM_PARTITION) >> $@.sh
ifneq ($(SLURM_CLUSTER),)
echo -e "#SBATCH" -M $(SLURM_CLUSTER) >> $@.sh
endif
echo -e "#SBATCH" -A $(SLURM_ACCOUNT) >> $@.sh
echo -e "#SBATCH" -n $(SLURM_N_CORES) >> $@.sh
ifeq ($(SLURM_PARTITION),node)
echo -e "#SBATCH" -N $(SLURM_N_NODES) >> $@.sh
endif
echo -e "#SBATCH" -t $(SLURM_TIME) >> $@.sh
ifneq ($(SLURM_JOBNAME),)
echo -e "#SBATCH" -J $(SLURM_JOBNAME) >> $@.sh
else
echo -e "#SBATCH" -J $* >> $@.sh
endif
ifneq ($(SLURM_OUT),)
echo -e "#SBATCH" -o $(SLURM_OUT) >> $@.sh
endif
ifneq ($(SLURM_ERR),)
echo -e "#SBATCH" -e $(SLURM_ERR) >> $@.sh
endif
ifneq ($(SLURM_WORKDIR),)
echo -e "#SBATCH" -D $(SLURM_WORKDIR) >> $@.sh
endif
ifneq ($(SLURM_EXTRA_HEADER),)
echo -e $(SLURM_EXTRA_HEADER) >> $@.sh
endif
echo -e "#SBATCH --mail-type="$(SLURM_MAILTYPE) >> $@.sh
ifneq ($(SLURM_MAILUSER),)
echo -e "#SBATCH --mail-user="$(SLURM_MAILUSER) >> $@.sh
endif
ifneq ($(SLURM_CONSTRAINT),)
echo -e "#SBATCH -C" $(SLURM_CONSTRAINT) >> $@.sh
endif
echo -e "\n\n#" `date` >> $@.sh
echo -e "\n\n $(SLURM_PREHOOK) \n\n" >> $@.sh
ifneq ($(SLURM_MODULES),)
echo -e $(addprefix "module load ",$(addsuffix "\\n",$(SLURM_MODULES))) >> $@.sh
endif
ifneq ($(SLURM_COMMAND),)
echo -e $(SLURM_COMMAND) >> $@.sh
else
echo -e $(MAKE) -j $(SLURM_MAKE_J) $(SLURM_MAKE_OPTIONS) $*.log >> $@.sh
endif
$(SBATCH) $(SBATCH_OPTIONS) $@.sh
endif
#JOB=`sbatch --output=/dev/null --error=/dev/null $@ $BS 2>&1 | egrep -o -e "\b[0-9]+$"`
# logging - output suffix = .runlog so this rule is always run
%.log:
echo -e "\n\n"`date`"\n\n" >> $@.tmp
$(MAKE) $(MFLAGS) $* 2>&1 | tee -a $@.tmp && mv $@.tmp $*.runlog
# Want %.log to run every time but this doesn't help?!?
.PHONY: general-settings general-header
# http://blog.melski.net/2010/11/30/makefile-hacks-print-the-value-of-any-variable/
print-%:
@echo '$*=$($*)'
general-settings: general-header print-AWK print-CAT print-ZCAT print-GREP print-GZIP print-GZIP_OPTIONS print-SBATCH print-SBATCH_OPTIONS general-slurm-header print-SLURM_PARTITION print-SLURM_CLUSTER print-SLURM_N_CORES print-SLURM_N_NODES print-SLURM_ACCOUNT print-SLURM_WORKDIR print-SLURM_USER print-SLURM_MAILUSER print-SLURM_MAILTYPE print-SLURM_TIME print-SLURM_JOBNAME print-SLURM_OUT print-SLURM_ERR print-SLURM_MODULES print-SLURM_MAKE_J print-SLURM_MAKE_OPTIONS print-SLURM_EXTRA_HEADER print-SLURM_PREHOOK
general-header:
@echo -e "\nMakefile.general options"
@echo "========================"
general-slurm-header:
@echo -e "\nSLURM settings"
@echo "------------------------"