Mercurial > hg > CbC > CbC_gcc
diff libgo/Makefile.am @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgo/Makefile.am Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,1515 @@ +# Makefile.am -- Go library Makefile. + +# 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. + +# Process this file with autoreconf to produce Makefile.in. + +# Go support. +SUFFIXES = .c .go .gox .o .obj .lo .a + +if LIBGO_IS_RTEMS +subdirs = testsuite +endif + +SUBDIRS = ${subdirs} + +gcc_version := $(shell $(GOC) -dumpversion) + +MAINT_CHARSET = latin1 + +mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs +PWD_COMMAND = $${PWDCMD-pwd} +STAMP = echo timestamp > + +toolexecdir = $(glibgo_toolexecdir) +toolexeclibdir = $(glibgo_toolexeclibdir) +toolexeclibgodir = $(nover_glibgo_toolexeclibdir)/go/$(gcc_version)/$(target_alias) +libexecsubdir = $(libexecdir)/gcc/$(target_alias)/$(gcc_version) + +LIBFFI = @LIBFFI@ +LIBFFIINCS = @LIBFFIINCS@ + +LIBATOMIC = @LIBATOMIC@ + +WARN_CFLAGS = $(WARN_FLAGS) $(WERROR) + +# -I/-D flags to pass when compiling. +AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS) + +ACLOCAL_AMFLAGS = -I ./config -I ../config + +AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \ + $(SPLIT_STACK) $(WARN_CFLAGS) \ + $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \ + -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \ + -I $(MULTIBUILDTOP)../../gcc/include + +AM_LDFLAGS = + +if USING_SPLIT_STACK +AM_LDFLAGS += -XCClinker $(SPLIT_STACK) +endif + +if LIBGO_IS_AIX +# Using an import file for libgo avoid requiring to use the -brtl flag +# when builing a go program +AM_LDFLAGS += -Wl,-bbigtoc -Wl,-bI:$(srcdir)/libgo.imp +EXTRA_libgo_la_DEPENDENCIES = libgo.imp +endif + +# Multilib support. +MAKEOVERRIDES= + +# Work around what appears to be a GNU make handling MAKEFLAGS +# values defined in terms of make variables, as is the case for CC and +# friends when we are called from the top level Makefile. +AM_MAKEFLAGS = \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ + "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ + "CFLAGS=$(CFLAGS)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ + "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ + "GOC_FOR_TARGET=$(GOC_FOR_TARGET)" \ + "GOC=$(GOC)" \ + "GOCFLAGS=$(GOCFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS=$(LDFLAGS)" \ + "LIBCFLAGS=$(LIBCFLAGS)" \ + "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \ + "MAKE=$(MAKE)" \ + "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \ + "PICFLAG=$(PICFLAG)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \ + "SHELL=$(SHELL)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "libdir=$(libdir)" \ + "includedir=$(includedir)" \ + "prefix=$(prefix)" \ + "tooldir=$(tooldir)" \ + "gxx_include_dir=$(gxx_include_dir)" \ + "AR=$(AR)" \ + "AS=$(AS)" \ + "LD=$(LD)" \ + "RANLIB=$(RANLIB)" \ + "NM=$(NM)" \ + "NM_FOR_BUILD=$(NM_FOR_BUILD)" \ + "NM_FOR_TARGET=$(NM_FOR_TARGET)" \ + "DESTDIR=$(DESTDIR)" \ + "WERROR=$(WERROR)" + +# Subdir rules rely on $(FLAGS_TO_PASS) +FLAGS_TO_PASS = $(AM_MAKEFLAGS) + +if GOC_IS_LLGO +toolexeclib_LTLIBRARIES = libgo-llgo.la +toolexeclib_LIBRARIES = libgobegin-llgo.a +else +toolexeclib_LTLIBRARIES = libgo.la +toolexeclib_LIBRARIES = libgobegin.a libgolibbegin.a +endif + +noinst_LIBRARIES = libgotool.a + +toolexeclibgo_DATA = \ + bufio.gox \ + bytes.gox \ + context.gox \ + crypto.gox \ + encoding.gox \ + errors.gox \ + expvar.gox \ + flag.gox \ + fmt.gox \ + hash.gox \ + html.gox \ + image.gox \ + io.gox \ + log.gox \ + math.gox \ + mime.gox \ + net.gox \ + os.gox \ + path.gox \ + reflect.gox \ + regexp.gox \ + runtime.gox \ + sort.gox \ + strconv.gox \ + strings.gox \ + sync.gox \ + syscall.gox \ + testing.gox \ + time.gox \ + unicode.gox + +toolexeclibgoarchivedir = $(toolexeclibgodir)/archive + +toolexeclibgoarchive_DATA = \ + archive/tar.gox \ + archive/zip.gox + +toolexeclibgocompressdir = $(toolexeclibgodir)/compress + +toolexeclibgocompress_DATA = \ + compress/bzip2.gox \ + compress/flate.gox \ + compress/gzip.gox \ + compress/lzw.gox \ + compress/zlib.gox + +toolexeclibgocontainerdir = $(toolexeclibgodir)/container + +toolexeclibgocontainer_DATA = \ + container/heap.gox \ + container/list.gox \ + container/ring.gox + +toolexeclibgocryptodir = $(toolexeclibgodir)/crypto + +toolexeclibgocrypto_DATA = \ + crypto/aes.gox \ + crypto/cipher.gox \ + crypto/des.gox \ + crypto/dsa.gox \ + crypto/ecdsa.gox \ + crypto/elliptic.gox \ + crypto/hmac.gox \ + crypto/md5.gox \ + crypto/rand.gox \ + crypto/rc4.gox \ + crypto/rsa.gox \ + crypto/sha1.gox \ + crypto/sha256.gox \ + crypto/sha512.gox \ + crypto/subtle.gox \ + crypto/tls.gox \ + crypto/x509.gox + +toolexeclibgocryptox509dir = $(toolexeclibgocryptodir)/x509 + +toolexeclibgocryptox509_DATA = \ + crypto/x509/pkix.gox + +toolexeclibgodatabasedir = $(toolexeclibgodir)/database + +toolexeclibgodatabase_DATA = \ + database/sql.gox + +toolexeclibgodatabasesqldir = $(toolexeclibgodatabasedir)/sql + +toolexeclibgodatabasesql_DATA = \ + database/sql/driver.gox + +toolexeclibgodebugdir = $(toolexeclibgodir)/debug + +toolexeclibgodebug_DATA = \ + debug/dwarf.gox \ + debug/elf.gox \ + debug/gosym.gox \ + debug/macho.gox \ + debug/pe.gox \ + debug/plan9obj.gox \ + debug/xcoff.gox + +toolexeclibgoencodingdir = $(toolexeclibgodir)/encoding + +toolexeclibgoencoding_DATA = \ + encoding/ascii85.gox \ + encoding/asn1.gox \ + encoding/base32.gox \ + encoding/base64.gox \ + encoding/binary.gox \ + encoding/csv.gox \ + encoding/gob.gox \ + encoding/hex.gox \ + encoding/json.gox \ + encoding/pem.gox \ + encoding/xml.gox + +toolexeclibgoexpdir = $(toolexeclibgodir)/exp + +toolexeclibgoexp_DATA = \ + exp/proxy.gox \ + exp/terminal.gox + +toolexeclibgogodir = $(toolexeclibgodir)/go + +toolexeclibgogo_DATA = \ + go/ast.gox \ + go/build.gox \ + go/constant.gox \ + go/doc.gox \ + go/format.gox \ + go/importer.gox \ + go/parser.gox \ + go/printer.gox \ + go/scanner.gox \ + go/token.gox \ + go/types.gox + +toolexeclibgohashdir = $(toolexeclibgodir)/hash + +toolexeclibgohash_DATA = \ + hash/adler32.gox \ + hash/crc32.gox \ + hash/crc64.gox \ + hash/fnv.gox + +toolexeclibgohtmldir = $(toolexeclibgodir)/html + +toolexeclibgohtml_DATA = \ + html/template.gox + +toolexeclibgoimagedir = $(toolexeclibgodir)/image + +toolexeclibgoimage_DATA = \ + image/color.gox \ + image/draw.gox \ + image/gif.gox \ + image/jpeg.gox \ + image/png.gox + +toolexeclibgoimagecolordir = $(toolexeclibgoimagedir)/color + +toolexeclibgoimagecolor_DATA = \ + image/color/palette.gox + +toolexeclibgoindexdir = $(toolexeclibgodir)/index + +toolexeclibgoindex_DATA = \ + index/suffixarray.gox + +toolexeclibgoiodir = $(toolexeclibgodir)/io + +toolexeclibgoio_DATA = \ + io/ioutil.gox + +toolexeclibgologdir = $(toolexeclibgodir)/log + +toolexeclibgolog_DATA = \ + log/syslog.gox + +toolexeclibgomathdir = $(toolexeclibgodir)/math + +toolexeclibgomath_DATA = \ + math/big.gox \ + math/bits.gox \ + math/cmplx.gox \ + math/rand.gox + +toolexeclibgomimedir = $(toolexeclibgodir)/mime + +toolexeclibgomime_DATA = \ + mime/multipart.gox \ + mime/quotedprintable.gox + +toolexeclibgonetdir = $(toolexeclibgodir)/net + +toolexeclibgonet_DATA = \ + net/http.gox \ + net/mail.gox \ + net/rpc.gox \ + net/smtp.gox \ + net/textproto.gox \ + net/url.gox + +toolexeclibgonethttpdir = $(toolexeclibgonetdir)/http + +toolexeclibgonethttp_DATA = \ + net/http/cgi.gox \ + net/http/cookiejar.gox \ + net/http/fcgi.gox \ + net/http/httptest.gox \ + net/http/httptrace.gox \ + net/http/httputil.gox \ + net/http/pprof.gox + +toolexeclibgonetrpcdir = $(toolexeclibgonetdir)/rpc + +toolexeclibgonetrpc_DATA = \ + net/rpc/jsonrpc.gox + +toolexeclibgoosdir = $(toolexeclibgodir)/os + +toolexeclibgoos_DATA = \ + os/exec.gox \ + os/signal.gox \ + os/user.gox + +toolexeclibgopathdir = $(toolexeclibgodir)/path + +toolexeclibgopath_DATA = \ + path/filepath.gox + +toolexeclibgoregexpdir = $(toolexeclibgodir)/regexp + +toolexeclibgoregexp_DATA = \ + regexp/syntax.gox + +toolexeclibgoruntimedir = $(toolexeclibgodir)/runtime + +toolexeclibgoruntime_DATA = \ + runtime/debug.gox \ + runtime/pprof.gox \ + runtime/trace.gox + +toolexeclibgosyncdir = $(toolexeclibgodir)/sync + +toolexeclibgosync_DATA = \ + sync/atomic.gox + +toolexeclibgotestingdir = $(toolexeclibgodir)/testing + +toolexeclibgotesting_DATA = \ + testing/iotest.gox \ + testing/quick.gox + +toolexeclibgotestinginternaldir = $(toolexeclibgotestingdir)/internal + +toolexeclibgotestinginternal_DATA = \ + testing/internal/testdeps.gox + +toolexeclibgotextdir = $(toolexeclibgodir)/text + +toolexeclibgotext_DATA = \ + text/scanner.gox \ + text/tabwriter.gox \ + text/template.gox + +toolexeclibgotexttemplatedir = $(toolexeclibgotextdir)/template + +toolexeclibgotexttemplate_DATA = \ + text/template/parse.gox + +toolexeclibgounicodedir = $(toolexeclibgodir)/unicode + +toolexeclibgounicode_DATA = \ + unicode/utf16.gox \ + unicode/utf8.gox + +# Some packages are only needed for tests, so unlike the other +# internal packages nothing will explicitly depend on them. +# Force them to be built. +noinst_DATA = \ + internal/testenv.gox \ + net/internal/socktest.gox + +if LIBGO_IS_RTEMS +rtems_task_variable_add_file = runtime/rtems-task-variable-add.c +else +rtems_task_variable_add_file = +endif + +if LIBGO_IS_LINUX +runtime_getncpu_file = runtime/getncpu-linux.c +else +if LIBGO_IS_DARWIN +runtime_getncpu_file = runtime/getncpu-bsd.c +else +if LIBGO_IS_IRIX +runtime_getncpu_file = runtime/getncpu-irix.c +else +if LIBGO_IS_SOLARIS +runtime_getncpu_file = runtime/getncpu-solaris.c +else +if LIBGO_IS_FREEBSD +runtime_getncpu_file = runtime/getncpu-bsd.c +else +if LIBGO_IS_NETBSD +runtime_getncpu_file = runtime/getncpu-bsd.c +else +if LIBGO_IS_AIX +runtime_getncpu_file = runtime/getncpu-aix.c +else +runtime_getncpu_file = runtime/getncpu-none.c +endif +endif +endif +endif +endif +endif +endif + +runtime_files = \ + runtime/aeshash.c \ + runtime/go-assert.c \ + runtime/go-caller.c \ + runtime/go-callers.c \ + runtime/go-cdiv.c \ + runtime/go-cgo.c \ + runtime/go-construct-map.c \ + runtime/go-ffi.c \ + runtime/go-fieldtrack.c \ + runtime/go-matherr.c \ + runtime/go-memclr.c \ + runtime/go-memcmp.c \ + runtime/go-memequal.c \ + runtime/go-memmove.c \ + runtime/go-nanotime.c \ + runtime/go-now.c \ + runtime/go-nosys.c \ + runtime/go-reflect-call.c \ + runtime/go-runtime-error.c \ + runtime/go-setenv.c \ + runtime/go-signal.c \ + runtime/go-strslice.c \ + runtime/go-typedesc-equal.c \ + runtime/go-unsafe-pointer.c \ + runtime/go-unsetenv.c \ + runtime/go-unwind.c \ + runtime/go-varargs.c \ + runtime/env_posix.c \ + runtime/panic.c \ + runtime/print.c \ + runtime/proc.c \ + runtime/runtime_c.c \ + runtime/stack.c \ + runtime/thread.c \ + runtime/yield.c \ + $(rtems_task_variable_add_file) \ + $(runtime_getncpu_file) + +version.go: s-version; @true +s-version: Makefile + rm -f version.go.tmp + echo "package sys" > version.go.tmp + echo 'const DefaultGoroot = "$(prefix)"' >> version.go.tmp + echo 'const TheVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp + echo 'const Goexperiment = ``' >> version.go.tmp + echo 'const GOARCH = "'$(GOARCH)'"' >> version.go.tmp + echo 'const GOOS = "'$(GOOS)'"' >> version.go.tmp + echo 'const GccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp + echo >> version.go.tmp + echo "type ArchFamilyType int" >> version.go.tmp + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " UNKNOWN ArchFamilyType = iota" >> version.go.tmp + for a in $(ALLGOARCHFAMILY); do \ + echo " $${a}" >> version.go.tmp; \ + done + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOARCH); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOARCH)"; then \ + echo "const Goarch$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goarch$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp + echo " BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp + echo " CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp + echo " PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp + echo " PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp + echo " Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp + echo " HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp + echo " MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOOS); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOOS)"; then \ + echo "const Goos$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goos$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "type Uintreg uintptr" >> version.go.tmp + $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go + $(STAMP) $@ + +runtime_sysinfo.go: s-runtime_sysinfo; @true +s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go + GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh + $(SHELL) $(srcdir)/mvifdiff.sh tmp-runtime_sysinfo.go runtime_sysinfo.go + $(STAMP) $@ + +sigtab.go: s-sigtab; @true +s-sigtab: $(srcdir)/mksigtab.sh gen-sysinfo.go + GOOS=$(GOOS) $(SHELL) $(srcdir)/mksigtab.sh > tmp-sigtab.go + $(SHELL) $(srcdir)/mvifdiff.sh tmp-sigtab.go sigtab.go + $(STAMP) $@ + +GCCGO_INSTALL_NAME := $(shell echo gccgo|sed '$(program_transform_name)') +GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)') +GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)') + +zdefaultcc.go: s-zdefaultcc; @true +s-zdefaultcc: Makefile + echo 'package cfg' > zdefaultcc.go.tmp + echo >> zdefaultcc.go.tmp + echo 'const DefaultGCCGO = "$(bindir)/$(GCCGO_INSTALL_NAME)"' >> zdefaultcc.go.tmp + echo 'const DefaultCC = "$(GCC_INSTALL_NAME)"' >> zdefaultcc.go.tmp + echo 'const DefaultCXX = "$(GXX_INSTALL_NAME)"' >> zdefaultcc.go.tmp + echo 'const DefaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp + $(SHELL) $(srcdir)/../move-if-change zdefaultcc.go.tmp zdefaultcc.go + $(STAMP) $@ + +# _Complex_lock and _Reader_lock are Go translations of some AIX system +# types and should not be exported back to C +# semt is a Go translation of the C type sem_t; it fails to convert on +# some systems and need not be exported back to C. +# sigset conflicts with system type sigset on AIX, so we need to rename it +runtime.inc: s-runtime-inc; @true +s-runtime-inc: runtime.lo Makefile + rm -f runtime.inc.tmp2 runtime.inc.tmp3 + grep -v "#define _" runtime.inc.tmp | grep -v "#define [cm][01234] " | grep -v "#define empty " > runtime.inc.tmp2 + for pattern in '_[GP][a-z]' _Max _Lock _Sig _Trace _MHeap _Num; do \ + grep "#define $$pattern" runtime.inc.tmp >> runtime.inc.tmp2; \ + done + for TYPE in _Complex_lock _Reader_lock semt; do \ + sed -e '/struct '$${TYPE}' {/,/^}/s/^.*$$//' runtime.inc.tmp2 > runtime.inc.tmp3; \ + mv runtime.inc.tmp3 runtime.inc.tmp2; \ + done + sed -e 's/sigset/sigset_go/' runtime.inc.tmp2 > runtime.inc.tmp3 + $(SHELL) $(srcdir)/mvifdiff.sh runtime.inc.tmp3 runtime.inc + rm -f runtime.inc.tmp2 runtime.inc.tmp3 + $(STAMP) $@ + +noinst_DATA += zstdpkglist.go zdefaultcc.go + +# Generate the list of go std packages that were included in libgo +zstdpkglist.go: s-zstdpkglist; @true +s-zstdpkglist: Makefile + rm -f zstdpkglist.go.tmp + echo 'package load' > zstdpkglist.go.tmp + echo "" >> zstdpkglist.go.tmp + echo 'var stdpkg = map[string]bool{' >> zstdpkglist.go.tmp + echo $(libgo_go_objs) 'unsafe.lo' 'runtime/cgo.lo' | sed 's|[a-z0-9_/]*_c\.lo||g' | sed 's|\([a-z0-9_/]*\)\.lo|"\1": true,|g' >> zstdpkglist.go.tmp + echo '}' >> zstdpkglist.go.tmp + $(SHELL) $(srcdir)/mvifdiff.sh zstdpkglist.go.tmp zstdpkglist.go + $(STAMP) $@ + +if LIBGO_IS_LINUX +syscall_epoll_file = epoll.go +else +syscall_epoll_file = +endif + +libcalls.go: s-libcalls; @true +s-libcalls: libcalls-list go/syscall/mksyscall.awk $(srcdir)/go/syscall/*.go + rm -f libcalls.go.tmp + $(AWK) -f $(srcdir)/go/syscall/mksyscall.awk `cat libcalls-list` > libcalls.go.tmp + $(SHELL) $(srcdir)/mvifdiff.sh libcalls.go.tmp libcalls.go + $(STAMP) $@ + +libcalls-list: s-libcalls-list; @true +s-libcalls-list: Makefile $(srcdir)/go/syscall/*.go + rm -f libcalls-list.tmp + $(SHELL) $(srcdir)/match.sh --goarch=$(GOARCH) --goos=$(GOOS) --srcdir=$(srcdir)/go/syscall $(matchargs_syscall) > libcalls-list.tmp + $(SHELL) $(srcdir)/mvifdiff.sh libcalls-list.tmp libcalls-list + $(STAMP) $@ + +syscall_arch.go: s-syscall_arch; @true +s-syscall_arch: Makefile + rm -f syscall_arch.go.tmp + echo "package syscall" > syscall_arch.go.tmp + echo 'const ARCH = "'$(GOARCH)'"' >> syscall_arch.go.tmp + echo 'const OS = "'$(GOOS)'"' >> syscall_arch.go.tmp + $(SHELL) $(srcdir)/mvifdiff.sh syscall_arch.go.tmp syscall_arch.go + $(STAMP) $@ + +SYSINFO_FLAGS = \ + $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(OSCFLAGS) -O + +gen-sysinfo.go: s-gen-sysinfo; @true +s-gen-sysinfo: $(srcdir)/sysinfo.c config.h + $(CC) $(SYSINFO_FLAGS) -fdump-go-spec=tmp-gen-sysinfo.go -std=gnu99 -S -o sysinfo.s $(srcdir)/sysinfo.c + rm -f sysinfo.s + $(SHELL) $(srcdir)/mvifdiff.sh tmp-gen-sysinfo.go gen-sysinfo.go + $(STAMP) $@ + +errno.i: s-errno; @true +s-errno: + echo '#include <errno.h>' | $(CC) $(SYSINFO_FLAGS) -x c - -E -dM > tmp-errno.i + $(SHELL) $(srcdir)/mvifdiff.sh tmp-errno.i errno.i + $(STAMP) $@ + +sysinfo.go: s-sysinfo; @true +s-sysinfo: $(srcdir)/mksysinfo.sh gen-sysinfo.go errno.i + GOOS=$(GOOS) $(SHELL) $(srcdir)/mksysinfo.sh + $(SHELL) $(srcdir)/mvifdiff.sh tmp-sysinfo.go sysinfo.go + $(STAMP) $@ + +# The epoll struct has an embedded union and is packed on x86_64, +# which is too complicated for mksysinfo.sh. We find the offset of +# the only field we care about in configure.ac, and generate the +# struct here. +epoll.go: s-epoll; @true +s-epoll: Makefile + rm -f epoll.go.tmp + echo 'package syscall' > epoll.go.tmp + echo 'type EpollEvent struct {' >> epoll.go.tmp + echo ' Events uint32' >> epoll.go.tmp + case "$(SIZEOF_STRUCT_EPOLL_EVENT),$(STRUCT_EPOLL_EVENT_FD_OFFSET)" in \ + 0,0) echo 1>&2 "*** struct epoll_event data.fd offset unknown"; \ + exit 1; ;; \ + 8,4) echo ' Fd int32' >> epoll.go.tmp; ;; \ + 12,4) echo ' Fd int32' >> epoll.go.tmp; \ + echo ' Pad [4]byte' >> epoll.go.tmp; ;; \ + 12,8) echo ' Pad [4]byte' >> epoll.go.tmp; \ + echo ' Fd int32' >> epoll.go.tmp; ;; \ + 16,8) echo ' Pad [4]byte' >> epoll.go.tmp; \ + echo ' Fd int32' >> epoll.go.tmp; \ + echo ' Pad2 [4]byte' >> epoll.go.tmp; ;; \ + *) echo 1>&2 "*** struct epoll_event unsupported"; \ + exit 1; ;; \ + esac + echo '}' >> epoll.go.tmp + $(SHELL) $(srcdir)/mvifdiff.sh epoll.go.tmp epoll.go + $(STAMP) $@ + +if LIBGO_IS_LINUX +syscall_lib_clone_lo = syscall/clone_linux.lo +else +syscall_lib_clone_lo = +endif + +PACKAGES = \ + archive/tar \ + archive/zip \ + bufio \ + bytes \ + compress/bzip2 \ + compress/flate \ + compress/gzip \ + compress/lzw \ + compress/zlib \ + container/heap \ + container/list \ + container/ring \ + context \ + crypto \ + crypto/aes \ + crypto/cipher \ + crypto/des \ + crypto/dsa \ + crypto/ecdsa \ + crypto/elliptic \ + crypto/hmac \ + crypto/internal/cipherhw \ + crypto/md5 \ + crypto/rand \ + crypto/rc4 \ + crypto/rsa \ + crypto/sha1 \ + crypto/sha256 \ + crypto/sha512 \ + crypto/subtle \ + crypto/tls \ + crypto/x509 \ + crypto/x509/pkix \ + database/sql \ + database/sql/driver \ + debug/dwarf \ + debug/elf \ + debug/gosym \ + debug/macho \ + debug/pe \ + debug/plan9obj \ + debug/xcoff \ + encoding \ + encoding/ascii85 \ + encoding/asn1 \ + encoding/base32 \ + encoding/base64 \ + encoding/binary \ + encoding/csv \ + encoding/gob \ + encoding/hex \ + encoding/json \ + encoding/pem \ + encoding/xml \ + errors \ + exp/proxy \ + exp/terminal \ + expvar \ + flag \ + fmt \ + go/ast \ + go/build \ + go/constant \ + go/doc \ + go/format \ + go/importer \ + go/internal/gccgoimporter \ + go/internal/gcimporter \ + go/internal/srcimporter \ + go/parser \ + go/printer \ + go/scanner \ + go/token \ + go/types \ + golang_org/x/crypto/chacha20poly1305 \ + golang_org/x/crypto/chacha20poly1305/internal/chacha20 \ + golang_org/x/crypto/curve25519 \ + golang_org/x/crypto/poly1305 \ + golang_org/x/net/http2/hpack \ + golang_org/x/net/idna \ + golang_org/x/net/lex/httplex \ + golang_org/x/net/proxy \ + golang_org/x/text/secure/bidirule \ + golang_org/x/text/transform \ + golang_org/x/text/unicode/bidi \ + golang_org/x/text/unicode/norm \ + golang_org/x/text/width \ + hash \ + hash/adler32 \ + hash/crc32 \ + hash/crc64 \ + hash/fnv \ + html \ + html/template \ + image \ + image/color \ + image/color/palette \ + image/draw \ + image/gif \ + image/internal/imageutil \ + image/jpeg \ + image/png \ + index/suffixarray \ + internal/nettrace \ + internal/poll \ + internal/race \ + internal/singleflight \ + internal/syscall/unix \ + internal/testenv \ + internal/trace \ + io \ + io/ioutil \ + log \ + log/syslog \ + math \ + math/big \ + math/bits \ + math/cmplx \ + math/rand \ + mime \ + mime/multipart \ + mime/quotedprintable \ + net \ + net/http \ + net/http/cgi \ + net/http/cookiejar \ + net/http/fcgi \ + net/http/httptest \ + net/http/httptrace \ + net/http/httputil \ + net/http/internal \ + net/http/pprof \ + net/internal/socktest \ + net/mail \ + net/rpc \ + net/rpc/jsonrpc \ + net/smtp \ + net/textproto \ + net/url \ + os \ + os/exec \ + os/signal \ + os/user \ + path \ + path/filepath \ + reflect \ + regexp \ + regexp/syntax \ + runtime \ + runtime/debug \ + runtime/internal/atomic \ + runtime/internal/sys \ + runtime/pprof \ + runtime/pprof/internal/profile \ + runtime/trace \ + sort \ + strconv \ + strings \ + sync \ + sync/atomic \ + syscall \ + testing \ + testing/internal/testdeps \ + testing/iotest \ + testing/quick \ + text/scanner \ + text/tabwriter \ + text/template \ + text/template/parse \ + time \ + unicode \ + unicode/utf16 \ + unicode/utf8 + +libgo_go_objs = \ + $(addsuffix .lo,$(PACKAGES)) \ + bytes/index.lo \ + reflect/makefunc_ffi_c.lo \ + strings/index.lo \ + $(syscall_lib_clone_lo) \ + syscall/errno.lo \ + syscall/signame.lo \ + syscall/wait.lo \ + $(golang_org_x_net_lif_lo) \ + $(golang_org_x_net_route_lo) \ + log/syslog/syslog_c.lo \ + $(os_lib_inotify_lo) \ + runtime/internal/atomic_c.lo \ + sync/atomic_c.lo + +libgo_ldflags = \ + -version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS) + +libgo_libadd = \ + $(libgo_go_objs) ../libbacktrace/libbacktrace.la \ + $(LIBATOMIC) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS) + +libgo_la_SOURCES = $(runtime_files) +libgo_la_LDFLAGS = $(libgo_ldflags) +libgo_la_LIBADD = $(libgo_libadd) + +libgo_llgo_la_SOURCES = $(runtime_files) +libgo_llgo_la_LDFLAGS = $(libgo_ldflags) +libgo_llgo_la_LIBADD = $(libgo_libadd) + +libgobegin_a_SOURCES = \ + runtime/go-main.c + +libgobegin_llgo_a_SOURCES = \ + runtime/go-main.c + +# Use -fPIC for libgobegin so that it can be put in a PIE. +libgobegin_a_CFLAGS = $(AM_CFLAGS) -fPIC +libgobegin_llgo_a_CFLAGS = $(AM_CFLAGS) -fPIC + +libgolibbegin_a_SOURCES = \ + runtime/go-libmain.c + +libgolibbegin_a_CFLAGS = $(AM_CFLAGS) -fPIC + +GOTOOL_PACKAGES = \ + cmd/go/internal/base \ + cmd/go/internal/bug \ + cmd/go/internal/buildid \ + cmd/go/internal/cfg \ + cmd/go/internal/clean \ + cmd/go/internal/cmdflag \ + cmd/go/internal/doc \ + cmd/go/internal/envcmd \ + cmd/go/internal/fix \ + cmd/go/internal/fmtcmd \ + cmd/go/internal/generate \ + cmd/go/internal/get \ + cmd/go/internal/help \ + cmd/go/internal/list \ + cmd/go/internal/load \ + cmd/go/internal/run \ + cmd/go/internal/str \ + cmd/go/internal/test \ + cmd/go/internal/tool \ + cmd/go/internal/version \ + cmd/go/internal/vet \ + cmd/go/internal/web \ + cmd/go/internal/work \ + cmd/internal/browser \ + cmd/internal/objabi + +libgotool_a_SOURCES = +libgotool_a_DEPENDENCIES = $(addsuffix .lo,$(GOTOOL_PACKAGES)) +libgotool_a_LIBADD = $(addsuffix .o,$(GOTOOL_PACKAGES)) + +define STATIC_template +$(subst -,_,$(subst .,_,$(subst /,_,$(1))))_GOCFLAGS = -static +endef + +$(foreach package,$(GOTOOL_PACKAGES),$(eval $(call STATIC_template,$(package).lo))) + +# Make sure runtime.inc is built before compiling any .c file. +$(libgo_la_OBJECTS): runtime.inc +$(libgo_llgo_la_OBJECTS): runtime.inc +$(libgobegin_a_OBJECTS): runtime.inc +$(libgobegin_llgo_a_OBJECTS): runtime.inc +$(libgolibbegin_a_OBJECTS): runtime.inc + +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) + +GOCFLAGS = $(CFLAGS) +AM_GOCFLAGS = $(STRINGOPS_FLAG) $(GO_SPLIT_STACK) +GOCOMPILE = $(GOC) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_GOCFLAGS) $(GOCFLAGS) + +LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \ + $(AM_GOCFLAGS) $(GOCFLAGS) + +GOLINK = $(LIBTOOL) --tag GO --mode-link $(GOC) \ + $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_GOCFLAGS) $(LTLDFLAGS) -o $@ + +# Build the dependencies for a Go package. +BUILDDEPS = \ + $(MKDIR_P) $(@D); \ + dir=`echo $@ | sed -e 's/.lo.dep$$//'`; \ + files=`$(SHELL) $(srcdir)/match.sh --goarch=$(GOARCH) --goos=$(GOOS) --srcdir=$(srcdir)/go/$$dir --extrafiles="$(extra_go_files_$(subst /,_,$(subst .lo.dep,,$@)))" $(matchargs_$(subst /,_,$(subst .lo.dep,,$@)))`; \ + $(SHELL) $(srcdir)/godeps.sh `echo $@ | sed -e 's/.dep$$//'` $$files > $@.tmp; \ + if ! cmp $@.tmp $@ >/dev/null 2>/dev/null; then \ + rm -f `echo $@ | sed -e 's/\.dep$$//'`; \ + fi; \ + mv -f $@.tmp $@ + +# Build the .go files for a package, generating a .lo file. +BUILDPACKAGE = \ + $(MKDIR_P) $(@D); \ + files=`echo $^ | sed -e 's/[^ ]*\.gox//g' -e 's/[^ ]*\.dep//'`; \ + $(LTGOCOMPILE) -I . -c -fgo-pkgpath=`echo $@ | sed -e 's/.lo$$//' -e 's|golang_org|vendor/golang_org|'` $($(subst -,_,$(subst .,_,$(subst /,_,$@)))_GOCFLAGS) -o $@ $$files + +# How to build a .gox file from a .lo file. +# Matching .o file can either be in the same directory as the .lo (non-PIC +# object) or in the .libs directory (PIC object). +BUILDGOX = \ + f="$(basename $<).o"; \ + if test ! -f $$f; then \ + f="$(basename $(<D)/.libs/$(<F)).o"; \ + fi; \ + $(OBJCOPY) -j .go_export $$f $@.tmp; \ + $(SHELL) $(srcdir)/mvifdiff.sh $@.tmp `echo $@ | sed -e 's/s-gox/gox/'` + +GOTESTFLAGS = +GOBENCH = + +# Check a package. +CHECK = \ + GC="$(GOC) $(GOCFLAGS) $($(subst /,_,$@)_GOCFLAGS) -L `${PWD_COMMAND}` -L `${PWD_COMMAND}`/.libs"; \ + export GC; \ + GOLIBS="$(extra_check_libs_$(subst /,_,$(@D))) $(MATH_LIBS) $(NET_LIBS) $(LIBS)"; \ + export GOLIBS; \ + RUNTESTFLAGS="$(RUNTESTFLAGS)"; \ + export RUNTESTFLAGS; \ + MAKE="$(MAKE)"; \ + export MAKE; \ + NM="$(NM)"; \ + export NM; \ + libgccdir=`${GOC} -print-libgcc-file-name | sed -e 's|/[^/]*$$||'`; \ + LD_LIBRARY_PATH="`${PWD_COMMAND}`/.libs:$${libgccdir}:${LD_LIBRARY_PATH}"; \ + LD_LIBRARY_PATH=`echo $${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; \ + export LD_LIBRARY_PATH; \ + $(MKDIR_P) $(@D); \ + rm -f $@-testsum $@-testlog; \ + files=`$(SHELL) $(srcdir)/match.sh --goarch=$(GOARCH) --goos=$(GOOS) --srcdir=$(srcdir)/go/$(@D) --extrafiles="$(extra_go_files_$(subst /,_,$(@D)))" $(matchargs_$(subst /,_,$(@D)))`; \ + if test "$(USE_DEJAGNU)" = "yes"; then \ + $(SHELL) $(srcdir)/testsuite/gotest --goarch=$(GOARCH) --goos=$(GOOS) --dejagnu=yes --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$$files" --testname="$(@D)" $(GOTESTFLAGS); \ + elif test "$(GOBENCH)" != ""; then \ + $(SHELL) $(srcdir)/testsuite/gotest --goarch=$(GOARCH) --goos=$(GOOS) --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$$files" --bench="$(GOBENCH)" $(GOTESTFLAGS); \ + else \ + if $(SHELL) $(srcdir)/testsuite/gotest --goarch=$(GOARCH) --goos=$(GOOS) --basedir=$(srcdir) --srcdir=$(srcdir)/go/$(@D) --pkgpath="$(@D)" --pkgfiles="$$files" $(GOTESTFLAGS) >>$@-testlog 2>&1; then \ + echo "PASS: $(@D)" >> $@-testlog; \ + echo "PASS: $(@D)"; \ + echo "PASS: $(@D)" > $@-testsum; \ + else \ + echo "FAIL: $(@D)" >> $@-testlog; \ + cat $@-testlog; \ + echo "FAIL: $(@D)" > $@-testsum; \ + exit 1; \ + fi; \ + fi + +# Build all packages before checking any. +CHECK_DEPS = \ + $(toolexeclibgo_DATA) \ + $(toolexeclibgoarchive_DATA) \ + $(toolexeclibgocompress_DATA) \ + $(toolexeclibgocontainer_DATA) \ + $(toolexeclibgocrypto_DATA) \ + $(toolexeclibgodebug_DATA) \ + $(toolexeclibgoencoding_DATA) \ + $(toolexeclibgoexp_DATA) \ + $(toolexeclibgogo_DATA) \ + $(toolexeclibgohash_DATA) \ + $(toolexeclibgoimage_DATA) \ + $(toolexeclibgoindex_DATA) \ + $(toolexeclibgoio_DATA) \ + $(toolexeclibgolog_DATA) \ + $(toolexeclibgomath_DATA) \ + $(toolexeclibgomime_DATA) \ + $(toolexeclibgonet_DATA) \ + $(toolexeclibgonethttp_DATA) \ + $(toolexeclibgoos_DATA) \ + $(toolexeclibgopath_DATA) \ + $(toolexeclibgorpc_DATA) \ + $(toolexeclibgoruntime_DATA) \ + $(toolexeclibgosync_DATA) \ + $(toolexeclibgotesting_DATA) \ + $(toolexeclibgotext_DATA) \ + $(toolexeclibgotexttemplate_DATA) \ + $(toolexeclibgounicode_DATA) \ + $(noinst_LIBRARIES) + +if GOC_IS_LLGO +CHECK_DEPS += libgo-llgo.la libgobegin-llgo.a +else +CHECK_DEPS += libgo.la libgobegin.a +endif + +# PACKAGE_template defines the rules for each package. +# For example, for the package bufio, it produces: +# +# @go_include@ bufio.lo.dep +# bufio.lo.dep: $(srcdir)/go/bufio/*.go +# $(BUILDDEPS) +# bufio.lo: +# $(BUILDPACKAGE) +# bufio/check: $(CHECK_DEPS) +# @$(CHECK) +# .PHONY: bufio/check +# +# This is invoked with $(1) set to a package, which is a directory name, +# such as "bufio" or "archive/tar". +define PACKAGE_template +@go_include@ $(1).lo.dep +$(1).lo.dep: $(srcdir)/go/$(1)/*.go + $$(BUILDDEPS) +$(1).lo: + $$(BUILDPACKAGE) +$(1)/check: $$(CHECK_DEPS) + @$$(CHECK) +.PHONY: $(1)/check +$(1).gox: $(1).s-gox; @true +$(1).s-gox: $(1).lo + $$(BUILDGOX) + $$(STAMP) $$@ +endef + +# This line expands PACKAGE_template once for each package name listed +# in $(PACKAGES). +$(foreach package,$(PACKAGES),$(eval $(call PACKAGE_template,$(package)))) +$(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))) + +# Pass -ffp-contract=off, or 386-specific options, when building the +# math package. MATH_FLAG is defined in configure.ac. +math_lo_GOCFLAGS = $(MATH_FLAG) + +# Add the generated file runtime_sysinfo.go to the runtime package. +extra_go_files_runtime = runtime_sysinfo.go sigtab.go +runtime.lo.dep: $(extra_go_files_runtime) + +# Add generated files to the syscall package. +extra_go_files_syscall = \ + libcalls.go \ + sysinfo.go \ + syscall_arch.go \ + $(syscall_epoll_file) +syscall.lo.dep: $(extra_go_files_syscall) + +# Pass -fgo-compiling-runtime when compiling the runtime package. +runtime_lo_GOCFLAGS = -fgo-c-header=runtime.inc.tmp -fgo-compiling-runtime +runtime_check_GOCFLAGS = -fgo-compiling-runtime +runtime_internal_atomic_lo_GOCFLAGS = -fgo-compiling-runtime +runtime_internal_atomic_lo_check_GOCFLAGS = -fgo-compiling-runtime +runtime_internal_sys_lo_GOCFLAGS = -fgo-compiling-runtime +runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime + +# If libffi is supported (the normal case) use the ffi build tag for +# the runtime package. +if USE_LIBFFI +matchargs_runtime = --tag=libffi +else +matchargs_runtime = +endif + +# At least for now, we need -static-libgo for this test, because +# otherwise we can't get the line numbers. +# Also use -fno-inline to get better results from the memory profiler. +runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline + +extra_go_files_runtime_internal_sys = version.go +runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys) + +extra_go_files_cmd_go_internal_cfg = zdefaultcc.go +cmd/go/internal/cfg.lo.dep: $(extra_go_files_cmd_go_internal_cfg) + +extra_go_files_cmd_go_internal_load = zstdpkglist.go +cmd/go/internal/load.lo.dep: $(extra_go_files_cmd_go_internal_load) + +extra_check_libs_cmd_go_internal_generate = $(abs_builddir)/libgotool.a +extra_check_libs_cmd_go_internal_get = $(abs_builddir)/libgotool.a +extra_check_libs_cmd_go_internal_load = $(abs_builddir)/libgotool.a +extra_check_libs_cmd_go_internal_work = $(abs_builddir)/libgotool.a + +# FIXME: The following C files may as well move to the runtime +# directory and be treated like other C files. + +# Use C code to speed up {bytes,strings}.IndexByte and friends. +bytes/index.lo: go/bytes/indexbyte.c runtime.inc + @$(MKDIR_P) bytes + $(LTCOMPILE) -c -o $@ $(srcdir)/go/bytes/indexbyte.c +strings/index.lo: go/strings/indexbyte.c runtime.inc + @$(MKDIR_P) strings + $(LTCOMPILE) -c -o $@ $(srcdir)/go/strings/indexbyte.c + +# Use a C function with a fixed number of arguments to call a C +# varargs function. +log/syslog/syslog_c.lo: go/log/syslog/syslog_c.c runtime.inc + @$(MKDIR_P) log/syslog + $(LTCOMPILE) -c -o $@ $(srcdir)/go/log/syslog/syslog_c.c + +# The interface to libffi from the reflect package is written in C. +reflect/makefunc_ffi_c.lo: go/reflect/makefunc_ffi_c.c runtime.inc + @$(MKDIR_P) reflect + $(LTCOMPILE) -c -o $@ $(srcdir)/go/reflect/makefunc_ffi_c.c + +# The atomic functions are written in C. +runtime/internal/atomic_c.lo: go/runtime/internal/atomic/atomic.c runtime.inc + @$(MKDIR_P) runtime/internal + $(LTCOMPILE) -c -o $@ $(srcdir)/go/runtime/internal/atomic/atomic.c +sync/atomic_c.lo: go/sync/atomic/atomic.c runtime.inc + @$(MKDIR_P) sync + $(LTCOMPILE) -c -o $@ $(srcdir)/go/sync/atomic/atomic.c + +# A few syscall functions are written in C. +syscall/clone_linux.lo: go/syscall/clone_linux.c runtime.inc + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $(srcdir)/go/syscall/clone_linux.c +syscall/errno.lo: go/syscall/errno.c runtime.inc + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $(srcdir)/go/syscall/errno.c +syscall/signame.lo: go/syscall/signame.c runtime.inc + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $(srcdir)/go/syscall/signame.c +syscall/wait.lo: go/syscall/wait.c runtime.inc + @$(MKDIR_P) syscall + $(LTCOMPILE) -c -o $@ $(srcdir)/go/syscall/wait.c + +# Solaris 12 changed the type of fields in struct stat. +# Use a build tag, based on a configure check, to cope. +if LIBGO_IS_SOLARIS +if HAVE_STAT_TIMESPEC +matchargs_os = --tag=solaristag +else +matchargs_os = +endif +else +matchargs_os = +endif + +if LIBGO_IS_BSD + +# Build golang_org/x/net/route only on BSD systems. + +$(eval $(call PACKAGE_template,golang_org/x/net/route)) + +golang_org_x_net_route_lo = \ + golang_org/x/net/route.lo +golang_org_x_net_route_check = \ + golang_org/x/net/route/check + +endif + +if LIBGO_IS_SOLARIS + +# Build golang_org/x/net/lif only on Solaris systems. + +$(eval $(call PACKAGE_template,golang_org/x/net/lif)) + +golang_org_x_net_lif_lo = \ + golang_org/x/net/lif.lo +golang_org_x_net_lif_check = \ + golang_org/x/net/lif/check + +endif + +TEST_PACKAGES = \ + bufio/check \ + bytes/check \ + context/check \ + errors/check \ + expvar/check \ + flag/check \ + fmt/check \ + html/check \ + image/check \ + io/check \ + log/check \ + math/check \ + mime/check \ + net/check \ + os/check \ + path/check \ + reflect/check \ + regexp/check \ + runtime/check \ + sort/check \ + strconv/check \ + strings/check \ + sync/check \ + syscall/check \ + time/check \ + unicode/check \ + archive/tar/check \ + archive/zip/check \ + cmd/go/internal/generate/check \ + cmd/go/internal/get/check \ + cmd/go/internal/load/check \ + cmd/go/internal/work/check \ + cmd/internal/objabi/check \ + compress/bzip2/check \ + compress/flate/check \ + compress/gzip/check \ + compress/lzw/check \ + compress/zlib/check \ + container/heap/check \ + container/list/check \ + container/ring/check \ + crypto/aes/check \ + crypto/cipher/check \ + crypto/des/check \ + crypto/dsa/check \ + crypto/ecdsa/check \ + crypto/elliptic/check \ + crypto/hmac/check \ + crypto/md5/check \ + crypto/rand/check \ + crypto/rc4/check \ + crypto/rsa/check \ + crypto/sha1/check \ + crypto/sha256/check \ + crypto/sha512/check \ + crypto/subtle/check \ + crypto/tls/check \ + crypto/x509/check \ + database/sql/check \ + database/sql/driver/check \ + debug/dwarf/check \ + debug/elf/check \ + debug/macho/check \ + debug/pe/check \ + debug/plan9obj/check \ + debug/xcoff/check \ + encoding/ascii85/check \ + encoding/asn1/check \ + encoding/base32/check \ + encoding/base64/check \ + encoding/binary/check \ + encoding/csv/check \ + encoding/gob/check \ + encoding/hex/check \ + encoding/json/check \ + encoding/pem/check \ + encoding/xml/check \ + exp/proxy/check \ + exp/terminal/check \ + html/template/check \ + go/ast/check \ + go/build/check \ + go/constant/check \ + go/doc/check \ + go/format/check \ + go/internal/gcimporter/check \ + go/internal/gccgoimporter/check \ + go/internal/srcimporter/check \ + go/parser/check \ + go/printer/check \ + go/scanner/check \ + go/token/check \ + go/types/check \ + golang_org/x/crypto/chacha20poly1305/check \ + golang_org/x/crypto/chacha20poly1305/internal/chacha20/check \ + golang_org/x/crypto/curve25519/check \ + golang_org/x/crypto/poly1305/check \ + golang_org/x/net/http2/hpack/check \ + golang_org/x/net/idna/check \ + golang_org/x/net/lex/httplex/check \ + $(golang_org_x_net_lif_check) \ + golang_org/x/net/proxy/check \ + $(golang_org_x_net_route_check) \ + hash/adler32/check \ + hash/crc32/check \ + hash/crc64/check \ + hash/fnv/check \ + image/color/check \ + image/draw/check \ + image/jpeg/check \ + image/png/check \ + index/suffixarray/check \ + internal/poll/check \ + internal/singleflight/check \ + internal/trace/check \ + io/ioutil/check \ + log/syslog/check \ + math/big/check \ + math/bits/check \ + math/cmplx/check \ + math/rand/check \ + mime/multipart/check \ + mime/quotedprintable/check \ + net/http/check \ + net/http/cgi/check \ + net/http/cookiejar/check \ + net/http/fcgi/check \ + net/http/httptest/check \ + net/http/httptrace/check \ + net/http/httputil/check \ + net/http/internal/check \ + net/internal/socktest/check \ + net/mail/check \ + net/rpc/check \ + net/smtp/check \ + net/textproto/check \ + net/url/check \ + net/rpc/jsonrpc/check \ + os/exec/check \ + os/signal/check \ + os/user/check \ + path/filepath/check \ + regexp/syntax/check \ + runtime/debug/check \ + runtime/internal/atomic/check \ + runtime/internal/sys/check \ + runtime/pprof/check \ + runtime/pprof/internal/profile/check \ + runtime/trace/check \ + sync/atomic/check \ + text/scanner/check \ + text/tabwriter/check \ + text/template/check \ + text/template/parse/check \ + testing/quick/check \ + unicode/utf16/check \ + unicode/utf8/check + +check: check-tail +check-recursive: check-head + +check-head: + @echo "Test Run By $${USER} on `date`" > libgo.head + @echo "Native configuration is $(host_triplet)" >> libgo.head + @echo >> libgo.head + @echo " === libgo tests ===" >> libgo.head + @echo >> libgo.head + +check-tail: check-recursive check-multi + @if test "$(USE_DEJAGNU)" = "yes"; then \ + exit 0; \ + fi; \ + lib=`${PWD_COMMAND} | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \ + for dir in . $(MULTIDIRS); do \ + mv ../$${dir}/$${lib}/libgo.sum ../$${dir}/$${lib}/libgo.sum.sep; \ + mv ../$${dir}/$${lib}/libgo.log ../$${dir}/$${lib}/libgo.log.sep; \ + done; \ + mv libgo.head libgo.sum; \ + cp libgo.sum libgo.log; \ + echo "Schedule of variations:" >> libgo.sum; \ + for dir in . $(MULTIDIRS); do \ + multidir=../$${dir}/$${lib}; \ + multivar=`cat $${multidir}/libgo.var`; \ + echo " $${multivar}" >> libgo.sum; \ + done; \ + echo >> libgo.sum; \ + pass=0; fail=0; untested=0; \ + for dir in . $(MULTIDIRS); do \ + multidir=../$${dir}/$${lib}; \ + multivar=`cat $${multidir}/libgo.var`; \ + echo "Running target $${multivar}" >> libgo.sum; \ + echo "Running $(srcdir)/libgo.exp ..." >> libgo.sum; \ + cat $${multidir}/libgo.sum.sep >> libgo.sum; \ + cat $${multidir}/libgo.log.sep >> libgo.log; \ + if test -n "${MULTIDIRS}"; then \ + echo " === libgo Summary for $${multivar} ===" >> libgo.sum; \ + echo >> libgo.sum; \ + fi; \ + p=`grep -c PASS $${multidir}/libgo.sum.sep`; \ + pass=`expr $$pass + $$p`; \ + if test "$$p" -ne "0" && test -n "${MULTIDIRS}"; then \ + echo "# of expected passes $$p" >> libgo.sum; \ + fi; \ + p=`grep -c FAIL $${multidir}/libgo.sum.sep`; \ + fail=`expr $$fail + $$p`; \ + if test "$$p" -ne "0" && test -n "${MULTIDIRS}"; then \ + echo "# of unexpected failures $$p" >> libgo.sum; \ + fi; \ + p=`grep -c UNTESTED $${multidir}/libgo.sum.sep`; \ + untested=`expr $$untested + $$p`; \ + if test "$$p" -ne "0" && test -n "${MULTIDIRS}"; then \ + echo "# of untested testcases $$p" >> libgo.sum; \ + fi; \ + done; \ + echo >> libgo.sum; \ + echo " === libgo Summary ===" >> libgo.sum; \ + echo >> libgo.sum; \ + if test "$$pass" -ne "0"; then \ + echo "# of expected passes $$pass" >> libgo.sum; \ + fi; \ + if test "$$fail" -ne "0"; then \ + echo "# of unexpected failures $$fail" >> libgo.sum; \ + fi; \ + if test "$$untested" -ne "0"; then \ + echo "# of untested testcases $$untested" >> libgo.sum; \ + fi; \ + echo `echo $(GOC) | sed -e 's/ .*//'` `$(GOC) -v 2>&1 | grep " version" | sed -n -e 's/.* \(version.*$$\)/\1/p'` >> libgo.sum; \ + echo >> libgo.log; \ + echo "runtest completed at `date`" >> libgo.log; \ + if test "$$fail" -ne "0"; then \ + status=1; \ + else \ + status=0; \ + fi; \ + exit $$status + +check-am: + @rm -f libgo.sum libgo.log libgo.tail + @multivar="unix"; \ + [ -z "$(MULTIFLAGS)" ] || multivar="$${multivar}/$(MULTIFLAGS)"; \ + echo "$${multivar}" > libgo.var + @for f in $(TEST_PACKAGES); do \ + rm -f $$f-testsum $$f-testlog; \ + done + -@$(MAKE) -k $(TEST_PACKAGES) + @for f in $(TEST_PACKAGES); do \ + if test -f $$f-testsum; then \ + cat $$f-testsum >> libgo.sum; \ + fi; \ + if test -f $$f-testlog; then \ + cat $$f-testlog >> libgo.log; \ + fi; \ + done + +check-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=check-am multi-do # $(MAKE) + +bench: + -@$(MAKE) -k $(TEST_PACKAGES) GOBENCH=. + +MOSTLYCLEANFILES = \ + s-runtime_sysinfo s-sigtab s-runtime-inc s-zstdpkglist \ + s-libcalls s-libcalls-list s-syscall_arch s-gen-sysinfo s-sysinfo \ + s-errno s-epoll \ + libgo.head libgo.sum.sep libgo.log.sep libgo.var \ + libcalls-list runtime.inc runtime.inc.tmp2 runtime.inc.tmp3 + +mostlyclean-local: + find . -name '*.lo' -print | xargs $(LIBTOOL) --mode=clean rm -f + find . -name '*.$(OBJEXT)' -print | xargs rm -f + find . -name '*-testsum' -print | xargs rm -f + find . -name '*-testlog' -print | xargs rm -f + +CLEANFILES = *.go *.c s-* libgo.sum libgo.log runtime.inc + +clean-local: + find . -name '*.la' -print | xargs $(LIBTOOL) --mode=clean rm -f + find . -name '*.a' -print | xargs rm -f + find . -name '*.gox' -print | xargs rm -f + find . -name '*.s-gox' -print | xargs rm -f + +distclean-local: + find . -name '*.lo.dep' -print | xargs rm -f