mirror of
https://github.com/gnustep/tools-make.git
synced 2025-05-31 09:21:19 +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
5b97714fb9
commit
ce617a745a
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>
|
Fri Sep 22 15:12:14 2017 Scott Christley <scottc@speedy.net-community.com>
|
||||||
|
|
||||||
* ChangeLog: New file.
|
* ChangeLog: New file.
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
# If not, write to the Free Software Foundation,
|
# If not, write to the Free Software Foundation,
|
||||||
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
# Default version
|
||||||
|
VERSION = 1.0.0
|
||||||
|
|
||||||
#
|
#
|
||||||
# Scripts to run for parsing canonical names
|
# 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
|
include $(GNUSTEP_SYSTEM_ROOT)/Makefiles/core.make
|
||||||
|
|
||||||
|
GNUSTEP_OBJ_DIR = objs/$(GNUSTEP_TARGET_DIR)/$(LIBRARY_COMBO)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Variables specifying the installation directory paths
|
# 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)
|
LIBRARY_FILE = $(LIBRARY_NAME)$(LIBEXT)
|
||||||
|
SHARED_LIBRARY_NAME = $(LIBRARY_NAME)$(SHARED_LIBEXT)
|
||||||
|
SHARED_LIBRARY_FILE = $(LIBRARY_NAME)$(SHARED_LIBEXT).$(VERSION)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Internal targets
|
# Internal targets
|
||||||
|
@ -37,14 +39,19 @@ LIBRARY_FILE = $(LIBRARY_NAME)$(LIBEXT)
|
||||||
#
|
#
|
||||||
# Compilation targets
|
# 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)
|
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)
|
$(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::
|
import-library::
|
||||||
|
|
||||||
|
@ -74,7 +81,8 @@ internal-install-libs:: internal-install-static-lib \
|
||||||
|
|
||||||
internal-install-static-lib::
|
internal-install-static-lib::
|
||||||
if [ -e $(LIBRARY_FILE) ]; then \
|
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) ; \
|
$(RANLIB) $(GNUSTEP_LIBRARIES)/$(LIBRARY_FILE) ; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -90,9 +98,10 @@ internal-clean::
|
||||||
rm -f $(C_OBJ_FILES)
|
rm -f $(C_OBJ_FILES)
|
||||||
rm -f $(PSWRAP_C_FILES)
|
rm -f $(PSWRAP_C_FILES)
|
||||||
rm -f $(PSWRAP_H_FILES)
|
rm -f $(PSWRAP_H_FILES)
|
||||||
rm -f $(LIBRARY_FILE)
|
rm -f $(GNUSTEP_OBJ_DIR)/$(LIBRARY_FILE)
|
||||||
|
|
||||||
internal-distclean:: clean
|
internal-distclean:: clean
|
||||||
|
rm -rf objs
|
||||||
|
|
||||||
#
|
#
|
||||||
# Testing targets
|
# 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) \
|
ALL_GUI_LIBS = $(ADDITIONAL_GUI_LIBS) $(BACKEND_LIBS) $(GUI_LIBS) \
|
||||||
$(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
|
$(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
|
||||||
|
|
||||||
|
VPATH = .
|
||||||
|
|
||||||
.SUFFIXES: .m .c .psw
|
.SUFFIXES: .m .c .psw
|
||||||
|
|
||||||
%${OEXT} : %.m
|
$(GNUSTEP_OBJ_DIR)/%${OEXT} : %.m
|
||||||
$(CC) -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -o $@ $<
|
$(CC) -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) \
|
||||||
|
-o $@ $<
|
||||||
|
|
||||||
%${OEXT} : %.c
|
$(GNUSTEP_OBJ_DIR)/%${OEXT} : %.c
|
||||||
$(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
|
$(CC) -c $(ALL_CPPFLAGS) $(ALL_CFLAGS) \
|
||||||
|
-o $@ $<
|
||||||
|
|
||||||
%.c : %.psw
|
%.c : %.psw
|
||||||
pswrap -h $*.h -o $@ $<
|
pswrap -h $*.h -o $@ $<
|
||||||
|
|
||||||
%_pic${OEXT}: %.m
|
$(GNUSTEP_OBJ_DIR)/%_pic${OEXT}: %.m
|
||||||
$(CC) -c $(ALL_CPPFLAGS) -fPIC -DPIC \
|
$(CC) -c $(ALL_CPPFLAGS) $(SHARED_CFLAGS) $(ALL_OBJCFLAGS) \
|
||||||
$(ALL_OBJCFLAGS) -o $@ $<
|
-o $@ $<
|
||||||
|
|
||||||
%_pic${OEXT}: %.c
|
$(GNUSTEP_OBJ_DIR)/%_pic${OEXT}: %.c
|
||||||
$(CC) -c $(ALL_CPPFLAGS) -fPIC -DPIC \
|
$(CC) -c $(ALL_CPPFLAGS) $(SHARED_CFLAGS) $(ALL_CFLAGS) \
|
||||||
$(ALL_CFLAGS) -o $@ $<
|
-o $@ $<
|
||||||
|
|
||||||
# The magical app rule, thank you GNU make!
|
# The magical app rule, thank you GNU make!
|
||||||
%.app : FORCE
|
%.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
|
# The list of PSWRAP source files to be compiled
|
||||||
# are in the PSWRAP_FILES variable.
|
# 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_C_FILES = $(PSWRAP_FILES:.psw=.c)
|
||||||
PSWRAP_H_FILES = $(PSWRAP_FILES:.psw=.h)
|
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
|
# Global targets
|
||||||
|
|
74
target.make
74
target.make
|
@ -68,4 +68,76 @@ endif
|
||||||
#
|
#
|
||||||
ifeq ($(GNUSTEP_TARGET_OS),linux-gnu)
|
ifeq ($(GNUSTEP_TARGET_OS),linux-gnu)
|
||||||
TARGET_SYSTEM_LIBS := -lpcthread -ldl -lm
|
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-all:: $(TOOL_LIST)
|
||||||
|
|
||||||
internal-tool-all:: build-tool
|
internal-tool-all:: object_dir build-tool
|
||||||
|
|
||||||
build-tool:: stamp-tool-$(TOOL_NAME)
|
build-tool:: stamp-tool-$(TOOL_NAME)
|
||||||
|
|
||||||
|
object_dir::
|
||||||
|
@$(GNUSTEP_MAKEFILES)/mkinstalldirs \
|
||||||
|
./$(GNUSTEP_OBJ_DIR)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cleaning targets
|
# Cleaning targets
|
||||||
#
|
#
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue