Add support for shared libraries.

Add support for putting object files in a different directory.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@2434 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
scottc 1997-09-23 01:27:32 +00:00
parent 0e964b1be8
commit 0915f00add
6 changed files with 149 additions and 21 deletions

View file

@ -1,3 +1,12 @@
Fri Sep 22 17:57:50 2017 Scott Christley <scottc@speedy.net-community.com>
* common.make: Add support for putting object files in a different
directory.
* tool.make: Likewise.
* rules.make: Likewise.
* library.make: Add support for shared libraries.
* target.make: Likewise.
Fri Sep 22 15:12:14 2017 Scott Christley <scottc@speedy.net-community.com>
* ChangeLog: New file.

View file

@ -19,6 +19,9 @@
# If not, write to the Free Software Foundation,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Default version
VERSION = 1.0.0
#
# Scripts to run for parsing canonical names
#
@ -49,6 +52,8 @@ include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/$(GNUSTEP_TARGET_DIR)/config.make
#
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/core.make
GNUSTEP_OBJ_DIR = objs/$(GNUSTEP_TARGET_DIR)/$(LIBRARY_COMBO)
#
# Variables specifying the installation directory paths
#

View file

@ -29,6 +29,8 @@ include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/rules.make
#
LIBRARY_FILE = $(LIBRARY_NAME)$(LIBEXT)
SHARED_LIBRARY_NAME = $(LIBRARY_NAME)$(SHARED_LIBEXT)
SHARED_LIBRARY_FILE = $(LIBRARY_NAME)$(SHARED_LIBEXT).$(VERSION)
#
# Internal targets
@ -37,14 +39,19 @@ LIBRARY_FILE = $(LIBRARY_NAME)$(LIBEXT)
#
# Compilation targets
#
internal-all:: static-library shared-library import-library
internal-all:: object_dir static-library shared-library import-library
object_dir::
$(GNUSTEP_MAKEFILES)/mkinstalldirs \
./$(GNUSTEP_OBJ_DIR)
static-library:: $(C_OBJ_FILES) $(OBJC_OBJ_FILES)
$(AR) $(ARFLAGS) $(AROUT)$(LIBRARY_FILE) \
$(AR) $(ARFLAGS) $(AROUT)$(GNUSTEP_OBJ_DIR)/$(LIBRARY_FILE) \
$(C_OBJ_FILES) $(OBJC_OBJ_FILES)
$(RANLIB) $(LIBRARY_FILE)
$(RANLIB) $(GNUSTEP_OBJ_DIR)/$(LIBRARY_FILE)
shared-library::
shared-library:: $(SHARED_C_OBJ_FILES) $(SHARED_OBJC_OBJ_FILES)
$(SHARED_LIB_LINK_CMD)
import-library::
@ -74,7 +81,8 @@ internal-install-libs:: internal-install-static-lib \
internal-install-static-lib::
if [ -e $(LIBRARY_FILE) ]; then \
$(INSTALL_PROGRAM) $(LIBRARY_FILE) $(GNUSTEP_LIBRARIES) ; \
$(INSTALL_PROGRAM) $(GNUSTEP_OBJ_DIR)/$(LIBRARY_FILE) \
$(GNUSTEP_LIBRARIES) ; \
$(RANLIB) $(GNUSTEP_LIBRARIES)/$(LIBRARY_FILE) ; \
fi
@ -90,9 +98,10 @@ internal-clean::
rm -f $(C_OBJ_FILES)
rm -f $(PSWRAP_C_FILES)
rm -f $(PSWRAP_H_FILES)
rm -f $(LIBRARY_FILE)
rm -f $(GNUSTEP_OBJ_DIR)/$(LIBRARY_FILE)
internal-distclean:: clean
rm -rf objs
#
# Testing targets

View file

@ -41,24 +41,28 @@ ALL_TOOL_LIBS = $(ADDITIONAL_TOOL_LIBS) $(FND_LIBS) $(OBJC_LIBS) \
ALL_GUI_LIBS = $(ADDITIONAL_GUI_LIBS) $(BACKEND_LIBS) $(GUI_LIBS) \
$(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
VPATH = .
.SUFFIXES: .m .c .psw
%${OEXT} : %.m
$(CC) -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -o $@ $<
$(GNUSTEP_OBJ_DIR)/%${OEXT} : %.m
$(CC) -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) \
-o $@ $<
%${OEXT} : %.c
$(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
$(GNUSTEP_OBJ_DIR)/%${OEXT} : %.c
$(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) \
-o $@ $<
%.c : %.psw
pswrap -h $*.h -o $@ $<
%_pic${OEXT}: %.m
$(CC) -c $(ALL_CPPFLAGS) -fPIC -DPIC \
$(ALL_OBJCFLAGS) -o $@ $<
$(GNUSTEP_OBJ_DIR)/%_pic${OEXT}: %.m
$(CC) -c $(ALL_CPPFLAGS) $(SHARED_CFLAGS) $(ALL_OBJCFLAGS) \
-o $@ $<
%_pic${OEXT}: %.c
$(CC) -c $(ALL_CPPFLAGS) -fPIC -DPIC \
$(ALL_CFLAGS) -o $@ $<
$(GNUSTEP_OBJ_DIR)/%_pic${OEXT}: %.c
$(CC) -c $(ALL_CPPFLAGS) $(SHARED_CFLAGS) $(ALL_CFLAGS) \
-o $@ $<
# The magical app rule, thank you GNU make!
%.app : FORCE
@ -87,13 +91,38 @@ ALL_GUI_LIBS = $(ADDITIONAL_GUI_LIBS) $(BACKEND_LIBS) $(GUI_LIBS) \
# The list of PSWRAP source files to be compiled
# are in the PSWRAP_FILES variable.
OBJC_OBJ_FILES = $(OBJC_FILES:.m=${OEXT})
OBJC_OBJS = $(OBJC_FILES:.m=${OEXT})
OBJC_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(OBJC_OBJS))
ifeq ($(HAVE_SHARED_LIBS), yes)
SHARED_OBJC_OBJS = $(OBJC_FILES:.m=_pic${OEXT})
SHARED_OBJC_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(SHARED_OBJC_OBJS))
else
SHARED_OBJC_OBJS =
SHARED_OBJC_OBJ_FILES =
endif
PSWRAP_C_FILES = $(PSWRAP_FILES:.psw=.c)
PSWRAP_H_FILES = $(PSWRAP_FILES:.psw=.h)
PSWRAP_OBJ_FILES = $(PSWRAP_FILES:.psw=${OEXT})
PSWRAP_OBJS = $(PSWRAP_FILES:.psw=${OEXT})
PSWRAP_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(PSWRAP_OBJS))
ifeq ($(HAVE_SHARED_LIBS), yes)
SHARED_PSWRAP_OBJS = $(PSWRAP_FILES:.psw=_pic${OEXT})
SHARED_PSWRAP_OBJ_FILES= $(addprefix $(GNUSTEP_OBJ_DIR)/,$(SHARED_PSWRAP_OBJS))
else
SHARED_PSWRAP_OBJS =
SHARED_PSWRAP_OBJ_FILES =
endif
C_OBJ_FILES = $(C_FILES:.c=${OEXT}) $(PSWRAP_OBJ_FILES)
C_OBJS = $(C_FILES:.c=${OEXT})
C_OBJ_FILES = $(PSWRAP_OBJ_FILES) $(addprefix $(GNUSTEP_OBJ_DIR)/,$(C_OBJS))
ifeq ($(HAVE_SHARED_LIBS), yes)
SHARED_C_OBJS = $(C_FILES:.c=_pic${OEXT})
SHARED_C_OBJ_FILES = $(SHARED_PSWRAP_OBJ_FILES) \
$(addprefix $(GNUSTEP_OBJ_DIR)/,$(SHARED_C_OBJS))
else
SHARED_C_OBJS =
SHARED_C_OBJ_FILES =
endif
#
# Global targets

View file

@ -68,4 +68,76 @@ endif
#
ifeq ($(GNUSTEP_TARGET_OS),linux-gnu)
TARGET_SYSTEM_LIBS := -lpcthread -ldl -lm
endif
endif
#
# Specific settings for building shared libraries
#
HAVE_SHARED_LIBS = no
SHARED_LIB_LINK_CMD =
INSTALL_SHARED_LIB_CMD =
SHARED_CFLAGS =
SHARE_LIBEXT =
#
# OpenStep 4.x
#
ifeq ($(GNUSTEP_TARGET_OS), nextstep4)
HAVE_SHARED_LIBS = yes
SHARED_LIB_LINK_CMD = \
libtool -dynamic -o $@ \
/NextLibrary/Frameworks/System.framework/System \
$(GNUSTEP_LIBRARIES)/libobjc$(SHARED_LIBEXT) \
$(GNUSTEP_LIBRARIES)/libgcc$(SHARED_LIBEXT) $^ \
>/dev/null
INSTALL_SHARED_LIB_CMD = \
cp $(LIB_FOUNDATION_NAME) \
$(SHARED_LIB_DIR)/$(LIB_FOUNDATION_NAME)
SHARED_CFLAGS += -dynamic
SHARED_LIBEXT = .a
endif
#
# Linux ELF
#
ifeq ($(GNUSTEP_TARGET_OS), linux-gnu)
HAVE_SHARED_LIBS = yes
SHARED_LIB_LINK_CMD = \
$(CC) -shared -W,l,soname=$(SHARED_LIBRARY_FILE) \
-o $(GNUSTEP_OBJ_DIR)/$(SHARED_LIBRARY_FILE) $^ ;\
(cd $(GNUSTEP_OBJ_DIR); \
rm -f $(SHARED_LIBRARY_NAME); \
$(LN_S) $(SHARED_LIBRARY_FILE) $(SHARED_LIBRARY_NAME))
INSTALL_SHARED_LIB_CMD = \
cp $(LIB_FOUNDATION_NAME) \
$(SHARED_LIB_DIR)/$(LIB_FOUNDATION_NAME).$(VERSION); \
(cd $(SHARED_LIB_DIR); \
rm $(LIB_FOUNDATION_NAME); \
ln -sf $(LIB_FOUNDATION_NAME).$(VERSION) $(LIB_FOUNDATION_NAME))
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
endif
#
# Solaris
#
ifeq ($(findstring solaris, $(GNUSTEP_TARGET_OS)), solaris)
HAVE_SHARED_LIBS = yes
SHARED_LIB_LINK_CMD = \
$(CC) -G -o $@ $^
INSTALL_SHARED_LIB_CMD = \
cp $(LIB_FOUNDATION_NAME) \
$(SHARED_LIB_DIR)/$(LIBRARY_NAME).$(VERSION); \
(cd $(SHARED_LIB_DIR); \
rm $(LIB_FOUNDATION_NAME); \
ln -sf $(LIB_FOUNDATION_NAME).$(VERSION) $(LIB_FOUNDATION_NAME))
SHARED_CFLAGS += -fpic -fPIC
SHARE_LIBEXT = .so
endif

View file

@ -48,10 +48,14 @@ stamp-tool-% : $(C_OBJ_FILES) $(OBJC_OBJ_FILES)
#
internal-all:: $(TOOL_LIST)
internal-tool-all:: build-tool
internal-tool-all:: object_dir build-tool
build-tool:: stamp-tool-$(TOOL_NAME)
object_dir::
@$(GNUSTEP_MAKEFILES)/mkinstalldirs \
./$(GNUSTEP_OBJ_DIR)
#
# Cleaning targets
#