| # -*- Makefile -*- |
| # |
| # $Id$ |
| # |
| # main makefile to build and test the C++ Standard library |
| # |
| ######################################################################## |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed |
| # with this work for additional information regarding copyright |
| # ownership. The ASF licenses this file to you under the Apache |
| # License, Version 2.0 (the "License"); you may not use this file |
| # except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| # implied. See the License for the specific language governing |
| # permissions and limitations under the License. |
| # |
| # Copyright 1999-2007 Rogue Wave Software, Inc. |
| # |
| ######################################################################## |
| # |
| # Usage: |
| # |
| # Invoke from $TOPDIR to create the build directory tree, $BUILDDIR |
| # configure and build the library, example programs, utility programs |
| # testsuite driver, and the testsuite. |
| # |
| # $ make [ BUILDTYPE=<build-type> ] \ |
| # [ BUILDDIR=<build-dir> ] \ |
| # [ CONFIG=<config-file> ] \ |
| # [ PHDIR=<plumhall-testsuite-source-dir> ] |
| # [ <targets> ] |
| # |
| # From $BUILDDIR/include to [re]configure or just run one or more tests: |
| # |
| # $ make [ config | config.h | <target> ... ] |
| # |
| # From $TOPDIR or $BUILDDIR to configure if necessary and build the lib, |
| # tests, plumhall testsuite, and examples: |
| # |
| # $ make [ lib ] [ bin ] [ rwtest ] [ tests ] [ phtst ] [ examples ] |
| # |
| # From $TOPDIR or $BUILDDIR to build the lib, tests, and examples, run the |
| # built executables, and (by default, unless DRYRUN is non-empty) |
| # post results in Perforce: |
| # |
| # $ make run | runall | run_all [ RUN=<executables> | ALL ] |
| # |
| # For every invocation of make the variables CPPOPTS, CXXOPTS, LDOPTS, |
| # and RUNOPTS can be set on the command line to pass additional options to |
| # the preprocessor, compiler, linker, and the runall.sh script, respectively. |
| # |
| # The variable MAKE can be set to contain any additional make arguments |
| # to be passed to recursive invokations of make (e.g., make -j). |
| # |
| # The variable SHELL can be defined to override the default shell, /bin/sh. |
| # |
| ######################################################################## |
| # |
| # Targets: |
| # |
| # builddir - creates the build directory (BUILDDIR) and makefile.in |
| # |
| # config - performs configuration tests and creates the configuration |
| # header, $(BUILDDIR)/include/config.h |
| # |
| # libstd - builds the library |
| # |
| # rwtest - builds the testsuite driver |
| # |
| # tests - builds the testsuite |
| # |
| # examples - builds the example programs |
| # |
| # util - builds the utility programs |
| # |
| ############################################################################## |
| # |
| # Nonstandard variables: |
| # |
| # BUILDDIR - (optional) the root of the build directory tree, |
| # the default value is $(TOPDIR)/build |
| # |
| # BUILDTAG - (optional) a string appended to a report filename |
| # the default value is empty |
| # |
| # BUILDTYPE - (optional) one of |
| # 8s, 8d, 11s, 11d, 12s, 12d, 15s, 15d, |
| # 8S, 8D, 11S, 11D, 12S, 12D, 15S, 15D |
| # where the capitalized forms are wide forms of the others |
| # the default value is 11s |
| # |
| # BUILDMODE - (optional) a comma separated list of at most one of each of |
| # debug, optimized, shared |
| # threads, pthreads, dcethreads, wide |
| # where |
| # * debug turns on debugging and disables optimization |
| # * optimized enables optimization and disables debugging |
| # * shared creates and links with a shared library |
| # * threads uses Solaris threads for thread safety |
| # * pthreads uses POSIX threads for thread safety |
| # * dcethreads uses DCE threads for thread safety |
| # * wide uses wide (typically 64-bit) memory model |
| # the default value is debug (same as 11s) |
| # |
| # CATFILE - name of library catalog file to be generated - see gencat(1) |
| # |
| # CCVER - compiler version (must contain no spaces) |
| # |
| # DEPENDFLAGS - preprocessor flags used to generate dependencies |
| # |
| # LIBBASE - name of the library w/o the suffix suitable |
| # for use by the linker after the -l option |
| # |
| # DEPENDDIR - the subdirectory where dependency files will reside |
| # |
| # LIBM - the linker option to link with the math library |
| # (typically -lm, may be unnecessary or not even exist |
| # on some systems) |
| # |
| # LIBNAME - full name of the library being built |
| # |
| # LIBVER - library version number in the <major>.<minor>.<micro> format |
| # |
| # LIBSUFFIX - archive/shared library suffix (defaults to a) |
| # |
| # LDSOFLAGS - linker flags used when building a shared lib |
| # |
| # LDLIBS - set of system libraries to link executables with |
| # |
| # PHDIR - directory containing the PlumHall testsuite distribution |
| # (e.g., ".../lvs99a") |
| # |
| # PHWARNFLAGS - extra flags to suppress warnings coming from PlumHall tests |
| # |
| # PICFLAGS - flags to generate Position Independent Code |
| # for shared libraries |
| # |
| # PREFIX - the root of the installation directory where the bin/ |
| # include/ and lib/ subdirectories will be rooted |
| # |
| # PRELINKFLAGS - flags passed to the prelinker |
| # |
| # RUNFLAGS - default options passed to runall.sh when running executables |
| # RUNOPTS - additional options to pass to runall.sh (empty by default) |
| # |
| # SHARED - set to `true' if building a shared lib, `false' otherwise |
| # |
| # WARNFLAGS - any compiler warning options |
| # |
| # WITH_PURIFY - set to `true' to build with purify. additional flags |
| # can be specified in PURIFYFLAGS. |
| # |
| # WITH_CADVISE - set to `true' to build with cadvise. additional flags |
| # can be specified in CADVISEFLAGS. |
| # |
| ######################################################################## |
| |
| SHELL = /bin/sh |
| |
| # define the value of OSNAME first so that it can be used in *.config files |
| OSNAME := $(shell uname) |
| |
| # provide a value if it isn't already set by (an older version of) make |
| ifeq ($(CURDIR),) |
| ifneq ($(PWD),) |
| # use the shell PWD variable to avoid expanding NFS paths |
| # as mount points instead of the user-visible directories |
| CURDIR := $(PWD) |
| else |
| CURDIR := $(shell pwd) |
| endif |
| endif |
| |
| |
| -include ./makefile.in |
| |
| |
| # buildpath must not be defined |
| ifneq ($(buildpath),) |
| $(error "buildpath not empty ('$(buildpath)')") |
| endif |
| |
| |
| # check to see if BUILDDIR is defined |
| ifeq ($(BUILDDIR),) |
| # the default value is $(TOPDIR)/build |
| buildpath = $(CURDIR)/build |
| else |
| # see if BUILDDIR is an absolute pathname |
| ifeq ($(filter /%,$(BUILDDIR)),) |
| # ...if not, prepend the name of CURDIR |
| buildpath = $(CURDIR)/$(BUILDDIR) |
| else |
| # ...otherwise, make sure it doesn't refer to TOPDIR |
| ifeq ($(BUILDDIR),$(TOPDIR)) |
| $(error "BUILDDIR ('$(BUILDDIR)') is same as TOPDIR ('$(TOPDIR)')") |
| endif |
| buildpath = $(BUILDDIR) |
| endif # ifneq ($(filter /%,$(BUILDDIR)),) |
| endif # ifneq ($(BUILDDIR),) |
| |
| |
| ifeq ($(filter /%,$(buildpath)),) |
| # buildpath must be an absolute pathname |
| $(error "buildpath=$(buildpath): not an absolute pathname") |
| endif |
| |
| ifeq ($(buildpath),$(TOPDIR)) |
| # buildpath must be distinct from TOPDIR |
| $(error "buildpath=$(buildpath): not distinct from TOPDIR=$(TOPDIR)") |
| endif |
| |
| |
| MAKEFILE_IN = $(buildpath)/makefile.in |
| -include $(MAKEFILE_IN) |
| |
| |
| INCDIR = $(buildpath)/include |
| LIBDIR = $(buildpath)/lib |
| BINDIR = $(buildpath)/bin |
| EXMDIR = $(buildpath)/examples |
| TSTDIR = $(buildpath)/tests |
| PHTSTDIR = $(buildpath)/plumhall |
| MAKEDIRS = $(buildpath) \ |
| $(LIBDIR) \ |
| $(buildpath)/rwtest \ |
| $(BINDIR) \ |
| $(buildpath)/nls \ |
| $(TSTDIR) \ |
| $(PHTSTDIR) \ |
| $(EXMDIR) \ |
| $(INCDIR) |
| |
| # file to write log of the build to |
| LOGFILE = /dev/null |
| |
| # convert a relative pathname to an absolute one |
| ifneq ($(shell echo $(LOGFILE) | sed -n "s/^ *\/.*/\//p"),/) |
| LOGFILE := $(buildpath)/$(LOGFILE) |
| endif |
| |
| |
| ifeq ($(TOPDIR),) |
| # this is the first invocation of make in TOPDIR |
| in_topdir = 1 |
| else |
| ifeq ($(TOPDIR),$(CURDIR)) |
| # this is a recursive invocation of make in TOPDIR |
| in_topdir = 1 |
| endif |
| endif |
| |
| |
| ifeq ($(in_topdir),1) |
| |
| ###################################################################### |
| # THIS BLOCK IS EVALUATED ONLY WHEN MAKE IS INVOKED IN TOPDIR |
| ###################################################################### |
| |
| # try to determine configuration (unless specified on the command line) |
| # invoke $(SHELL) from within the $(shell) function to silence shell |
| # any error messages when the compiler isn't found |
| ifeq ($(CONFIG),) |
| ifeq ($(shell $(SHELL) -c "g++ -v" >/dev/null 2>&1 \ |
| && echo $$?),0) |
| # use gcc on every OS by default |
| CONFIG = gcc.config |
| else |
| ifeq ($(OSNAME),AIX) |
| # check for VisualAge on AIX |
| # avoid comparing the exit status to 0 since VAC++ return 249... |
| ifneq ($(shell $(SHELL) -c "xlC -qversion" >/dev/null 2>&1; \ |
| echo $$?),127) |
| CONFIG = vacpp.config |
| endif |
| else |
| ifeq ($(OSNAME),HP-UX) |
| # check for aCC on HP-UX |
| ifeq ($(shell $(SHELL) -c "aCC -V" >/dev/null 2>&1 && echo $$?),0) |
| CONFIG = acc.config |
| endif |
| else |
| ifeq ($(OSNAME),IRIX64) |
| # check for MIPSpro on IRIX |
| ifeq ($(shell $(SHELL) -c "CC -v" >/dev/null 2>&1 && echo $$?),0) |
| CONFIG = mipspro.config |
| endif |
| else |
| ifeq ($(OSNAME),OSF1) |
| # check for Compaq C++ on Tru64 UNIX |
| ifeq ($(shell $(SHELL) -c "cxx -V" >/dev/null 2>&1; echo $$?),0) |
| CONFIG = osf_cxx.config |
| endif |
| else |
| ifeq ($(OSNAME),SunOS) |
| # check for SunPro on Solaris |
| ifeq ($(shell $(SHELL) -c "CC -V" >/dev/null 2>&1 \ |
| && echo $$?),0) |
| CONFIG = sunpro.config |
| endif |
| endif # SunOS |
| endif # OSF1 |
| endif # IRIX64 |
| endif # HP-UX |
| endif # AIX |
| endif # gcc |
| |
| ifeq ($(CONFIG),) |
| $(error "could not find a config file for this platform: $(OSNAME)") |
| else |
| $(warning "CONFIG not specified, using $(CONFIG)") |
| endif |
| |
| endif # ifeq ($(CONFIG),) |
| |
| ifeq ($(CONFIG),) |
| $(error "CONFIG not defined") |
| endif |
| |
| # decode the BUILDTYPE value and set BUILDMODE correspondingly |
| ifeq ($(BUILDTYPE),8s) |
| bmode = optimized,narrow |
| endif # ifeq ($(BUILDTYPE),8s) |
| |
| ifeq ($(BUILDTYPE),8S) |
| bmode = optimized,wide |
| endif # ifeq ($(BUILDTYPE),8s) |
| |
| ifeq ($(BUILDTYPE),8d) |
| bmode = shared,optimized,narrow |
| endif # ifeq ($(BUILDTYPE),8d) |
| |
| ifeq ($(BUILDTYPE),8D) |
| bmode = shared,optimized,wide |
| endif # ifeq ($(BUILDTYPE),8d) |
| |
| ifeq ($(BUILDTYPE),11s) |
| bmode = debug,narrow |
| endif # ifeq ($(BUILDTYPE),11s) |
| |
| ifeq ($(BUILDTYPE),11S) |
| bmode = debug,wide |
| endif # ifeq ($(BUILDTYPE),11s) |
| |
| # 11d - single-thread, debug, shared |
| ifeq ($(BUILDTYPE),11d) |
| bmode = debug,shared,narrow |
| endif # ifeq ($(BUILDTYPE),11d) |
| |
| ifeq ($(BUILDTYPE),11D) |
| bmode = debug,shared,wide |
| endif # ifeq ($(BUILDTYPE),11d) |
| |
| # 12s - multi-thread, optimized, static |
| ifeq ($(BUILDTYPE),12s) |
| bmode = pthreads,optimized,narrow |
| endif # ifeq ($(BUILDTYPE),12s) |
| |
| ifeq ($(BUILDTYPE),12S) |
| bmode = pthreads,optimized,wide |
| endif # ifeq ($(BUILDTYPE),12s) |
| |
| # 12d - multi-thread, optimized, shared |
| ifeq ($(BUILDTYPE),12d) |
| bmode = pthreads,shared,optimized,narrow |
| endif # ifeq ($(BUILDTYPE),12d) |
| |
| ifeq ($(BUILDTYPE),12D) |
| bmode = pthreads,shared,optimized,wide |
| endif # ifeq ($(BUILDTYPE),12d) |
| |
| # 15s - multi-thread, debug, static |
| ifeq ($(BUILDTYPE),15s) |
| bmode = debug,pthreads,narrow |
| endif # ifeq ($(BUILDTYPE),15s) |
| |
| ifeq ($(BUILDTYPE),15S) |
| bmode = debug,pthreads,wide |
| endif # ifeq ($(BUILDTYPE),15s) |
| |
| # 15d - multi-thread, debug, shared |
| ifeq ($(BUILDTYPE),15d) |
| bmode = debug,pthreads,shared,narrow |
| endif # ifeq ($(BUILDTYPE),15d) |
| |
| ifeq ($(BUILDTYPE),15D) |
| bmode = debug,pthreads,shared,wide |
| endif # ifeq ($(BUILDTYPE),15d) |
| |
| ifneq ($(BUILDTYPE),) |
| ifeq ($(bmode),) |
| $(error "unknown BUILDTYPE value: '$(BUILDTYPE)'") |
| endif |
| endif |
| |
| ifeq ($(TOPDIR),) |
| # during the first (non-recursive) invocation only, |
| # check to make sure at most one of BUILDTYPE and BUILDMODE |
| # is defined |
| ifneq ($(BUILDTYPE),) |
| ifneq ($(BUILDMODE),) |
| $(error "at most one of BUILDMODE and BUILDTYPE may be defined") |
| else |
| BUILDMODE=$(bmode) |
| endif |
| endif |
| TOPDIR = $(CURDIR) |
| endif |
| |
| ifeq ($(filter /%,$(CONFIG)),) |
| ifeq ($(filter %/%,$(CONFIG)),) |
| configpath = $(TOPDIR)/etc/config/$(CONFIG) |
| else |
| configpath = $(TOPDIR)/$(CONFIG) |
| endif |
| else |
| configpath = $(CONFIG) |
| endif |
| |
| include $(configpath) |
| |
| ETCDIR = $(TOPDIR)/etc/config |
| |
| ifeq ($(findstring debug,$(BUILDMODE)),debug) |
| ifeq ($(findstring optimized,$(BUILDMODE)),optimized) |
| $(error "cannot have both debug and optimized options") |
| endif |
| endif |
| |
| # unless $(LD) is set, use the same command to link as to compile |
| ifeq ($(LD),ld) |
| LD = $(CXX) |
| endif |
| |
| ifeq ($(AS_EXT),) |
| # assume the .S extension for assembly files by default, |
| # unless specified otherwise in the config file |
| AS_EXT = ".S" |
| endif |
| |
| # debug/optimized |
| ifeq ($(findstring debug,$(BUILDMODE)),debug) |
| CXXFLAGS += $(DEBUG_CXXFLAGS) |
| CPPFLAGS += -D_RWSTDDEBUG $(DEBUG_CPPFLAGS) |
| else |
| # TODO - check the number, check if the compiler supports it |
| ifeq ($(findstring optimized,$(BUILDMODE)),optimized) |
| CXXFLAGS += $(OPTMZ_CXXFLAGS) |
| CPPFLAGS += $(OPTMZ_CPPFLAGS) |
| endif |
| endif |
| |
| ifeq ($(SHARED_SUFFIX),) |
| # shared library suffix default (may be set in config file) |
| SHARED_SUFFIX = .so |
| endif |
| |
| ifeq ($(STATIC_SUFFIX),) |
| # archive library suffix default (may be set in config file) |
| STATIC_SUFFIX = .a |
| endif |
| |
| # shared/archive |
| ifeq ($(findstring shared,$(BUILDMODE)),shared) |
| CXXFLAGS += $(SHARED_CXXFLAGS) |
| CPPFLAGS += $(SHARED_CPPFLAGS) |
| LDFLAGS += $(SHARED_LDFLAGS) |
| LIBSUFFIX = $(SHARED_SUFFIX) |
| else |
| CXXFLAGS += $(STATIC_CXXFLAGS) |
| CPPFLAGS += $(STATIC_CPPFLAGS) |
| LDFLAGS += $(STATIC_LDFLAGS) |
| LIBSUFFIX = $(STATIC_SUFFIX) |
| |
| # not applicable to non-shared builds |
| PICFLAGS = |
| LDSOFLAGS = |
| RPATH = |
| endif |
| |
| # POSIX, Solaris, DCE threads |
| ifeq ($(findstring pthreads,$(BUILDMODE)),pthreads) |
| CPPFLAGS += $(MULTI_CPPFLAGS_POSIX) |
| LDFLAGS += $(MULTI_LDFLAGS_POSIX) |
| else |
| ifeq ($(findstring dcethreads,$(BUILDMODE)),dcethreads) |
| ifneq ($(OSNAME),OSF1) |
| $(error "DCE threads not suported on this platform:" $(OSNAME)) |
| endif |
| |
| CPPFLAGS += $(MULTI_CPPFLAGS_DCE) |
| LDFLAGS += $(MULTI_LDFLAGS_DCE) |
| else |
| ifeq ($(findstring threads,$(BUILDMODE)),threads) |
| ifneq ($(OSNAME),SunOS) |
| $(error "Solaris threads not suported on this platform: " $(OSNAME)) |
| endif |
| |
| CPPFLAGS += $(MULTI_CPPFLAGS_SOLARIS) |
| LDFLAGS += $(MULTI_LDFLAGS_SOLARIS) |
| else |
| CPPFLAGS += $(SINGL_CPPFLAGS) |
| LDFLAGS += $(SINGL_LDFLAGS) |
| endif |
| endif |
| endif |
| |
| # wide (typically 64-bit) mode |
| ifeq ($(findstring wide,$(BUILDMODE)),wide) |
| CXXFLAGS += $(CXXFLAGS.wide) |
| LDFLAGS += $(LDFLAGS.wide) |
| LDSOFLAGS += $(LDSOFLAGS.wide) |
| ARFLAGS += $(ARFLAGS.wide) |
| endif |
| ifeq ($(findstring narrow,$(BUILDMODE)),narrow) |
| CXXFLAGS += $(CXXFLAGS.narrow) |
| LDFLAGS += $(LDFLAGS.narrow) |
| LDSOFLAGS += $(LDSOFLAGS.narrow) |
| ARFLAGS += $(ARFLAGS.narrow) |
| endif |
| |
| # platform is determined as {OS-name}-{OS-version}-{hardware} |
| PLATFORM := $(shell uname -srm | sed "s/[ \/]/-/g") |
| |
| ifeq ($(OSNAME),SunOS) |
| # Sun recommends to use uname -p rather than the POSIX uname -m |
| PLATFORM := $(shell uname -srp | sed "s/[ \/]/-/g") |
| else |
| ifeq ($(OSNAME),AIX) |
| PLATFORM := $(shell uname -srv | awk '{ print $$1 "-" $$3 "." $$2 }') |
| else |
| ifeq ($(findstring CYGWIN,$(OSNAME)),CYGWIN) |
| PLATFORM := $(shell uname -sm | sed "s/[ \/]/-/g") |
| endif |
| endif |
| endif |
| |
| # harmonize all the different Intel IA32 chips |
| PLATFORM := $(subst i486,i86,$(PLATFORM)) |
| PLATFORM := $(subst i586,i86,$(PLATFORM)) |
| PLATFORM := $(subst i686,i86,$(PLATFORM)) |
| PLATFORM := $(shell echo $(PLATFORM) | tr "[:upper:]" "[:lower:]") |
| |
| CONFIG_H := $(CXX)-$(CCVER)-$(BUILDTYPE) |
| |
| # name of the library w/o the prefix and suffix |
| # suitable for use by the linker after the -l option |
| LIBBASE = std$(BUILDTYPE) |
| |
| # full library filename (including suffix) |
| LIBNAME = lib$(LIBBASE)$(LIBSUFFIX) |
| |
| ifeq ($(DEPENDDIR),) |
| DEPENDDIR=.depend |
| endif |
| |
| # obtain library version number from the macro _RWSTD_VER |
| # #defined in the rw/_config.h library header |
| LIBVER := $(shell awk '/^.define _RWSTD_VER / { major = substr ($$3, 3, 2); minor = substr ($$3, 5, 2); micro = substr ($$3, 7, 2); print (major + 0) "." (minor + 0) "." (micro + 0) }' $(TOPDIR)/include/rw/_config.h) |
| |
| ######################################################################## |
| # TARGETS |
| ######################################################################## |
| |
| all: libstd |
| |
| # make-builddir function: creates the build directory tree |
| # defined as a single shell command to avoid executing each command |
| # in a separate subshell |
| define make-builddir |
| [ "$(buildpath)" = "" -o -x $(buildpath) ] && exit 0; \ |
| echo "creating BUILDDIR=$(buildpath)"; \ |
| mkdir -p $(MAKEDIRS); \ |
| [ $$? -ne 0 ] && { \ |
| echo "unable to create build directory"; \ |
| exit 1; \ |
| }; \ |
| ln -sf $(TOPDIR)/GNUmakefile $(buildpath); \ |
| ln -sf $(ETCDIR)/GNUmakefile.cfg $(buildpath)/include/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.lib $(LIBDIR)/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.rwt $(buildpath)/rwtest/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.exm $(EXMDIR)/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.tst $(TSTDIR)/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.ph $(PHTSTDIR)/GNUmakefile; \ |
| ln -sf $(ETCDIR)/GNUmakefile.bin $(BINDIR)/GNUmakefile; \ |
| ln -sf $(ETCDIR)/makefile.common $(buildpath); \ |
| ln -sf $(ETCDIR)/makefile.rules $(buildpath); \ |
| ln -sf $(ETCDIR)/configure.sh $(buildpath)/include/configure; \ |
| ln -sf $(BINDIR)/exec $(buildpath)/run; \ |
| ln -sf $(BINDIR)/exec $(BINDIR)/run; \ |
| ln -sf $(ETCDIR)/run_locale_utils.sh $(BINDIR)/run_utils; \ |
| ln -sf $(BINDIR)/exec $(TSTDIR)/run; \ |
| ln -sf $(BINDIR)/exec $(PHTSTDIR)/run; \ |
| ln -sf $(BINDIR)/exec $(EXMDIR)/run |
| endef # make-builddir |
| |
| |
| # create $(MAKEFILE_IN) |
| # |
| # NOTE: adding a new variable here that is used by the configuration |
| # machinery requires replacing $BUILDDIR/$(MAKEFILE_IN) as well |
| # as $BUILDDIR/include/vars.sh generated from this file and |
| # used by the libc_decl.sh script |
| $(MAKEFILE_IN): $(configpath) |
| @( $(make-builddir); \ |
| echo "generating $(MAKEFILE_IN) from $(configpath)" \ |
| && echo "TOPDIR = $(TOPDIR)" >> $(MAKEFILE_IN) \ |
| && echo "BUILDDIR = $(buildpath)" >> $(MAKEFILE_IN) \ |
| && echo "CONFIG = $$""(TOPDIR)/etc/config/$(CONFIG)" \ |
| >> $(MAKEFILE_IN) \ |
| && echo "CONFIG_H = $(CONFIG_H)" >> $(MAKEFILE_IN) \ |
| && echo "BUILDTYPE = $(BUILDTYPE)" >> $(MAKEFILE_IN) \ |
| && echo "BUILDMODE = $(BUILDMODE)" >> $(MAKEFILE_IN) \ |
| && echo "CXX = $(CXX)" >> $(MAKEFILE_IN) \ |
| && echo "CXXFLAGS = $(CXXFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "PRELINKFLAGS = $(PRELINKFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "PICFLAGS = $(PICFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "CPPFLAGS = $(CPPFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "WARNFLAGS = $(WARNFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "DEPENDFLAGS = $(DEPENDFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "DEPENDFLAGS.cpp = $(DEPENDFLAGS.cpp)" >> $(MAKEFILE_IN) \ |
| && echo "DEPENDFLAGS$(AS_EXT) = $(value DEPENDFLAGS$(AS_EXT))" \ |
| >> $(MAKEFILE_IN) \ |
| && echo "AS_EXT = $(AS_EXT)" >> $(MAKEFILE_IN) \ |
| && echo "LD = $(LD)" >> $(MAKEFILE_IN) \ |
| && echo "LDFLAGS = $(LDFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "LDLIBS = $(LDLIBS)" >> $(MAKEFILE_IN) \ |
| && echo "LDSOFLAGS = $(LDSOFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "LIBM = $(LIBM)" >> $(MAKEFILE_IN) \ |
| && echo "MAPFLAGS = $(MAPFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "RPATH = $(RPATH)" >> $(MAKEFILE_IN) \ |
| && [ "$(MAPFILE)" = "" ] \ |
| || echo "MAPFILE = $$""(TOPDIR)/$(MAPFILE)" >> $(MAKEFILE_IN) \ |
| && echo "RUNFLAGS = -t 300" >> $(MAKEFILE_IN) \ |
| && echo "DEPENDDIR = $(DEPENDDIR)" >> $(MAKEFILE_IN) \ |
| && echo "PHDIR = $(PHDIR)" >> $(MAKEFILE_IN) \ |
| && echo "PHWARNFLAGS = $(PHWARNFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "LIBSUFFIX = $(LIBSUFFIX)" >> $(MAKEFILE_IN) \ |
| && echo "LIBBASE = std$$""(BUILDTYPE)" >> $(MAKEFILE_IN) \ |
| && echo "LIBVER = $(LIBVER)" >> $(MAKEFILE_IN) \ |
| && echo "LIBNAME = lib$$""(LIBBASE)$$""(LIBSUFFIX)" \ |
| >> $(MAKEFILE_IN) \ |
| && echo "AR = $(AR)" >> $(MAKEFILE_IN) \ |
| && echo "ARFLAGS = $(ARFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "CCVER = $(CCVER)" >> $(MAKEFILE_IN) \ |
| && echo "SHARED = $(SHARED)" >> $(MAKEFILE_IN) \ |
| && echo "CATFILE = $(CATFILE)" >> $(MAKEFILE_IN) \ |
| && echo "OMIT_EXM_SRCS = $(OMIT_EXM_SRCS)" >> $(MAKEFILE_IN) \ |
| && echo "OMIT_TST_SRCS = $(OMIT_TST_SRCS)" >> $(MAKEFILE_IN) \ |
| && echo "BUILDTAG = $(BUILDTAG)" >> $(MAKEFILE_IN) \ |
| && echo "PLATFORM = $(PLATFORM)" >> $(MAKEFILE_IN) \ |
| && echo "DEFAULT_SHROBJ = $(DEFAULT_SHROBJ)" >> $(MAKEFILE_IN) \ |
| && echo "WITH_CADVISE = $(WITH_CADVISE)" >> $(MAKEFILE_IN) \ |
| && echo "CADVISEFLAGS = $(CADVISEFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "WITH_PURIFY = $(WITH_PURIFY)" >> $(MAKEFILE_IN) \ |
| && echo "PURIFYFLAGS = $(PURIFYFLAGS)" >> $(MAKEFILE_IN) \ |
| && echo "CXX_REPOSITORY = $(CXX_REPOSITORY)" >> $(MAKEFILE_IN)); |
| |
| # creates the build directory tree and generates makefile.in |
| builddir: $(MAKEFILE_IN) |
| @echo "build directory created: BUILDDIR=$(BUILDDIR)" |
| |
| |
| # prevent trying to make makefile.in when $(BUILDDIR) is |
| # not defined and -include $(BUILDDIR)/makefile.in fails |
| makefile.in: |
| |
| |
| .DEFAULT: |
| @$(MAKE) -C$(buildpath) $(MAKEFLAGS) $(MAKECMDGOALS) \ |
| BUILDDIR=$(buildpath) |
| |
| |
| else # ifneq ($(in_topdir),1) ############################################## |
| |
| ###################################################################### |
| # THIS BLOCK IS EVALUATED ONLY WHEN MAKE IS INVOKED IN BUILDDIR |
| ###################################################################### |
| |
| all: config lib examples util rwtest tests $(PHDTSTDIR) |
| |
| # configure (create config.h) |
| config: |
| @$(MAKE) -C$(BUILDDIR)/include |
| |
| # build utilities |
| util: |
| @$(MAKE) -C$(BINDIR) |
| |
| # build library |
| lib: |
| @$(MAKE) -C$(LIBDIR) |
| |
| # build the test library |
| rwtest: |
| @$(MAKE) -C$(BUILDDIR)/rwtest |
| |
| # build tests, ignore failures |
| tests: |
| -$(MAKE) -C$(TSTDIR) |
| |
| # build the Plum Hall test suite, ignore failures |
| phtst: |
| -@$(MAKE) -C$(PHTSTDIR) |
| |
| # make examples, ignore failures |
| examples: |
| -@$(MAKE) -C$(EXMDIR) |
| |
| # install library, headers, and utilities |
| install: |
| mkdir -p $(PREFIX) |
| $(MAKE) -Clib $@ |
| $(MAKE) -Cbin $@ |
| mkdir -p $(PREFIX)/include |
| cp include/config.h $(PREFIX)/include |
| cp -Rf $(TOPDIR)/include $(PREFIX) |
| |
| # try each submakefile |
| .DEFAULT: |
| -@$(MAKE) -C$(BUILDDIR)/include $@ |
| -@$(MAKE) -C$(LIBDIR) $@ |
| -@$(MAKE) -C$(BUILDDIR)/rwtest $@ |
| -@$(MAKE) -C$(BUILDDIR)/bin $@ |
| -@$(MAKE) -C$(TSTDIR) $@ |
| -@$(MAKE) -C$(PHTSTDIR) $@ |
| -@$(MAKE) -C$(EXMDIR) $@ |
| |
| endif # ($(CURDIR),$(TOPDIR)) |
| |
| |
| .PHONY: all bin builddir examples install lib phtst post rwtest tests util |