summaryrefslogtreecommitdiff
path: root/lib/make/make.thornlib
blob: fe14c027fa752898c2030b2499ddf975c7a2b08c (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
# /*@@
#   @file      make.thornlib
#   @date      Sun Jan 17 22:20:45 1999
#   @author    Tom Goodale
#   @desc 
#   Creates the library for a particular thorn
#   @enddesc 
#   @version $Id$
# @@*/

# Silence all but designated output
#.SILENT:

# Dividers to make the screen output slightly nicer
DIVEL   =  __________________
DIVIDER =  $(DIVEL)$(DIVEL)$(DIVEL)$(DIVEL)

# Include the main make definitions for this configuration
include $(CONFIG)/make.config.defn

# Add appropriate include lines
INC_DIRS = $(SYS_INC_DIRS) $(SRCDIR) $(SRCDIR)/include $(CONFIG) $(TOP)/bindings/include $(CCTK_HOME)/src/include $(CCTK_HOME)/arrangements

# Allow subdirectories to inherit these include directories
export INC_DIRS

BINDINGS_DIR=$(TOP)/bindings

EXTRA_DEFINES += THORN_IS_$(THORN) 

# Define some make variables
PRE_WRAPPER = make.pre
POST_WRAPPER = make.post

CCTK_SRCS :=

# Include the thorn's local include data
include $(SRCDIR)/make.code.defn

# Some extra stuff to allow make to recurse into subdirectories
# Protect the value of SRCS and SUBDIRS of this directory

LOCAL_SUBDIRS := . $(SUBDIRS)

# Include all the make.code.defn files for the subdirectories
# These have to be wrapped to allow us to concatanate all the
# SRCS definitions, complete with subdirectory names.
# Using -include to prevent warnings the first time the make.identity files 
# need to be made.
ifneq ($(strip $(LOCAL_SUBDIRS)),)
-include $(foreach DIR,$(LOCAL_SUBDIRS), $(DIR)/make.identity $(MAKE_DIR)/$(PRE_WRAPPER) $(SRCDIR)/$(DIR)/make.code.defn $(MAKE_DIR)/$(POST_WRAPPER))
endif

# The CactusBindings pseudo-thorn doesn't need to define its own bindings 8-)

ifneq ($(THORN), CactusBindings)
THORNBINDINGS=cctk_Bindings
-include cctk_Bindings/make.identity $(MAKE_DIR)/$(PRE_WRAPPER) $(BINDINGS_DIR)/build/$(THORN)/make.code.defn $(MAKE_DIR)/$(POST_WRAPPER)
endif

# Restore the value of SRCS and SUBDIRS of this directory
SRCS = $(CCTK_SRCS)

SUBDIRS = $(LOCAL_SUBDIRS)

# Turn source file names into object file names
OBJS = $(SRCS:%=%.o)

$(NAME): $(addsuffix /make.checked, $(SUBDIRS) $(THORNBINDINGS))
	@echo $(DIVIDER)
	if [ -r $(NAME) ] ; then echo Updating $(NAME) ; else echo Creating $(NAME) ; fi
	if [ -r $@ ] ; then rm $@ ; fi
	$(AR) $(ARFLAGS) $@ $(OBJS)
	if test "x$(USE_RANLIB)" = "xyes" ; then $(RANLIB) $(RANLIBFLAGS) $@ ; fi

# Extra stuff for allowing make to recurse into directories

# This one makes the object files in the subdirectory
.PHONY: FORCE

$(addsuffix /make.checked, $(SUBDIRS)) : FORCE
	if [ ! -d $(dir $@) ] ; then $(MKDIR) $(MKDIRFLAGS) $(dir $@) ; fi
	cd $(dir $@) ; $(MAKE) CCTK_TARGET=make.checked TOP=$(TOP) CONFIG=$(CONFIG) SRCDIR=$(subst /./,,$(SRCDIR)/$(dir $@)) THORN=$(THORN) -f $(MAKE_DIR)/make.subdir

cctk_Bindings/make.checked: FORCE
	cd  cctk_Bindings; $(MAKE) CCTK_TARGET=make.checked TOP=$(TOP) CONFIG=$(CONFIG) SRCDIR=$(BINDINGS_DIR)/build/$(THORN) THORN=$(THORN) -f $(MAKE_DIR)/make.subdir

# This one puts a file containing identity info into the build subdirectory
$(addsuffix /make.identity, $(SUBDIRS) $(THORNBINDINGS)):
	if [ ! -d $(dir $@) ] ; then $(MKDIR) $(MKDIRFLAGS) $(dir $@) ; fi
	echo CCTK_THIS_SUBDIR := $(dir $@) > $@


# Catch people who have not done a -rebuild.  Remove in beta 12
$(BINDINGS_DIR)/build/$(THORN)/make.code.defn:
	@echo $(DIVIDER)
	@echo "************************************************************************"
	@echo "             Major changes to CST and bindings system."
	@echo "             Please $(MAKE) $(notdir $(TOP))-rebuild  "
	@echo "************************************************************************"
	@echo $(DIVIDER)
	@exit 1