Fixes for Canadian Cross stuff.
authorIan Lance Taylor <ian@airs.com>
Mon, 10 May 1993 19:51:37 +0000 (19:51 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 10 May 1993 19:51:37 +0000 (19:51 +0000)
test-build.mk

index 54c5ae30b55499ffc806cb51c3ecedcb2ded7562..bc7ad56f4868111a7a55d9f8b4d47f738e6362df 100644 (file)
 ### which is the named used for ./configure, and also the prefix for the
 ### various files and directories used in a three stage.
 
+### The variable target may be set for the target of a cross-compilation.
+
+### The variable build may be to build a tree on a machine other than the host.
+
 ifndef host
 error:
        @echo You must set the variable \"host\" to use this Makefile ; exit 1
@@ -43,7 +47,7 @@ CVS_TAG :=
 CVS_MODULE := latest
 
 ### Historically, this was identical to CVS_TAG.  This is changing.
-RELEASE_TAG := latest-930319
+RELEASE_TAG := latest-930426
 
 ### Historically, binaries were installed here.  This is changing.
 release_root := $(ROOTING)/$(RELEASE_TAG)
@@ -63,6 +67,68 @@ override MFLAGS      :=
 
 SHELL := /bin/sh
 
+ifdef build
+
+# We are building on a machine other than the host.  We rely upon
+# previously built cross-compilers from the build machine to the host
+# (used to build the executables) and from the build machine to the
+# target (used to build the libraries).
+
+AR             := $(host)-ar
+AR_FOR_TARGET  := $(target)-ar
+AS             := $(host)-as
+AS_FOR_TARGET  := $(target)-as
+CC             := $(host)-gcc
+CC_FOR_BUILD   := gcc
+CC_FOR_TARGET  := $(target)-gcc
+CXX            := $(host)-c++
+CXX_FOR_TARGET := $(target)-c++
+GCC            := $(host)-gcc -O
+GXX            := $(host)-g++
+GXX_FOR_TARGET := $(target)-g++
+HOST_PREFIX    := $(build)-
+HOST_PREFIX_1  := $(build)-
+MAKEINFO       := makeinfo
+MUNCH_NM       := $(host)-nm
+NM             := $(host)-nm
+NM_FOR_TARGET  := $(target)-nm
+RANLIB         := $(host)-ranlib
+RANLIB_FOR_TARGET      := $(target)-ranlib
+
+FLAGS_TO_PASS := \
+       "AR=$(AR)" \
+       "AR_FOR_TARGET=$(AR_FOR_TARGET)" \
+       "AS=$(AS)" \
+       "AS_FOR_TARGET=$(AS_FOR_TARGET)" \
+       "CC=$(CC)" \
+       "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
+       "CC_FOR_TARGET=$(CC_FOR_TARGET)" \
+       "CXX=$(CXX)" \
+       "CXX_FOR_TARGET=$(CXX_FOR_TARGET)" \
+       "CFLAGS=$(CFLAGS)" \
+       "GCC=$(GCC)" \
+       "HOST_PREFIX=$(HOST_PREFIX)" \
+       "HOST_PREFIX_1=$(HOST_PREFIX_1)" \
+       "MAKEINFO=$(MAKEINFO)" \
+       "MF=$(MF)" \
+       "MUNCH_NM=$(MUNCH_NM)" \
+       "NM=$(NM)" \
+       "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
+       "RANLIB=$(RANLIB)" \
+       "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
+       "RELEASE_TAG=$(RELEASE_TAG)" \
+       "TIME=$(TIME)" \
+       "build=$(build)" \
+       "host=$(host)"
+
+# We must pass the build cross host tools in the environment of
+# configure, so that autoconf scripts will run the right programs.
+configenv := AR="$(AR)" CC="$(CC)" RANLIB="$(RANLIB)"
+
+else
+
+# This is a normal build on the host machine.
+
 FLAGS_TO_PASS := \
        "GCC=$(GCC)" \
        "CFLAGS=$(CFLAGS)" \
@@ -75,15 +141,15 @@ ifneq  '$(CC)' 'cc'
 FLAGS_TO_PASS := "CC=$(CC)" $(FLAGS_TO_PASS)
 endif
 
+configenv :=
+
+endif
+
 
+# These are the prefixes used for Cygnus builds.
 prefixes       = --prefix=$(release_root) --exec-prefix=$(release_root)/H-$(host)
-relbindir      = $(release_root)/H-$(host)/bin
 
-ifeq ($(host),mips-dec-ultrix)
-configargs     = -with-gnu-as
-else
-configargs     =
-endif
+relbindir      = $(release_root)/H-$(host)/bin
 
 ### general config stuff
 WORKING_DIR    := $(host)-objdir
@@ -91,13 +157,33 @@ STAGE1DIR  := $(WORKING_DIR).1
 STAGE2DIR      := $(WORKING_DIR).2
 STAGE3DIR      := $(WORKING_DIR).3
 INPLACEDIR     := $(host)-in-place
-HOLESDIR       := $(host)-holes
+
+# Arrange to find the needed programs.  If we are building on a
+# machine other than the host, we must find the cross-compilers.
+
+ifdef build
+
+holesys                := $(build)
+HOLESSTAMP     := $(holesys)-stamp-holes $(build)-x-$(host)-stamp-holes $(build)-x-$(target)-stamp-holes
+HOLESDIR       := $(holesys)-holes
+BUILD_HOST_HOLES_DIR   := $(build)-x-$(host)-holes
+BUILD_TARGET_HOLES_DIR := $(build)-x-$(target)-holes
+
+SET_NATIVE_HOLES := SHELL=sh ; PATH=`pwd`/$(HOLESDIR):`pwd`/$(BUILD_HOST_HOLES_DIR):`pwd`/$(BUILD_TARGET_HOLES_DIR) ; export PATH ; export SHELL ;
+SET_CYGNUS_PATH  := SHELL=sh ; PATH=`pwd`/$(HOLESDIR):`pwd`/$(BUILD_HOST_HOLES_DIR):`pwd`/$(BUILD_TARGET_HOLES_DIR) ; export PATH ; export SHELL ;
+SET_LATEST_PATH  := SHELL=sh ; PATH=/usr/latest/bin:`pwd`/$(HOLESDIR):`pwd`/$(BUILD_HOST_HOLES_DIR):`pwd`/$(BUILD_TARGET_HOLES_DIR) ; export PATH ; export SHELL ;
+
+else
+
+holesys                := $(host)
+HOLESSTAMP     := $(holesys)-stamp-holes
+HOLESDIR       := $(holesys)-holes
 
 SET_NATIVE_HOLES := SHELL=sh ; PATH=`pwd`/$(HOLESDIR) ; export PATH ; export SHELL ;
 SET_CYGNUS_PATH  := SHELL=sh ; PATH=$(relbindir):`pwd`/$(HOLESDIR) ; export PATH ; export SHELL ;
 SET_LATEST_PATH  := SHELL=sh ; PATH=/usr/latest/bin:`pwd`/$(HOLESDIR) ; export PATH ; export SHELL ;
 
-
+endif
 
 .PHONY: all
 ifdef target
@@ -105,20 +191,42 @@ ifdef target
 ## This is a cross compilation
 ##
 arch           = $(host)-x-$(target)
-config         = $(host) -target=$(target)
+config         = -host=$(host) -target=$(target)
 FLAGS_TO_PASS  := $(FLAGS_TO_PASS) "target=$(target)"
 
+ifdef build
+all:   do-cygnus do-latest
+build-all: build-cygnus build-latest
+else
 all:   do-native do-latest
 build-all: build-native build-latest
+endif
+
+ifeq ($(target),mips-idt-ecoff)
+configargs     = -with-gnu-as
+else
+configargs     =
+endif
 
 else
 ##
 ## This is a native compilation
 ##
 arch           = $(host)
-config         = $(host)
+config         = -host=$(host)
+ifdef build
+all:   do-cygnus do-latest
+else
 all:   $(host)-stamp-3stage-done
+endif
 #all:  in-place do1 do2 do3 comparison
+
+ifeq ($(subst mips-sgi-irix4,mips-dec-ultrix,$(host)),mips-dec-ultrix)
+configargs     = -with-gnu-as
+else
+configargs     =
+endif
+
 endif
 
 NATIVEDIR      := $(arch)-native-objdir
@@ -130,17 +238,17 @@ everything:        do-cross
 #everything:   in-place do1 do2 do3 comparison do-cygnus 
 
 .PHONY: do-native
-do-native: $(host)-stamp-holes $(arch)-stamp-native
+do-native: $(HOLESSTAMP) $(arch)-stamp-native
 do-native-config: $(arch)-stamp-native-configured
-build-native: $(host)-stamp-holes $(arch)-stamp-native-checked
-config-native: $(host)-stamp-holes $(arch)-stamp-native-configured
+build-native: $(HOLESSTAMP) $(arch)-stamp-native-checked
+config-native: $(HOLESSTAMP) $(arch)-stamp-native-configured
 
-$(arch)-stamp-native: $(host)-stamp-holes
+$(arch)-stamp-native: $(HOLESSTAMP)
        $(SET_NATIVE_HOLES) $(TIME) $(GNU_MAKE) -f test-build.mk  $(arch)-stamp-native-installed $(FLAGS_TO_PASS) 
        if [ -f CLEAN_ALL ] ; then rm -rf $(NATIVEDIR) ; else true ; fi
        touch $(arch)-stamp-native
 
-$(arch)-stamp-native-installed: $(host)-stamp-holes $(arch)-stamp-native-checked
+$(arch)-stamp-native-installed: $(HOLESSTAMP) $(arch)-stamp-native-checked
        $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) install 
        $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) install-info 
        touch $@
@@ -149,56 +257,58 @@ $(arch)-stamp-native-checked: $(arch)-stamp-native-built
 #      cd $(NATIVEDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) check 
        touch $@
 
-$(arch)-stamp-native-built: $(host)-stamp-holes $(arch)-stamp-native-configured
+$(arch)-stamp-native-built: $(HOLESSTAMP) $(arch)-stamp-native-configured
        $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) all 
        $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) info 
        touch $@
 
-$(arch)-stamp-native-configured: $(host)-stamp-holes
+$(arch)-stamp-native-configured: $(HOLESSTAMP)
        [ -d $(NATIVEDIR) ] || mkdir $(NATIVEDIR)
-       $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+       $(SET_NATIVE_HOLES) cd $(NATIVEDIR) ; $(configenv) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 
 .PHONY: do-cygnus
-do-cygnus: $(host)-stamp-holes $(arch)-stamp-cygnus
-build-cygnus: $(host)-stamp-holes $(arch)-stamp-cygnus-checked
-config-cygnus: $(host)-stamp-holes $(arch)-stamp-cygnus-configured
+do-cygnus: $(HOLESSTAMP) $(arch)-stamp-cygnus
+build-cygnus: $(HOLESSTAMP) $(arch)-stamp-cygnus-checked
+config-cygnus: $(HOLESSTAMP) $(arch)-stamp-cygnus-configured
 
 $(arch)-stamp-cygnus: 
+ifndef build
        [ -f $(relbindir)/gcc ] || (echo "must have gcc available"; exit 1)
+endif
        $(SET_CYGNUS_PATH) $(TIME) $(GNU_MAKE) -f test-build.mk $(arch)-stamp-cygnus-installed  $(FLAGS_TO_PASS)
        if [ -f CLEAN_ALL ] ; then rm -rf $(CYGNUSDIR) ; else true ; fi
        touch $(arch)-stamp-cygnus
 
-$(arch)-stamp-cygnus-installed:  $(host)-stamp-holes $(arch)-stamp-cygnus-checked
+$(arch)-stamp-cygnus-installed:  $(HOLESSTAMP) $(arch)-stamp-cygnus-checked
        $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) install 
        $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) install-info
        touch $@
 
-$(arch)-stamp-cygnus-checked: $(host)-stamp-holes $(arch)-stamp-cygnus-built
+$(arch)-stamp-cygnus-checked: $(HOLESSTAMP) $(arch)-stamp-cygnus-built
 #      cd $(CYGNUSDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) check 
        touch $@
 
-$(arch)-stamp-cygnus-built:  $(host)-stamp-holes $(arch)-stamp-cygnus-configured
+$(arch)-stamp-cygnus-built:  $(HOLESSTAMP) $(arch)-stamp-cygnus-configured
        $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) all 
        $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) info 
        touch $@
 
-$(arch)-stamp-cygnus-configured:  $(host)-stamp-holes
+$(arch)-stamp-cygnus-configured:  $(HOLESSTAMP)
        [ -d $(CYGNUSDIR) ] || mkdir $(CYGNUSDIR)
-       $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(GNUC) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+       $(SET_CYGNUS_PATH) cd $(CYGNUSDIR) ; $(GNUC) $(configenv) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 .PHONY: do-latest
-do-latest: $(host)-stamp-holes $(arch)-stamp-latest
-build-latest: $(host)-stamp-holes $(arch)-stamp-latest-checked
+do-latest: $(HOLESSTAMP) $(arch)-stamp-latest
+build-latest: $(HOLESSTAMP) $(arch)-stamp-latest-checked
 
 $(arch)-stamp-latest:
        $(SET_LATEST_PATH) $(TIME) $(GNU_MAKE) -f test-build.mk $(arch)-stamp-latest-installed  $(FLAGS_TO_PASS)
        touch $(arch)-stamp-latest
 
-
+$(arch)-stamp-latest-installed:  $(HOLESSTAMP) $(arch)-stamp-latest-checked
        $(SET_LATEST_PATH) cd $(LATESTDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) install 
        $(SET_LATEST_PATH) cd $(LATESTDIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) $(GNUC) install-info 
        touch $@
@@ -214,7 +324,7 @@ $(arch)-stamp-latest-built: $(arch)-stamp-latest-configured
 
 $(arch)-stamp-latest-configured:
        [ -d $(LATESTDIR) ] || mkdir $(LATESTDIR)
-       $(SET_LATEST_PATH) cd $(LATESTDIR) ; $(GNUC) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+       $(SET_LATEST_PATH) cd $(LATESTDIR) ; $(GNUC) $(configenv) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 
@@ -248,7 +358,7 @@ $(host)-stamp-in-place-built: $(host)-stamp-in-place-configured
        touch $@
 
 $(host)-stamp-in-place-configured: $(host)-stamp-in-place-cp
-       cd $(INPLACEDIR) ; $(TIME) ./configure $(host) -v $(prefixes) $(configargs)
+       cd $(INPLACEDIR) ; $(configenv) $(TIME) ./configure $(config) -v $(prefixes) $(configargs)
        touch $@
 
 $(host)-stamp-in-place-cp:
@@ -262,9 +372,9 @@ $(host)-stamp-3stage-done: do1 do2 do3 comparison
 
 
 .PHONY: do1
-do1:       $(host)-stamp-holes $(host)-stamp-stage1
-do1-config: $(host)-stamp-holes $(host)-stamp-stage1-configured
-do1-build:  $(host)-stamp-holes $(host)-stamp-stage1-checked
+do1:       $(HOLESSTAMP) $(host)-stamp-stage1
+do1-config: $(HOLESSTAMP) $(host)-stamp-stage1-configured
+do1-build:  $(HOLESSTAMP) $(host)-stamp-stage1-checked
 
 $(host)-stamp-stage1:
        if [ -d $(STAGE1DIR) ] ; then \
@@ -284,7 +394,7 @@ $(host)-stamp-stage1-installed: $(host)-stamp-stage1-checked
        $(SET_NATIVE_HOLES) cd $(WORKING_DIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) "CFLAGS=$(CFLAGS)" install host=$(host)
        $(SET_NATIVE_HOLES) cd $(WORKING_DIR) ; $(TIME) $(MAKE) $(FLAGS_TO_PASS) "CFLAGS=$(CFLAGS)" install-info host=$(host)
 ifeq ($(host),rs6000-ibm-aix)
-       rm $(relbindir)/make
+       -rm $(relbindir)/make
 endif
        touch $@
 
@@ -300,7 +410,7 @@ $(host)-stamp-stage1-built: $(host)-stamp-stage1-configured
 $(host)-stamp-stage1-configured:
        [ -d $(WORKING_DIR) ] || mkdir $(WORKING_DIR)
        $(SET_NATIVE_HOLES) cd $(WORKING_DIR) ; \
-         $(TIME) ../$(TREE)/configure $(host) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+         $(configenv) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 .PHONY: do2
@@ -334,7 +444,7 @@ $(host)-stamp-stage2-built: $(host)-stamp-stage2-configured
 $(host)-stamp-stage2-configured:
        [ -d $(WORKING_DIR) ] || mkdir $(WORKING_DIR)
        $(SET_CYGNUS_PATH) cd $(WORKING_DIR) ; \
-         $(GNUC) $(TIME) ../$(TREE)/configure $(host) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+         $(configenv) $(GNUC) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 .PHONY: do3
@@ -368,7 +478,7 @@ $(host)-stamp-stage3-built: $(host)-stamp-stage3-configured
 $(host)-stamp-stage3-configured:
        [ -d $(WORKING_DIR) ] || mkdir $(WORKING_DIR)
        $(SET_CYGNUS_PATH) cd $(WORKING_DIR) ; \
-         $(GNUC) $(TIME) ../$(TREE)/configure $(host) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
+         $(configenv) $(GNUC) $(TIME) ../$(TREE)/configure $(config) -v --srcdir=../$(TREE) $(prefixes) $(configargs)
        touch $@
 
 # These things are needed by a three-stage, but are not included locally.
@@ -418,19 +528,20 @@ HOLES := \
        touch \
        tr \
        true \
+       uname \
        uudecode \
        wc \
        whoami
 
 ### so far only sun make supports VPATH
-ifeq ($(subst sun3,sun4,$(host)),sun4)
+ifeq ($(subst sun3,sun4,$(holesys)),sun4)
 MAKE_HOLE :=
 else
 MAKE_HOLE := make
 endif
 
 ### solaris 2 -- don't use /usr/ucb/cc
-ifeq (sparc-sun-solaris2,$(host))
+ifeq (sparc-sun-solaris2,$(holesys))
 SET_NATIVE_HOLES := SHELL=sh ; PATH=/opt/SUNWspro/bin:`pwd`/$(HOLESDIR) ; export PATH ; export SHELL ;
 HOLE_DIRS := /usr/ccs/bin
 CC_HOLE :=
@@ -460,9 +571,9 @@ PARTIAL_HOLE_DIRS := \
        /usr/vintage/bin \
        /usr/unsupported/bin
 
-$(HOLESDIR): $(host)-stamp-holes
+$(HOLESDIR): $(holesys)-stamp-holes
 
-$(host)-stamp-holes:
+$(holesys)-stamp-holes:
        -rm -rf $(HOLESDIR)
        -mkdir $(HOLESDIR)
        @for i in $(HOLES) ; do \
@@ -501,6 +612,80 @@ ifdef NUKEM
 endif
        touch $@
 
+# Get the cross-tools for build cross host when not building on the host.
+
+BUILD_HOST_HOLES := \
+       byacc \
+       gcc \
+       makeinfo \
+       $(AR) \
+       $(AS) \
+       $(CC) \
+       $(CXX) \
+       $(GXX) \
+       $(NM) \
+       $(RANLIB)
+
+BUILD_HOLES_DIRS := $(PARTIAL_HOLE_DIRS)
+
+$(BUILD_HOST_HOLES_DIR): $(build)-x-$(host)-stamp-holes
+
+$(build)-x-$(host)-stamp-holes:
+       -rm -rf $(BUILD_HOST_HOLES_DIR)
+       -mkdir $(BUILD_HOST_HOLES_DIR)
+       @for i in $(BUILD_HOST_HOLES) ; do \
+               found= ; \
+               for j in $(BUILD_HOLES_DIRS) ; do \
+                       if [ -x $$j/$$i ] ; then \
+                               ln -s $$j/$$i $(BUILD_HOST_HOLES_DIR) || cp $$j/$$i $(BUILD_HOST_HOLES_DIR) ; \
+                               echo $$i from $$j ; \
+                               found=t ; \
+                               break ; \
+                       fi ; \
+               done ; \
+               case "$$found" in \
+               t) ;; \
+               *) echo $$i is NOT found ;; \
+               esac ; \
+       done
+       touch $@
+
+# Get the cross tools for build cross target when not building on the host.
+
+BUILD_TARGET_HOLES := \
+       byacc \
+       gcc \
+       makeinfo \
+       $(AR_FOR_TARGET) \
+       $(AS_FOR_TARGET) \
+       $(CC_FOR_TARGET) \
+       $(CXX_FOR_TARGET) \
+       $(GXX_FOR_TARGET) \
+       $(NM_FOR_TARGET) \
+       $(RANLIB_FOR_TARGET)
+
+$(BUILD_TARGET_HOLES_DIR): $(build)-x-$(target)-stamp-holes
+
+$(build)-x-$(target)-stamp-holes:
+       -rm -rf $(BUILD_TARGET_HOLES_DIR)
+       -mkdir $(BUILD_TARGET_HOLES_DIR)
+       @for i in $(BUILD_TARGET_HOLES) ; do \
+               found= ; \
+               for j in $(BUILD_HOLES_DIRS) ; do \
+                       if [ -x $$j/$$i ] ; then \
+                               ln -s $$j/$$i $(BUILD_TARGET_HOLES_DIR) || cp $$j/$$i $(BUILD_TARGET_HOLES_DIR) ; \
+                               echo $$i from $$j ; \
+                               found=t ; \
+                               break ; \
+                       fi ; \
+               done ; \
+               case "$$found" in \
+               t) ;; \
+               *) echo $$i is NOT found ;; \
+               esac ; \
+       done
+       touch $@
+
 .PHONY: comparison
 comparison: $(host)-stamp-3stage-compared