mirror of
https://github.com/gnustep/tools-make.git
synced 2025-04-22 22:00:49 +00:00
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:
parent
0e964b1be8
commit
0915f00add
6 changed files with 149 additions and 21 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
21
library.make
21
library.make
|
@ -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
|
||||
|
|
55
rules.make
55
rules.make
|
@ -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
|
||||
|
|
74
target.make
74
target.make
|
@ -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
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue