| # Copyright 2009 The Go Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file. |
| |
| # Makefile included by all other Go makefiles. |
| |
| # Clear variables that must come from Makefiles, |
| # not the environment. |
| LIB:= |
| TARG:= |
| GOFILES:= |
| HFILES:= |
| OFILES:= |
| YFILES:= |
| |
| # GOROOT must be set. |
| ifeq ($(GOROOT),) |
| $(error $$GOROOT is not set; use gomake or set $$GOROOT in your environment) |
| endif |
| |
| # Set up GOROOT_FINAL, GOARCH, GOOS if needed. |
| GOROOT_FINAL?=$(GOROOT) |
| |
| ifeq ($(GOHOSTOS),) |
| GOHOSTOS:=$(shell uname | tr A-Z a-z | sed 's/mingw/windows/; s/.*windows.*/windows/') |
| endif |
| |
| ifeq ($(GOOS),) |
| GOOS:=$(GOHOSTOS) |
| endif |
| |
| GOOS_LIST=\ |
| darwin\ |
| freebsd\ |
| linux\ |
| openbsd\ |
| plan9\ |
| windows\ |
| |
| GOARCH_LIST=\ |
| 386\ |
| amd64\ |
| arm\ |
| |
| ifeq ($(filter $(GOOS),$(GOOS_LIST)),) |
| $(error Invalid $$GOOS '$(GOOS)'; must be one of: $(GOOS_LIST)) |
| endif |
| |
| ifeq ($(GOHOSTARCH),) |
| ifeq ($(GOHOSTOS),darwin) |
| # Even on 64-bit platform, darwin uname -m prints i386. |
| # Check for amd64 with sysctl instead. |
| GOHOSTARCH:=${shell if sysctl machdep.cpu.extfeatures | grep EM64T >/dev/null; then echo amd64; else uname -m | sed 's/i386/386/'; fi} |
| else |
| # Ask uname -m for the processor. |
| GOHOSTARCH:=${shell uname -m | sed 's/^..86$$/386/; s/^.86$$/386/; s/x86_64/amd64/; s/arm.*/arm/'} |
| endif |
| endif |
| |
| ifeq ($(GOARCH),) |
| GOARCH:=$(GOHOSTARCH) |
| endif |
| |
| # darwin requires GOHOSTARCH match GOARCH |
| ifeq ($(GOOS),darwin) |
| GOHOSTARCH:=$(GOARCH) |
| endif |
| |
| ifeq ($(filter $(GOARCH),$(GOARCH_LIST)),) |
| $(error Invalid $$GOARCH '$(GOARCH)'; must be one of: $(GOARCH_LIST)) |
| endif |
| |
| ifeq ($(GOARCH),386) |
| O:=8 |
| else ifeq ($(GOARCH),amd64) |
| O:=6 |
| else ifeq ($(GOARCH),arm) |
| O:=5 |
| ifneq ($(GOOS),linux) |
| $(error Invalid $$GOOS '$(GOOS)' for GOARCH=arm; must be linux) |
| endif |
| else |
| $(error Missing $$O for '$(GOARCH)') |
| endif |
| |
| # Save for recursive make to avoid recomputing. |
| export GOARCH GOOS GOHOSTARCH GOHOSTOS GOARCH_LIST GOOS_LIST |
| |
| # ugly hack to deal with whitespaces in $GOROOT |
| nullstring := |
| space := $(nullstring) # a space at the end |
| QUOTED_GOROOT:=$(subst $(space),\ ,$(GOROOT)) |
| |
| # default GOBIN |
| ifndef GOBIN |
| GOBIN=$(QUOTED_GOROOT)/bin |
| endif |
| QUOTED_GOBIN=$(subst $(space),\ ,$(GOBIN)) |
| |
| AS=${O}a |
| CC=${O}c |
| GC=${O}g |
| LD=${O}l |
| OS=568vq |
| CFLAGS=-FVw |
| |
| HOST_CC=quietgcc |
| HOST_LD=quietgcc |
| HOST_O=o |
| HOST_YFLAGS=-d |
| HOST_AR?=ar |
| |
| # These two variables can be overridden in the environment |
| # to build with other flags. They are like $CFLAGS and $LDFLAGS |
| # in a more typical GNU build. We are more explicit about the names |
| # here because there are different compilers being run during the |
| # build (both gcc and 6c, for example). |
| HOST_EXTRA_CFLAGS?=-ggdb -O2 |
| HOST_EXTRA_LDFLAGS?= |
| |
| # The -fno-common here is not necessary, but some compilers |
| # on OS X seem to set it by default. Setting it here keeps the build |
| # working in that non-standard context. |
| HOST_CFLAGS=-fno-common -I"$(GOROOT)/include" $(HOST_EXTRA_CFLAGS) |
| HOST_LDFLAGS=$(HOST_EXTRA_LDFLAGS) |
| PWD=$(shell pwd) |
| |
| # Decide whether use of cgo is okay. |
| ifeq ($(CGO_ENABLED),) |
| # Default on... |
| CGO_ENABLED:=1 |
| ifeq ($(GOARCH),arm) # ... but not on ARM |
| CGO_ENABLED:=0 |
| endif |
| ifeq ($(GOOS),plan9) # ... and not on Plan 9 |
| CGO_ENABLED:=0 |
| endif |
| ifeq ($(GOOS),openbsd) # ... and not on OpenBSD |
| CGO_ENABLED:=0 |
| endif |
| endif |
| |
| # Make environment more standard. |
| LANG:= |
| LC_ALL:=C |
| LC_CTYPE:=C |
| GREP_OPTIONS:= |
| GREP_COLORS:= |
| export LANG LC_ALL LC_CTYPE GREP_OPTIONS GREP_COLORS |
| |
| go-env: |
| @echo export GOARCH="$(GOARCH)" |
| @echo export GOOS="$(GOOS)" |
| @echo export GOHOSTARCH="$(GOHOSTARCH)" |
| @echo export GOHOSTOS="$(GOHOSTOS)" |
| @echo export CGO_ENABLED="$(CGO_ENABLED)" |
| @echo export O="$O" |
| @echo export AS="$(AS)" |
| @echo export CC="$(CC)" |
| @echo export GC="$(GC)" |
| @echo export LD="$(LD)" |
| @echo export OS="$(OS)" |
| @echo export CFLAGS="$(CFLAGS)" |
| @echo export LANG="$(LANG)" |
| @echo export LC_ALL="$(LC_ALL)" |
| @echo export LC_CTYPE="$(LC_CTYPE)" |
| @echo export GREP_OPTIONS="$(GREP_OPTIONS)" |
| @echo export GREP_COLORS="$(GREP_COLORS)" |
| @echo MAKE_GO_ENV_WORKED=1 |
| |
| # Don't let the targets in this file be used |
| # as the default make target. |
| .DEFAULT_GOAL:= |