summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/make/configure22
-rw-r--r--lib/make/configure.in6
-rw-r--r--lib/make/make.config.defn.in3
-rw-r--r--lib/make/make.configuration16
-rw-r--r--lib/make/make.thornlib1
5 files changed, 38 insertions, 10 deletions
diff --git a/lib/make/configure b/lib/make/configure
index 4f25710f..25af7de3 100755
--- a/lib/make/configure
+++ b/lib/make/configure
@@ -7627,10 +7627,10 @@ cat > conftest.$ac_ext <<EOF
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
-char q2nVBa;
+char ryvCLg;
int main() {
-65DAV6
+0anSRA
; return 0; }
EOF
if { (eval echo configure:7637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@@ -8172,6 +8172,12 @@ LDFLAGS="$LDFLAGS $KNOWN_LDFLAGS"
: ${LIBNAME_SUFFIX='.a'}
+# How to link in all object files from an archive
+
+: ${BEGIN_WHOLE_ARCHIVE_FLAGS=''}
+
+: ${END_WHOLE_ARCHIVE_FLAGS=''}
+
# How to link the cactus libraries
: ${CACTUSLIBLINKLINE='-L$(CCTK_LIBDIR) $(addprefix -l, $(ALLCACTUSLIBS))'}
@@ -8307,7 +8313,7 @@ if test "x$CCTK_NEED_X" = 'xyes' ; then
# Uses ac_ vars as temps to allow command line to override cache and checks.
# --without-x overrides everything else, but does not touch the cache.
echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:8311: checking for X" >&5
+echo "configure:8317: checking for X" >&5
# Check whether --with-x or --without-x was given.
if test "${with_x+set}" = set; then
@@ -8369,12 +8375,12 @@ if test "$ac_x_includes" = NO; then
# First, try using that file with no special directory specified.
cat > conftest.$ac_ext <<EOF
-#line 8373 "configure"
+#line 8379 "configure"
#include "confdefs.h"
#include <$x_direct_test_include>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8384: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8443,14 +8449,14 @@ if test "$ac_x_libraries" = NO; then
ac_save_LIBS="$LIBS"
LIBS="-l$x_direct_test_library $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8447 "configure"
+#line 8453 "configure"
#include "confdefs.h"
int main() {
${x_direct_test_function}()
; return 0; }
EOF
-if { (eval echo configure:8454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBS="$ac_save_LIBS"
# We can link X programs with no special library path.
@@ -8791,6 +8797,8 @@ s%@DIRSEP@%$DIRSEP%g
s%@OPTIONSEP@%$OPTIONSEP%g
s%@LIBNAME_PREFIX@%$LIBNAME_PREFIX%g
s%@LIBNAME_SUFFIX@%$LIBNAME_SUFFIX%g
+s%@BEGIN_WHOLE_ARCHIVE_FLAGS@%$BEGIN_WHOLE_ARCHIVE_FLAGS%g
+s%@END_WHOLE_ARCHIVE_FLAGS@%$END_WHOLE_ARCHIVE_FLAGS%g
s%@CACTUSLIBLINKLINE@%$CACTUSLIBLINKLINE%g
s%@C_DEPEND@%$C_DEPEND%g
s%@C_DEPEND_OUT@%$C_DEPEND_OUT%g
diff --git a/lib/make/configure.in b/lib/make/configure.in
index 08ae04f3..7c1a7e45 100644
--- a/lib/make/configure.in
+++ b/lib/make/configure.in
@@ -1260,6 +1260,12 @@ AC_SUBST(LIBNAME_PREFIX)
AC_SUBST(LIBNAME_SUFFIX)
: ${LIBNAME_SUFFIX='.a'}
+# How to link in all object files from an archive
+AC_SUBST(BEGIN_WHOLE_ARCHIVE_FLAGS)
+: ${BEGIN_WHOLE_ARCHIVE_FLAGS=''}
+AC_SUBST(END_WHOLE_ARCHIVE_FLAGS)
+: ${END_WHOLE_ARCHIVE_FLAGS=''}
+
# How to link the cactus libraries
AC_SUBST(CACTUSLIBLINKLINE)
: ${CACTUSLIBLINKLINE='-L$(CCTK_LIBDIR) $(addprefix -l, $(ALLCACTUSLIBS))'}
diff --git a/lib/make/make.config.defn.in b/lib/make/make.config.defn.in
index 3a21ad52..1575ac58 100644
--- a/lib/make/make.config.defn.in
+++ b/lib/make/make.config.defn.in
@@ -141,6 +141,9 @@ export OPTIONSEP = @OPTIONSEP@
export LIBNAME_PREFIX = @LIBNAME_PREFIX@# Make sure there is no space at end.
export LIBNAME_SUFFIX = @LIBNAME_SUFFIX@
+export BEGIN_WHOLE_ARCHIVE_FLAGS = @BEGIN_WHOLE_ARCHIVE_FLAGS@
+export END_WHOLE_ARCHIVE_FLAGS = @END_WHOLE_ARCHIVE_FLAGS@
+
export CACTUSLIBLINKLINE = @CACTUSLIBLINKLINE@
# Dependency file generation
diff --git a/lib/make/make.configuration b/lib/make/make.configuration
index 81873574..abfcc05e 100644
--- a/lib/make/make.configuration
+++ b/lib/make/make.configuration
@@ -126,18 +126,30 @@ UTIL_DIR=$(EXEDIR)$(DIRSEP)$(CONFIG_NAME)
# Build the list of all libraries
+ifeq ($(strip $(BEGIN_WHOLE_ARCHIVE_FLAGS)),)
+# Repeat Cactus only if --whole-archive is not used
ALLCACTUSLIBS_BASE = $(notdir $(CACTUSLIBS) $(THORN_LINKLIST) $(CACTUSLIBS))
+else
+ALLCACTUSLIBS_BASE = $(notdir $(THORNS) $(CACTUSLIBS))
+endif
ALLCACTUSLIBS = $(ALLCACTUSLIBS_BASE:%=$(CCTK_LIBNAME_PREFIX)%)
+$(CCTK_LIBDIR)/LINKLIST: $(patsubst %,$(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)%$(LIBNAME_SUFFIX),$(notdir $(THORNS) $(CACTUSLIBS)))
+ cd $(CCTK_LIBDIR); \
+ for thorn in $(notdir $(THORNS) $(CACTUSLIBS)); do \
+ xargs -n 1 -I :OBJFILE: echo $$thorn/:OBJFILE: <$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)$$thorn$(LIBNAME_SUFFIX).objectlist; \
+ done >$@.tmp
+ mv $@.tmp $@
+
# Build the executable
-$(EXEDIR)$(DIRSEP)$(EXE): $(CONFIG)/make.thornlist $(CONFIG)/cctki_version.h $(patsubst %,$(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)%$(LIBNAME_SUFFIX),$(notdir $(THORNS) $(CACTUSLIBS)))
+$(EXEDIR)$(DIRSEP)$(EXE): $(CONFIG)/make.thornlist $(CONFIG)/cctki_version.h $(patsubst %,$(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)%$(LIBNAME_SUFFIX),$(notdir $(THORNS) $(CACTUSLIBS))) $(CCTK_LIBDIR)/LINKLIST
@echo Creating $(EXE) in $(EXEDIR) from $(THORNS)
datetime=`/bin/date +'%Y-%m-%dT%H:%M:%S%z' 2>&1` ; \
if [ $$? != 0 ]; then datetime=`/bin/date` ; fi ; \
$(CC) $(CFLAGS) -DCCTK_COMPILE_DATETIME="$$datetime" $(CCOMPILEONLY)$(OPTIONSEP)"$(call TRANSFORM_DIRS,$(TOP)/datestamp.o)" -I"$(call TRANSFORM_DIRS,$(CCTK_HOME)/src/include)" -I"$(call TRANSFORM_DIRS,$(CONFIG))" "$(call TRANSFORM_DIRS,$(DATESTAMP))"
if [ ! -d $(EXEDIR) ]; then $(MKDIR) $(MKDIRFLAGS) $(EXEDIR) ; fi
- $(LD) $(CREATEEXE)$(OPTIONSEP)"$(call TRANSFORM_DIRS,$@)" $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(EXTRAFLAGS) "$(call TRANSFORM_DIRS,$(TOP)/datestamp.o)" $(CACTUSLIBLINKLINE) $(GENERAL_LIBRARIES)
+ $(LD) $(CREATEEXE)$(OPTIONSEP)"$(call TRANSFORM_DIRS,$@)" $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(EXTRAFLAGS) "$(call TRANSFORM_DIRS,$(TOP)/datestamp.o)" $(BEGIN_WHOLE_ARCHIVE_FLAGS) $(CACTUSLIBLINKLINE) $(END_WHOLE_ARCHIVE_FLAGS) $(GENERAL_LIBRARIES)
$(NOTIFY_DIVIDER)
# Version file
diff --git a/lib/make/make.thornlib b/lib/make/make.thornlib
index f6f640ee..1690025a 100644
--- a/lib/make/make.thornlib
+++ b/lib/make/make.thornlib
@@ -89,7 +89,6 @@ $(NAME): $(addsuffix /make.checked, $(SUBDIRS) $(THORNBINDINGS))
## in batches not larger than $(OBJS-words-max) files at a time.
$(MAKE) -f $(MAKE_DIR)/make.thornlib $(NAME).objectlist
xargs -n $(OBJS-words-max) $(AR) $(ARFLAGS) $@ < $(NAME).objectlist
- $(RM) $(NAME).objectlist
## Alternatively, we could create a single object file from the object
## files and put it into an archive.
# ld -r -o $@.o $(OBJS)