Makefiles: remove use of `-nostdlib` when linking shared object
Reason for its use is (was) unclear. Moreover, it causes link errors
on some systems:
/usr/lib32/libc_nonshared.a(atexit.oS): In function `atexit': (.text+0x11): undefined reference to `__dso_handle'
/usr/bin/ld: /usr/lib32/libc_nonshared.a(atexit.oS): relocation R_386_GOTOFF against undefined hidden symbol `__dso_handle' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
#------------------ start of linux-elf/COMMON/defines ---------------------
#
# $Header: /cvs/stx/stx/configurations/linux-elf/COMMON/defines,v 1.92 2016-07-19 19:56:46 stefan Exp $
include $(MAKELIB)/config.make
CCARCHCOMMONOPT=-DELF
#RELOCINSTVARS=+relocInstvars
INTERN_H=linuxIntern.h
CPUINTERN_H=$(INCLUDE)/linuxIntern.h
OS=-DLINUX
#OPTIONAL_DL_LIB=-ldl
#OPTIONAL_LIBDL_TARGET=libdld
MAKEFILE_EXTENSION=linux-elf
# ALL_TARGET=LINUX_i386_ELF
MAKEFLAGS += --no-print-directory
MAKE_INCLUDE=include
INSTALL=install
INSTALL_BIN_CMD=install -s -m 0755
INSTALL_SCRIPT_CMD=install -m 0755
COMPRESSOR=gzip
COMPRESSED_FILETYPE=targz
SETUP_RULE=setup_linux
# We need to use at most GCC 6.x, some code may fail to compile
# with GCC 7 due to -Werror (`send.c` for instance). We won't fix
# that for Smalltalk/X 6.x.x, will be fixed only for Smalltalk/X 8.0.0
ifeq (,$(shell which gcc-6))
ifeq (,$(shell which gcc-5))
ifeq (,$(shell which gcc-4))
$(error Smalltalk/X requires GCC 4.x, GCC 5.x or GCC 6.x to compile, none found)
else
CC=gcc-4
endif
else
CC=gcc-5
endif
else
CC=gcc-6
endif
STC_LEXLIB=-lfl
FFI_ARCH=x86
FFI_CFLAGS=
FFI_DIR=libffi-3.0.10rc8
FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
FFI_CC="gcc -m32"
FFI_LD='ld -m elf_i386'
#
# use static librt for clock_gettime().
# dynamic librt causes libpthread to be loaded that does not
# work with stx' stack layout
#
OTHERLIBS=-ldl -Wl,-Bstatic,-lrt,-Bdynamic
OTHERLIBS=-ldl -lrt
OTHERLIBS=-ldl -lrt -lc
STATIC_OTHERLIBS=
LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
-Wl,-z,now,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib',--wrap=memcpy
SPECIAL_LIBRUN_RULE=allLINUX
FORCE_LINK_LIBRUN=1
# mhm - these should now only be in libview!
ARCH_LIBSNMP=$(TOP)/libsnmp
ARCH_CLASSLIBDIRS=$(ARCH_LIBSNMP)
#
# a netsnmp library
#
# if already in /usr/lib:
# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
# STATIC_LINK_LIB_NETSNMP=
# TARGET_LIB_NETSNMP=
#
# if a local one should be built and used:
DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a -lrt
STATIC_LINK_LIB_NETSNMP=
TARGET_LIB_NETSNMP=snmplib
STATIC_LIB_X =$(X_LIB_DIR)/libX11.a
STATIC_LIB_XEXT=$(X_LIB_DIR)/libXext.a
STATIC_LIB_XT =$(X_LIB_DIR)/libXt.a
STATIC_LIB_XAW =$(X_LIB_DIR)/libXaw.a
STATIC_LIB_XMU =$(X_LIB_DIR)/libXmu.a
# the following defs are for using the system's usb lib (only needed in some apps);
USB_LIB_DIR=
USB_LIB_ARG=-lusb
USB_LIB_DIR_ARG=-L/usr/lib
USB_MAKE_TARGET=
MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin260 -lusb
#
# an extra rule for shared objects
#
.SUFFIXES: .a .o .so
.o.so:
@-rm -f $*.so
$(LD) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS)
.a.so:
rm -f $*.so
rm -rf tmp.a.so
mkdir tmp.a.so
cd tmp.a.so; $(AR) x ../$*.a
@-rm -f $*.so
$(LD) -shared $(LDFLAGS) -o $*.so tmp.a.so/*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS)
rm -rf tmp.a.so
SHAREDLIBRULE=linuxSharedLib
linuxSharedLib:
@-rm -f $(LIB)
$(LD) -shared $(LDFLAGS) -o $(LIB) $(OBJS) $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS)
#.st.s2:
# $(STC) $(STCFLAGS) $(CFLAGS) -C $*.st
# $(CC) $(CFLAGS) -S $*.c
# @-echo " stripping off useless .align directives ..."
# sed "/.align 4/d" < $*.s > $*.s2
#.SUFFIXES: .s2 .s3
#
#.s2.s3:
# @-echo " removing useless jumps ..."
# awk -f $(TOP)/rules/i386.script.awk < $*.s2 > $*.s3
#
# extra rules for space-optimized/speed-optimized modules modules
#
.SUFFIXES: .st .spc .spd
.st.spc:
$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPACEOPT_O_RULE__
.st.spd:
$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPEEDOPT_O_RULE__
VERYBIG_STFILE_RULE=__VERYBIG_RULE__
__VERYBIG_RULE__:
$(MAKE) $(O_RULE) STFILE=$(BIG_FILE) CC="$(CC)" STC_OPT="$(STC_OPT) -Os" OPT="$(OPT) -Os" SEPINITCODE="$(SEPINITCODE)"
LONGNAME_RULE=__NORMAL_RULE2__
__NORMAL_RULE2__:
$(MAKE) $(O_RULE) STFILE=$(LONGNAME_FILE) CC="$(CC)" STC_OPT="$(STC_OPT)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)"
#AWK_VERBOSE=1
AWK_DIFF=
AWK_FIX=$(TOP)/rules/i386fixELF.awk
SPACEOPT_O_RULE=__SPACEOPT_O_RULE__
__SPACEOPT_O_RULE__:
@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
@-if [ -f $(STFILE).s ]; then \
awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
if [ "$(AWK_DIFF)" != "" ]; then \
diff $(STFILE).s $(STFILE).s2; \
fi; \
if [ "$(AWK_VERBOSE)" != "" ]; then \
echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
tail -5 $(STFILE).s2; \
echo; \
fi; \
$(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
fi
@-if [ -f i_$(STFILE).s ]; then \
awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
if [ "$(AWK_DIFF)" != "" ]; then \
diff i_$(STFILE).s i_$(STFILE).s2; \
fi; \
if [ "$(AWK_VERBOSE)" != "" ]; then \
echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
tail -5 i_$(STFILE).s2; \
echo; \
fi; \
$(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
fi
@if [ "$(KEEP)" != "y" ]; then \
rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
fi
.SUFFIXES: .st .s2
.st.s2:
@$(MAKE) $(SPEEDOPT_O_RULE) STCOPT="$(STCOPT)" KEEP=y STFILE=$* SEPINITCODE="$(SEPINITCODE)"
SPEEDOPT_O_RULE=__SPEEDOPT_O_RULE__
__SPEEDOPT_O_RULE__:
@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
@-if [ -f $(STFILE).s ]; then \
awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
if [ "$(AWK_DIFF)" != "" ]; then \
diff $(STFILE).s $(STFILE).s2; \
fi; \
if [ "$(AWK_VERBOSE)" != "" ]; then \
echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
tail -5 $(STFILE).s2; \
echo; \
fi; \
$(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
fi
@-if [ -f i_$(STFILE).s ]; then \
awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
if [ "$(AWK_DIFF)" != "" ]; then \
diff i_$(STFILE).s i_$(STFILE).s2; \
fi; \
if [ "$(AWK_VERBOSE)" != "" ]; then \
echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
tail -5 i_$(STFILE).s2; \
echo; \
fi; \
$(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
fi
@if [ "$(KEEP)" != "y" ]; then \
rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
fi
O_RULE=$(SPEEDOPT_O_RULE)
#------------------ end of linux-elf/COMMON/defines ---------------------