Files
rtems/c/Makefile.in
Joel Sherrill 9572c41d09 Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>:
This is an attempt to work-around a couple of nasty bugs in librdbg's
Makefiles and configuration:

Configure and build RTEMS as below:
  configure --enable-networking --enable-rdbg --target=i386-rtems
  make RTEMS_BSP=i386ex

After a few minutes you will notice that building aborts in librdbg ....

Analysis:

  1) librdbg is tried to be built, though librdbg is not supported and the
     required directory hierarchy librdbg/i386/i386ex/  is not existant.

     The cause for this is incorrect setting of HAS_RDBG in most
     make/custom/*.cfg files (except pc386.cfg). At the moment all
     custom/*.cfg files (except pc386.cfg) in general are required to contain
     HAS_RDBG=no. However, having HAS_NETWORKING=no in most custom/*.cfg
     files and the toplevel configure script suppress building librdbg for
     all CPUs except of i386.

     => The i386ex BSP falls though this scheme and librdbg is tried to be
        build (CPU=i386 and HAS_NETWORKING=yes).

  2) The Makefile.ins below lib/librdbg in general support i386/pc386 only
     and are not capable to be used for multiple CPUs or BSPs (RPCGEN
     generates it's target and bsp-specific files into librdbg/, therefore no
     other CPU or BSP can ever be built afterwards). This problem is hidden
     until now, because only a single CPU/BSP pair (i386/pc386) is really
     supported.

  3) The Makefile.ins below lib/librdbg can delete source files due to
     improper handling of source files (make clean removes the *.x files in
     the source-tree when configuring inside of the source-tree).


The patch below tries to work-around these problems for the i386ex and
the pc386 BSPs. This work-around is rather fragile (it applies rpcgen
-D, I don't know how portable this is) and incomplete (all custom/*.cfg
except of pc386.cfg should contain HAS_RDBG=no), nevertheless it should
work.
1999-04-19 13:11:13 +00:00

162 lines
4.6 KiB
Makefile

#
# $Id$
#
# top level directory for RTEMS build tree
# This Makefile is *not* a good example of a directory Makefile.
#
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = ..
subdir = c
INSTALL = @INSTALL@
RTEMS_ROOT = $(top_srcdir)/@RTEMS_TOPdir@
PROJECT_ROOT = @PROJECT_ROOT@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
includedir = @includedir@
target = @target@
manext = 1
mandir = @mandir@/man$(manext)
program_prefix = @program_prefix@
VPATH = @srcdir@
include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg
include $(RTEMS_ROOT)/make/directory.cfg
SUB_DIRS=build-tools src
# We only make the install point for the networking header files if needed.
LIBNETWORKING_yes_V = lib/include/networking lib/include/networking/sys \
lib/include/networking/machine lib/include/networking/rtems \
lib/include/networking/vm lib/include/networking/net \
lib/include/networking/netinet lib/include/networking/arpa \
lib/include/networking/nfs
LIBNETWORKING = $(LIBNETWORKING_$(HAS_NETWORKING)_V)
# We only make the rpc install point if networking is enabled.
LIBRPC_yes_V = lib/include/rpc
LIBRPC = $(LIBRPC_$(HAS_NETWORKING)_V)
# We only make the rdbg install point if networking and rdbg is enabled.
LIBRDBG_yes_yes_V = lib/include/rdbg
LIBRDBG = $(LIBRDBG_$(HAS_NETWORKING)_$(HAS_RDBG)_V)
# We only make the rtems++ install point if it is enabled.
LIBRTEMSCPLUSPLUS_yes_V = lib/include/rtems++
LIBRTEMSCPLUSPLUS = $(LIBRTEMSCPLUSPLUS_$(HAS_CPLUSPLUS)_V)
# directories to be created in install point
CREATE_DIRS = \
lib lib/include lib/include/sys lib/include/rtems \
lib/include/rtems/score lib/include/rtems/rtems lib/include/rtems/posix \
lib/include/libc lib/include/libc/sys \
lib/include/motorola lib/include/zilog \
lib/include/libchip \
$(LIBNETWORKING) \
$(LIBRPC) \
$(LIBRDBG) \
$(LIBRTEMSCPLUSPLUS) \
bin samples \
tests tests/screens tests/screens/sptests \
tests/screens/psxtests tests/screens/mptests \
tests/screens/mptests/node1 tests/screens/mptests/node2 \
build-tools update-tools
BUILD_DIRS = ${CREATE_DIRS:%=$(PROJECT_ROOT)/$(RTEMS_BSP)/%}
# Make all/install must include 'env'
# if something is added to TARGET_VARIANTS, then account for it here
make_src_makefiles: Makefile.in Makefile
-find src -name Makefile \
-exec grep -l "^preinstall" {} \; | sort > make_src_makefiles.tmp
-grep tools make_src_makefiles.tmp > make_src_makefiles
-grep -v tools make_src_makefiles.tmp >> make_src_makefiles
-rm make_src_makefiles.tmp
pre_install_src: env make_src_makefiles
cd build-tools/scripts; \
$(MAKE) RTEMS_BSP=${RTEMS_BSP} install-exec-local
cd build-tools/src; \
$(MAKE) RTEMS_BSP=${RTEMS_BSP} install-exec-local
@echo "Order of preinstall directories"
cat make_src_makefiles
@echo
CURRDIR=`pwd`; \
for i in `cat make_src_makefiles` ; do \
DIR=`dirname $$i`; \
cd $$DIR; \
$(MAKE) RTEMS_BSP=${RTEMS_BSP} preinstall; \
cd $$CURRDIR; \
done
all: pre_install_src env
debug: pre_install_src env
profile: pre_install_src env
install: all install_files
debug_install: env debug install_files
profile_install: env profile install_files
debug_all: debug
profile_all: profile
# top level clean/clobber will delete the install points
clean_WRAPUP = $(MAKE) clean_wrapup
clobber_WRAPUP = $(MAKE) clean_wrapup
clean_wrapup: clean_tools clean_dirs clean_modules
.PHONY: dirs clean_wrapup clean_dirs clean_tools clean_modules env install
$(BUILD_DIRS):
$(RTEMS_ROOT)/mkinstalldirs $(BUILD_DIRS)
if test -d $(PROJECT_ROOT)/c/src/lib/libhwapi; then \
(cd $(PROJECT_ROOT)/c/src/lib/libhwapi ; $(MAKE) mkdirs) \
fi
dirs: $(BUILD_DIRS)
distclean: clobber
clean_dirs:
$(RM) -r $(PROJECT_RELEASE)
clean_tools:
cd build-tools; $(MAKE) clean
$(PROJECT_ROOT)/$(RTEMS_BSP)/Makefile.inc: $(PROJECT_ROOT)/make/Templates/Makefile.inc
echo "RTEMS_BSP = $(RTEMS_BSP)" > $@
$(CAT) $< >> $@
# NOTE: The wildcard on the install should pick up everything except
# the tests directory. This significantly minimizes the install size.
install_files: $(PROJECT_ROOT)/$(RTEMS_BSP)/Makefile.inc
@top_srcdir@/mkinstalldirs $(prefix)
-$(RM) -rf $(prefix)/$(RTEMS_BSP)
cd ../; tar cf - $(RTEMS_BSP)/[bilsuM]* | \
(cd $(prefix); tar xpBf - )
cd ../make; $(MAKE) RTEMS_BSP=$(RTEMS_BSP) install
tests:
cd src/tests; $(MAKE) all
debug_tests: debug
cd src/tests; $(MAKE) debug
profile_tests: profile
cd src/tests; $(MAKE) profile
env: $(SRCS) dirs
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status