1 # Copyright (c) 2012 The Native Client Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 ##############################################################################
6 # Helper script for NaCl toolchain development workflow.
9 # - Sync needed sources at pinned revision and build newlib-based toolchain:
10 # make buildbot-build-with-newlib TOOLCHAINLOC=<where-to-install-the-toolchain>
12 # make buildbot-build-with-glibc TOOLCHAINLOC=<where-to-install-the-toolchain>
15 # - Sync all sources at pinned revision:
17 # - Sync all sources at most recent revision:
19 # - Build newlib-based toolchain from current sources:
20 # make build-with-newlib TOOLCHAINLOC=<where-to-install-the-toolchain>
21 # - Build glibc-based toolchain from current sources:
22 # make build-with-glibc TOOLCHAINLOC=<where-to-install-the-toolchain>
24 ##############################################################################
26 default: build-with-glibc
28 # Delete the target file if the recipe fails after beginning to change the file
29 # http://www.gnu.org/software/make/manual/make.html#Errors (Errors in Recipes)
32 THISMAKEFILE := $(lastword $(MAKEFILE_LIST))
36 # By default, checkout from read-only repository:
37 # http://git.chromium.org/native_client
38 # Maintainers can either override this with read-write repository:
39 # ssh://gerrit.chromium.org/native_client
40 # or add to git config:
41 # [url "ssh://gerrit.chromium.org"]
42 # pushinsteadof = http://git.chromium.org
43 # or add to git-cl codereview.settings:
44 # PUSH_URL_CONFIG: url.ssh://gerrit.chromium.org.pushinsteadof
45 # ORIGIN_URL_CONFIG: http://git.chromium.org
46 GIT_BASE_URL = http://git.chromium.org/native_client
48 CROSSARCH = x86_64-nacl
50 SDKLOC ?= $(abspath $(TOOLCHAINLOC))
51 TOOLCHAINNAME ?= nacl-sdk
52 SDKNAME ?= $(TOOLCHAINNAME)
53 SDKROOT ?= $(SDKLOC)/$(SDKNAME)
56 # We can't use CFLAGS and LDFLAGS since they are passed to sub-makes and
57 # those override configure parameters.
61 # By default all toolchain executables are x86-32 executables, use
62 # HOST_TOOLCHAIN_BITS=64 to make them x86-64 executables.
63 HOST_TOOLCHAIN_BITS = 32
65 # If CANNED_REVISION is "no" then it's "from git build": Makefile uses file
66 # named "REVISIONS" to pull infomation from git and builds that.
67 # If CANNED_REVISION is set to some revision then Makefile will try to download
68 # sources from commondatastorage.googleapis.com and use them.
69 # You can also set CANNED_REVISION to "yes" if you want to just build sources
70 # already unpacked and ready to be built from SRC subdirectory.
72 ifeq ($(CANNED_REVISION), no)
75 export NACL_FAKE_SONAME = $(shell commit=$(NACL_GLIBC_COMMIT);echo $${commit:0:8})
77 # Toplevel installation directory.
78 # MUST be an absolute pathname, for configure --prefix=$(PREFIX)
79 PREFIX = $(abspath $(SDKROOT))
81 # Convert CROSSARCH (nacl or nacl64) to (32 or 64).
84 LINUX_HEADERS = "$(abspath $(dir $(THISMAKEFILE)))/SRC/linux-headers-for-nacl/include"
85 HPREFIX = SRC/newlib/newlib/libc/sys/nacl
87 # No 'uname -o' on OSX
88 ifeq ($(shell uname -s), Darwin)
90 # Ensure that the resulting toolchain works on Mac OS X 10.5, since that
91 # is not the default in newer versions of Xcode.
92 export MACOSX_DEPLOYMENT_TARGET = 10.5
94 ifeq ($(shell uname -o), Cygwin)
97 ifeq ($(shell uname -o), Msys)
105 # SRCDIR should contain tarball for gcc-extras: gmp mpfr mpc ppl cloog-ppl.
106 # You can skip use of these tarball if you make SRCDIR value empty. In this
107 # case system-wide libraries will be used (they should be available for such
108 # use, obviously - and this is not always the case: for example they are not
109 # available on MacOS, on 64bit linux you generally can find 64bit versions of
110 # them, but not 32bit versions, etc).
111 SRCDIR = ../../../third_party
113 ifeq ($(PLATFORM), win)
114 # Ugh, Cygwin and spaces in paths don't work well.
115 # I'm explicitly coding the path.
116 BUILDPATH = $(DESTDIR)$(PREFIX)/bin:/usr/local/bin:/usr/bin:/bin
119 SVNVERSION ?= svnversion.bat | tr -d $$"\r"
120 PREFIX_NATIVE = $(shell cygpath -m $(PREFIX))
121 CREATE_REDIRECTORS = ./create_redirectors_cygwin.sh
123 BUILDPATH = $(DESTDIR)$(PREFIX)/bin:$(PATH)
126 SVNVERSION ?= svnversion
127 PREFIX_NATIVE = $(DESTDIR)$(PREFIX)
128 CREATE_REDIRECTORS = ./create_redirectors.sh
131 ##################################################################
132 # The version numbers for the tools we will be building.
133 ##################################################################
138 CLOOG_PPL_VERSION = 0.15.9
140 gmp: $(GMP_VERSION), \
141 mpfr: $(MPFR_VERSION), \
142 mpc: $(MPC_VERSION), \
143 ppl: $(PPL_VERSION), \
144 cloog-ppl: $(CLOOG_PPL_VERSION)
146 BINUTILS_VERSION = 2.20.1
147 NACL_BINUTILS_GIT_BASE = 1beca2258eb9a92e8d6c6f081fc1255773b1fb8b
149 NACL_GCC_GIT_BASE = 4e0ae761f59baae95282ab07efa9b831ac524642
150 NEWLIB_VERSION = 1.20.0
151 NACL_NEWLIB_GIT_BASE = 151b2c72fb87849bbc6e3ef569718c6344eed2e6
153 NACL_GDB_GIT_BASE = 5540d856ee177a454c2b8871c6498d0524b0c6f9
155 NACL_GLIBC_GIT_BASE = 5c46008d0874c9b9d5f5f201a10e975d1fe84787
157 ##################################################################
158 # Get or update the sources.
159 ##################################################################
164 git-sources := binutils gcc gdb glibc linux-headers-for-nacl newlib
166 nacl-name = $(patsubst nacl-linux-headers-for-nacl,linux-headers-for-nacl,nacl-$*)
168 all-git-sources = $(git-sources:%=SRC/%)
169 $(all-git-sources): SRC/%: | SRC
170 ifeq ($(CANNED_REVISION), no)
171 git clone $(GIT_BASE_URL)/$(nacl-name).git SRC/$*
173 ./download_SRC.sh $(CANNED_REVISION)
176 all-fetched-git-sources = $(git-sources:%=fetched-src-%)
177 .PHONY: $(all-fetched-git-sources)
178 $(all-fetched-git-sources): fetched-src-%: | SRC/%
179 cd SRC/$* && git fetch
181 # Note that we can not change names of variables in REVISIONS files since they
182 # are used in other places, not just in this Makefile. Small amount of sh-fu
183 # will convert linux-headers-for-nacl to LINUX_HEADERS_FOR_NACL_COMMIT.
184 all-pinned-git-sources = $(git-sources:%=pinned-src-%)
185 .PHONY: $(all-pinned-git-sources)
186 $(all-pinned-git-sources): pinned-src-%: fetched-src-%
187 cd SRC/$* && git checkout \
188 "$($(shell echo $(nacl-name)| tr '[:lower:]-' '[:upper:]_')_COMMIT)"
190 all-latest-git-sources = $(git-sources:%=latest-src-%)
191 .PHONY: $(all-latest-git-sources)
192 $(all-latest-git-sources): latest-src-%: fetched-src-%
193 ./update_to_latest.sh SRC/$*
196 sync-pinned: | $(all-pinned-git-sources)
199 sync: | $(all-latest-git-sources)
201 # Requisites: libraries needed for GCC, but without any nacl-specific patches.
202 # They are only updated when pre-requisites version changes.
205 if [[ "$$(cat BUILD/.gcc-extras-version)" != "$(GCC_EXTRAS)" ]]; then \
206 rm -rf BUILD/.gcc-extra-* SRC/.gcc-extra-* && \
207 $(MAKE) -f $(THISMAKEFILE) install-gcc-extras && \
208 echo -n "$(GCC_EXTRAS)" > BUILD/.gcc-extras-version; \
211 gcc-extras := gmp mpfr mpc ppl cloog-ppl
213 gcc_extra_dir = $(subst cloog-ppl,cloog,$*)
214 gcc_extra_version = $($(shell echo $*| tr '[:lower:]-' '[:upper:]_')_VERSION)
216 all-src-gcc-extras = $(gcc-extras:%=SRC/.gcc-extra-%)
217 $(all-src-gcc-extras): SRC/.gcc-extra-%: | SRC
218 rm -rf SRC/.gcc-extra-$*
219 cd SRC && tar xpf $(SRCDIR)/$(gcc_extra_dir)/$*-$(gcc_extra_version).tar.*
220 mv SRC/$*-$(gcc_extra_version) SRC/.gcc-extra-$*
222 # All Macs need Core2 assembly and --enable-fat is broken with stock MacOS gcc.
223 ifneq ($(PLATFORM), mac)
224 gmp_use_fat_binary = --enable-fat
229 define gcc-extra-configure
232 BUILD=$$PWD/BUILD && cd $@ && \
233 ../../SRC/.gcc-extra-$(@:BUILD/.gcc-extra-build-%=%)/configure \
237 CXXFLAGS="$(CXXFLAGS)" \
238 CPPFLAGS="-fexceptions $(CPPFLAGS)" \
239 --prefix=$$BUILD/.gcc-extra-install-$(@:BUILD/.gcc-extra-build-%=%) \
243 BUILD/.gcc-extra-build-gmp: | BUILD SRC/.gcc-extra-gmp
244 $(gcc-extra-configure) \
245 --enable-cxx $(gmp_use_fat_binary) \
246 ABI="$(HOST_TOOLCHAIN_BITS)"
248 BUILD/.gcc-extra-build-mpfr: | SRC/.gcc-extra-mpfr BUILD/.gcc-extra-install-gmp
249 $(gcc-extra-configure) --with-gmp=$$BUILD/.gcc-extra-install-gmp
251 BUILD/.gcc-extra-build-mpc: | SRC/.gcc-extra-mpc BUILD/.gcc-extra-install-gmp \
252 BUILD/.gcc-extra-install-mpfr
253 $(gcc-extra-configure) \
254 --with-gmp=$$BUILD/.gcc-extra-install-gmp \
255 --with-mpfr=$$BUILD/.gcc-extra-install-mpfr
257 BUILD/.gcc-extra-build-ppl: | SRC/.gcc-extra-ppl BUILD/.gcc-extra-install-gmp
258 $(gcc-extra-configure) \
259 --enable-interfaces="cxx c" \
260 --with-gmp-prefix=$$BUILD/.gcc-extra-install-gmp
262 .PHONY: fix-cloog-ppl-check
263 fix-cloog-ppl-check: | SRC/.gcc-extra-cloog-ppl
264 for i in SRC/.gcc-extra-cloog-ppl/configure{.in,} ; do \
265 sed -e s'|ppl_minor_version=10|ppl_minor_version=11|'<$$i >$$i.out;\
269 sed -e s'|LIBS = @LIBS@|LIBS = @LIBS@ -lstdc++ -lm |' \
270 <SRC/.gcc-extra-cloog-ppl/Makefile.in \
271 >SRC/.gcc-extra-cloog-ppl/Makefile.in.out
272 cat SRC/.gcc-extra-cloog-ppl/Makefile.in.out \
273 >SRC/.gcc-extra-cloog-ppl/Makefile.in
274 rm SRC/.gcc-extra-cloog-ppl/Makefile.in.out
275 find SRC/.gcc-extra-cloog-ppl -print0 | \
276 xargs -0 touch -r SRC/.gcc-extra-cloog-ppl
278 BUILD/.gcc-extra-build-cloog-ppl: fix-cloog-ppl-check | \
279 BUILD/.gcc-extra-install-ppl
280 $(gcc-extra-configure) \
281 --with-gmp=$$BUILD/.gcc-extra-install-gmp \
282 --with-ppl=$$BUILD/.gcc-extra-install-ppl
284 all-install-gcc-extras = $(gcc-extras:%=BUILD/.gcc-extra-install-%)
285 $(all-install-gcc-extras): BUILD/.gcc-extra-install-%: | SRC \
286 BUILD/.gcc-extra-build-%
287 if mkdir BUILD/.gcc-extra-install-$*; then \
288 mkdir BUILD/.gcc-extra-install-$*/include && \
289 mkdir BUILD/.gcc-extra-install-$*/lib && \
290 ln -s lib BUILD/.gcc-extra-install-$*/lib64 && \
291 ln -s lib BUILD/.gcc-extra-install-$*/lib32; \
293 cd BUILD/.gcc-extra-build-$* && $(MAKE) install
295 install-gcc-extras: | BUILD SRC $(all-install-gcc-extras)
297 # Create the build directories for compiled binaries.
301 ##################################################################
302 # Create the SDK output directories.
303 ##################################################################
305 # Create directory structure for the toolchain.
306 # On win, non-cygwin binaries do not follow cygwin symlinks. In case when we
307 # need multiple names for the directory, the name that might be used by win
308 # tools goes to the real directory and other names go to symlinks.
309 # Installers create real directories when they do not find an existing one
310 # to use. To prevent installers from creating a real directory instead of what
311 # should be a symlink we create everything in advance.
313 echo "Creating the SDK tree at $(DESTDIR)$(PREFIX)"
314 # Create installation directory for 64-bit libraries
315 # See http://code.google.com/p/nativeclient/issues/detail?id=1975
316 install -m 755 -d "$(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib"
317 # Create alias for libgcc_s.so
318 # TODO: fix MULTILIB_OSDIRNAMES in gcc/config/i386/t-nacl64
319 # and get rid of this!
320 ln -sfn lib $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib64
321 # Create installation directory for 32-bit libraries
322 install -m 755 -d "$(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib32"
323 # Create alias for newlib
324 # Newlib uses "gcc -print-multi-lib" to determine multilib subdirectory
325 # names and installs under $prefix accordingly. This seems confusing,
326 # as "-print-multi-lib" uses MULTILIB_DIRNAMES, which is for libgcc,
327 # while for newlib it looks better to use MULTILIB_OSDIRNAMES, which is
328 # for system libraries. In our case these are "/lib" and "/lib/32" vs.
329 # "/lib" and "/lib32" respectively. As a result, 32-bit newlib is
330 # installed under "/lib/32" but searched under "/lib32".
331 # We fix this by making "/lib/32" an alias for "/lib32".
332 # TODO: sounds odd - probably my understanding is wrong?
333 # Go ask someone smart...
334 ln -sfn ../lib32 $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib/32
336 ##################################################################
338 # Builds the cross assembler, linker, archiver, etc.
339 ##################################################################
340 BUILD/stamp-$(CROSSARCH)-binutils: | SRC/binutils BUILD
341 rm -rf BUILD/build-binutils-$(CROSSARCH)
342 mkdir BUILD/build-binutils-$(CROSSARCH)
343 # We'd like to build binutils with -Werror, but there are a
344 # number of warnings in the Mac version of GCC that prevent
345 # us from building with -Werror today.
346 cd BUILD/build-binutils-$(CROSSARCH) && \
348 CFLAGS="$(USER_CFLAGS)" \
349 LDFLAGS="$(USER_LDFLAGS)" \
350 ../../SRC/binutils/configure \
352 --target=$(CROSSARCH) \
353 --with-sysroot=$(PREFIX)/$(CROSSARCH) \
354 --disable-werror --enable-deterministic-archives --without-zlib
355 $(MAKE) -C BUILD/build-binutils-$(CROSSARCH) all
356 $(MAKE) -C BUILD/build-binutils-$(CROSSARCH) DESTDIR=$(DESTDIR) install
360 binutils: BUILD/stamp-$(CROSSARCH)-binutils
362 ##################################################################
364 # Builds the cross gcc used to build the libraries.
365 ##################################################################
367 GCC_SRC_DIR = $(abspath SRC/gcc)
369 GMP_DIR = $(abspath BUILD/.gcc-extra-install-gmp)
370 MPFR_DIR = $(abspath BUILD/.gcc-extra-install-mpfr)
371 PPL_DIR = $(abspath BUILD/.gcc-extra-install-ppl)
372 CLOOG_DIR = $(abspath BUILD/.gcc-extra-install-cloog-ppl)
374 # For Linux we want to make sure we don't dynamically link in libstdc++
375 # because it ties our binaries to a host GCC version that other places
376 # the toolchain gets installed might not match.
377 ifeq ($(PLATFORM),linux)
378 lstdc++ = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
385 --with-gmp=$(GMP_DIR) \
386 --with-mpfr=$(MPFR_DIR) \
387 --with-ppl=$(PPL_DIR) \
388 --with-host-libstdcxx="-lpwl $(lstdc++) -lm" \
389 --with-cloog=$(CLOOG_DIR) \
390 --disable-ppl-version-check
399 GCC_CONFIGURE_FLAGS = \
400 --disable-decimal-float \
402 --disable-libmudflap \
404 --disable-libstdcxx-pch \
405 --target=$(CROSSARCH) \
406 --enable-linker-build-id \
410 ifeq ($(MULTILIB),no)
411 GCC_CONFIGURE_FLAGS += --disable-multilib
413 $(error MULTILIB: Bad value)
417 ifeq ($(PLATFORM), mac)
418 GCC_CC = clang -m$(HOST_TOOLCHAIN_BITS) -fgnu89-inline
419 GCC_CXX = clang++ -m$(HOST_TOOLCHAIN_BITS)
421 GCC_CC = gcc -m$(HOST_TOOLCHAIN_BITS)
422 GCC_CXX = g++ -m$(HOST_TOOLCHAIN_BITS)
430 GCC_CFLAGS_FOR_TARGET-nolibc =
431 GCC_CONFIGURE_FLAGS-nolibc = --disable-shared \
433 --enable-languages="c" \
436 GCC_CFLAGS_FOR_TARGET-newlib = -I$(HEADERS_FOR_BUILD)
438 GCC_CONFIGURE_FLAGS-newlib = --disable-shared \
439 --enable-languages="c,c++,objc" \
440 --enable-threads=nacl \
444 GCC_CFLAGS_FOR_TARGET-glibc =
445 GCC_CONFIGURE_FLAGS-glibc = --enable-shared \
446 --enable-languages="c,c++,objc,obj-c++,fortran" \
447 --enable-threads=posix \
451 BUILD/stamp-$(CROSSARCH)-pregcc: | SRC/gcc BUILD
453 $(MAKE) -f $(THISMAKEFILE) gcc-extras
455 rm -rf BUILD/build-pregcc-$(CROSSARCH)
456 mkdir BUILD/build-pregcc-$(CROSSARCH)
457 cd BUILD/build-pregcc-$(CROSSARCH) && \
459 $(GCC_SRC_DIR)/configure \
461 CFLAGS="$(USER_CFLAGS) $(GCC_DEFINES)" \
462 LDFLAGS="$(USER_LDFLAGS)" \
463 CFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-nolibc)" \
464 CXXFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-nolibc)" \
466 $(GCC_CONFIGURE_FLAGS) \
467 $(GCC_CONFIGURE_FLAGS-nolibc)
468 PATH=$(BUILDPATH) $(MAKE) \
469 -C BUILD/build-pregcc-$(CROSSARCH) \
470 all-gcc all-target-libgcc
471 PATH=$(BUILDPATH) $(MAKE) \
472 -C BUILD/build-pregcc-$(CROSSARCH) \
474 install-gcc install-target-libgcc
475 cp $(DESTDIR)$(PREFIX)/lib/gcc/$(CROSSARCH)/$(GCC_VERSION)/libgcc.a \
476 $(DESTDIR)$(PREFIX)/lib/gcc/$(CROSSARCH)/$(GCC_VERSION)/libgcc_eh.a
477 cp $(DESTDIR)$(PREFIX)/lib/gcc/$(CROSSARCH)/$(GCC_VERSION)/32/libgcc.a \
478 $(DESTDIR)$(PREFIX)/lib/gcc/$(CROSSARCH)/$(GCC_VERSION)/32/libgcc_eh.a |\
483 pregcc: BUILD/stamp-$(CROSSARCH)-pregcc
486 ##################################################################
488 # Builds the cross gcc used to build glibc.
489 # TODO(eaeltsin): now works for Linux only, enable for Windows/Mac
490 # TODO(eaeltsin): get rid of pregcc in favor of pregcc-standalone
491 ##################################################################
493 # Toplevel installation directory for pregcc.
494 # MUST be an absolute pathname, for configure --prefix=$(PREGCC_PREFIX)
495 # Pregcc is installed separately so that it is not overwritten with full gcc.
496 # Pregcc is needed for rebuilding glibc, while full gcc can't do that because
497 # of its incompatible libgcc.
498 PREGCC_PREFIX = $(abspath BUILD/install-pregcc-$(CROSSARCH))
500 # Build directory for pregcc.
501 PREGCC_BUILD_DIR = BUILD/build-pregcc-$(CROSSARCH)
504 # create links to binutils:
505 # Alternate approaches are to make PATH point to nacl binutils or to use
506 # pregcc with -B option. Both seem unreliable, as after full gcc is installed
507 # the search path will include full gcc stuff that should not be picked.
509 # DESTDIR should be ignored at this step.
510 BUILD/stamp-$(CROSSARCH)-pregcc-standalone: \
511 BUILD/stamp-$(CROSSARCH)-binutils | SRC/gcc BUILD
513 $(MAKE) -f $(THISMAKEFILE) gcc-extras
515 rm -rf $(PREGCC_PREFIX)
516 mkdir -p $(PREGCC_PREFIX)/$(CROSSARCH)/bin
517 for f in '$(DESTDIR)$(PREFIX)/$(CROSSARCH)/bin/*'; do \
518 ln -s $$f $(PREGCC_PREFIX)/$(CROSSARCH)/bin; \
520 rm -rf $(PREGCC_BUILD_DIR)
521 mkdir $(PREGCC_BUILD_DIR)
522 cd $(PREGCC_BUILD_DIR) && \
524 $(GCC_SRC_DIR)/configure \
526 CFLAGS="$(USER_CFLAGS) $(GCC_DEFINES)" \
527 LDFLAGS="$(USER_LDFLAGS)" \
528 CFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-nolibc)" \
529 CXXFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-nolibc)" \
530 --prefix=$(PREGCC_PREFIX) \
531 $(GCC_CONFIGURE_FLAGS) \
532 $(GCC_CONFIGURE_FLAGS-nolibc)
533 PATH=$(BUILDPATH) $(MAKE) \
534 -C $(PREGCC_BUILD_DIR) \
538 PATH=$(BUILDPATH) $(MAKE) \
539 -C $(PREGCC_BUILD_DIR) \
541 install-target-libgcc \
546 ##################################################################
548 # Builds the bare-bones library used by NativeClient applications.
549 # NOTE: removes the default pthread.h to enable correct install
550 # by the Native Client threads package build.
551 ##################################################################
555 BUILD/stamp-$(CROSSARCH)-newlib: | SRC/newlib BUILD newlib-libc-script
556 rm -rf BUILD/build-newlib-$(CROSSARCH)
557 mkdir BUILD/build-newlib-$(CROSSARCH)
558 PATH=$(BUILDPATH) && export PATH && \
559 cd BUILD/build-newlib-$(CROSSARCH) && \
560 ../../SRC/newlib/configure \
562 --enable-newlib-iconv \
563 --enable-newlib-iconv-from-encodings=UTF-8,UTF-16LE,UCS-4LE,UTF-16,UCS-4 \
564 --enable-newlib-iconv-to-encodings=UTF-8,UTF-16LE,UCS-4LE,UTF-16,UCS-4 \
565 --enable-newlib-io-long-long \
566 --enable-newlib-io-long-double \
567 --enable-newlib-io-c99-formats \
570 CFLAGS="$(USER_CFLAGS)" \
571 CFLAGS_FOR_TARGET='$(NEWLIB_CFLAGS)' \
572 CXXFLAGS_FOR_TARGET='$(NEWLIB_CFLAGS)' \
573 --target=$(CROSSARCH) && \
575 $(MAKE) DESTDIR=$(DESTDIR) install
576 ifeq ($(CANNED_REVISION), no)
577 # The buildbot script that creates the source tarball adds all the headers to
578 # the tarball itself (see buildbot/buildbot_linux-glibc-makefile.sh)
579 cp -f $(addprefix ../src/untrusted/pthread/, pthread.h semaphore.h) \
580 $(DESTDIR)$(PREFIX)/$(CROSSARCH)/include
582 for bits in 32 64; do \
583 mv $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib$$bits/libc.a \
584 $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib$$bits/libcrt_common.a; \
585 if [[ "$$bits" = "32" ]]; then \
586 objformat=elf32-i386-nacl ; \
588 objformat=elf64-x86-64-nacl ; \
590 sed "s/@OBJFORMAT@/$$objformat/" newlib-libc-script \
591 > $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib$$bits/libc.a; \
596 newlib: BUILD/stamp-$(CROSSARCH)-newlib
599 ##################################################################
601 ##################################################################
603 # Build directory for glibc.
604 GLIBC_BUILD_DIR = BUILD/build-glibc-$(CROSSARCH)
606 # Glibc is built with pregcc.
607 GLIBC_CC = $(PREGCC_PREFIX)/bin/$(CROSSARCH)-gcc
609 # CFLAGS for building glibc.
610 GLIBC_CFLAGS = -O2 -g
612 ARCH_DEST = $(DESTDIR)$(PREFIX)/$(CROSSARCH)
613 ARCH_DEST_INC_NATIVE = $(PREFIX_NATIVE)/$(CROSSARCH)/include
615 # LIB_BITS is used with different values to execute targets in this Makefile for
616 # different architectures (32, 64) when building libraries (glibc and nacl).
617 # CROSSARCH and BITSPLATFORM could be used for this, but we better avoid
618 # redefining variables with recursive $(MAKE) calls.
620 ARCH_DEST_LIB_NATIVE = $(PREFIX_NATIVE)/$(CROSSARCH)/$(if $(filter 32,$(LIB_BITS)),lib32,lib)
622 BUILD/stamp-glibc32: BUILD/stamp-$(CROSSARCH)-pregcc-standalone | SRC/glibc
623 if [[ ! -d $(LINUX_HEADERS) ]] ; then \
624 $(MAKE) -f $(THISMAKEFILE) SRC/linux-headers-for-nacl ; \
626 rm -rf BUILD/build-glibc32
627 mkdir -p BUILD/build-glibc32/lib
628 cd BUILD/build-glibc32 && ../../SRC/glibc/configure \
629 BUILD_CC="gcc -O2 -g" \
630 CC="$(GLIBC_CC) -m32" \
631 CFLAGS="-pipe -fno-strict-aliasing -mno-tls-direct-seg-refs -march=i486 $(GLIBC_CFLAGS)" \
632 libc_cv_forced_unwind=yes \
633 libc_cv_c_cleanup=yes \
634 libc_cv_slibdir=/lib32 \
635 libc_cv_z_combreloc=no \
638 --host=i486-linux-gnu \
639 --with-headers=$(LINUX_HEADERS) \
640 --enable-kernel=2.6.18
641 $(MAKE) -C BUILD/build-glibc32
642 $(MAKE) -C BUILD/build-glibc32 install_root=$(DESTDIR)$(PREFIX)/$(CROSSARCH) install
645 BUILD/stamp-glibc64: BUILD/stamp-$(CROSSARCH)-pregcc-standalone | SRC/glibc
646 if [[ ! -d $(LINUX_HEADERS) ]] ; then \
647 $(MAKE) -f $(THISMAKEFILE) SRC/linux-headers-for-nacl ; \
649 rm -rf BUILD/build-glibc64
650 mkdir -p BUILD/build-glibc64
651 cd BUILD/build-glibc64 && ../../SRC/glibc/configure \
652 BUILD_CC="gcc -O2 -g" \
653 CC="$(GLIBC_CC) -m64" \
654 CFLAGS="-pipe -fno-strict-aliasing -mno-tls-direct-seg-refs $(GLIBC_CFLAGS)" \
655 libc_cv_forced_unwind=yes \
656 libc_cv_c_cleanup=yes \
657 libc_cv_slibdir=/lib \
658 libc_cv_z_combreloc=no \
661 --host=x86_64-linux-gnu \
662 --with-headers=$(LINUX_HEADERS) \
663 --enable-kernel=2.6.18
664 $(MAKE) -C BUILD/build-glibc64
665 $(MAKE) -C BUILD/build-glibc64 install_root=$(DESTDIR)$(PREFIX)/$(CROSSARCH) install
668 # Can be used to make a glibc archive separately from the main install tree.
669 # Used, i.e., on buildbots.
670 INST_GLIBC_PREFIX ?= $(PREFIX)
671 .PHONY: install-glibc
672 install-glibc: BUILD/stamp-glibc32 BUILD/stamp-glibc64
673 rm -rf "$(INST_GLIBC_PREFIX)"/glibc
674 mkdir "$(INST_GLIBC_PREFIX)"/glibc
675 $(MAKE) -f $(THISMAKEFILE) sdkdirs \
676 DESTDIR="" PREFIX="$(INST_GLIBC_PREFIX)/glibc"
677 $(MAKE) -f $(THISMAKEFILE) -C BUILD/build-glibc32 \
678 install_root="$(INST_GLIBC_PREFIX)/glibc/$(CROSSARCH)" install
679 $(MAKE) -f $(THISMAKEFILE) -C BUILD/build-glibc64 \
680 install_root="$(INST_GLIBC_PREFIX)/glibc/$(CROSSARCH)" install
682 .PHONY: export-headers
683 export-headers: SRC/newlib
684 ifeq ($(CANNED_REVISION), no)
685 rm -rf $(HPREFIX)/{bits,sys,machine}
686 ../src/trusted/service_runtime/export_header.py \
687 ../src/trusted/service_runtime/include $(HPREFIX)
692 ##################################################################
693 # Ad hoc linker scripts and a selection of NaCl headers for GCC.
694 ##################################################################
695 .PHONY: glibc-adhoc-files
696 glibc-adhoc-files: | SRC/glibc
697 if [[ ! -d $(LINUX_HEADERS) ]] ; then \
698 $(MAKE) -f $(THISMAKEFILE) SRC/linux-headers-for-nacl ; \
700 install -m 755 -d $(ARCH_DEST)/lib/ldscripts
701 cp -f SRC/glibc/nacl/dyn-link/ldscripts/* \
702 $(ARCH_DEST)/lib/ldscripts/
703 mkdir -p $(ARCH_DEST)/include/machine
704 cp -rf $(LINUX_HEADERS)/{asm*,linux} $(ARCH_DEST)/include
705 ifeq ($(CANNED_REVISION), no)
706 cp ../src/untrusted/include/machine/_default_types.h \
707 $(ARCH_DEST)/include/machine/_default_types.h
709 cp _default_types.h \
710 $(ARCH_DEST)/include/machine/_default_types.h
712 for f in catchsegv gencat getconf getent iconv ldd locale \
713 localedef mtrace pcprofiledump rpcgen sprof tzselect xtrace; do \
714 rm -f $(ARCH_DEST)/bin/$$f ; \
716 # These libraries are in link lines because newlib needs them.
717 # Since glibc doesn't need them, we just stub them out as empty
718 # linker scripts. For -lfoo the linker looks for libfoo.so first
719 # and then libfoo.a, but only the latter under -static, so install
720 # under .a names to cover both cases.
721 for libdir in lib32 lib; do \
722 for lib in nacl nosys; do \
723 echo '/* Intentionally empty */' > \
724 $(PREFIX_NATIVE)/$(CROSSARCH)/$${libdir}/lib$${lib}.a; \
728 ##################################################################
730 # Builds GCC with glibc as a C library.
731 ##################################################################
732 SYSINCLUDE_HACK_TARGET = $(DESTDIR)$(PREFIX)/$(CROSSARCH)/sys-include
734 BUILD/stamp-$(CROSSARCH)-full-gcc: glibc-adhoc-files
736 $(MAKE) -f $(THISMAKEFILE) gcc-extras
738 rm -rf BUILD/build-full-gcc-$(CROSSARCH)
739 mkdir BUILD/build-full-gcc-$(CROSSARCH){,/lib}
740 ln -s $(DESTDIR)$(PREFIX)/$(CROSSARCH)/lib \
741 BUILD/build-full-gcc-$(CROSSARCH)/lib/gcc
742 # See http://code.google.com/p/nativeclient/issues/detail?id=854
743 rm -rf $(SYSINCLUDE_HACK_TARGET)
744 ln -s include $(SYSINCLUDE_HACK_TARGET)
745 cd BUILD/build-full-gcc-$(CROSSARCH) && \
747 $(GCC_SRC_DIR)/configure \
749 CFLAGS="$(USER_CFLAGS) $(GCC_DEFINES)" \
750 LDFLAGS="$(USER_LDFLAGS)" \
751 CFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-glibc)" \
752 CXXFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-glibc)" \
754 $(GCC_CONFIGURE_FLAGS) \
755 $(GCC_CONFIGURE_FLAGS-glibc)
756 ifeq ($(PLATFORM), linux)
757 if [[ "$(CROSSARCH)" = "x86_64-nacl" ]] ; then \
758 if file BUILD/build-pregcc-x86_64-nacl/gcc/cc1 | grep -q x86-64; \
760 export LD_PRELOAD=/lib64/libgcc_s.so.1 ; \
763 if ! (file BUILD/build-pregcc-x86_64-nacl/gcc/cc1 | grep -q x86-64); \
765 export LD_PRELOAD=/lib/libgcc_s.so.1 ; \
768 PATH=$(BUILDPATH) $(MAKE) \
769 -C BUILD/build-full-gcc-$(CROSSARCH) \
772 PATH=$(BUILDPATH) $(MAKE) \
773 -C BUILD/build-full-gcc-$(CROSSARCH) \
776 PATH=$(BUILDPATH) $(MAKE) \
777 -C BUILD/build-full-gcc-$(CROSSARCH) \
780 # See http://code.google.com/p/nativeclient/issues/detail?id=854
781 rm -rf $(SYSINCLUDE_HACK_TARGET)
784 ##################################################################
786 # Builds the gcc that will be used to build applications.
787 ##################################################################
788 BUILD/stamp-$(CROSSARCH)-gcc: BUILD/stamp-$(CROSSARCH)-newlib \
791 $(MAKE) -f $(THISMAKEFILE) gcc-extras
793 rm -rf BUILD/build-gcc-$(CROSSARCH)
794 mkdir BUILD/build-gcc-$(CROSSARCH)
795 mkdir -p $(SYSINCLUDE_HACK_TARGET)
796 # See http://code.google.com/p/nativeclient/issues/detail?id=854
797 rm -rf $(SYSINCLUDE_HACK_TARGET)
798 ln -s include $(SYSINCLUDE_HACK_TARGET)
799 cd BUILD/build-gcc-$(CROSSARCH) && \
801 $(GCC_SRC_DIR)/configure \
803 CFLAGS="$(USER_CFLAGS) $(GCC_DEFINES)" \
804 LDFLAGS="$(USER_LDFLAGS)" \
805 CFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-newlib)" \
806 CXXFLAGS_FOR_TARGET="-O2 -g $(GCC_CFLAGS_FOR_TARGET-newlib)" \
808 $(GCC_CONFIGURE_FLAGS) \
809 $(GCC_CONFIGURE_FLAGS-newlib)
810 PATH=$(BUILDPATH) $(MAKE) \
811 -C BUILD/build-gcc-$(CROSSARCH) \
813 PATH=$(BUILDPATH) $(MAKE) \
814 -C BUILD/build-gcc-$(CROSSARCH) \
817 # See http://code.google.com/p/nativeclient/issues/detail?id=854
818 rm -rf $(SYSINCLUDE_HACK_TARGET)
822 gcc: BUILD/stamp-$(CROSSARCH)-gcc
824 ##################################################################
827 ##################################################################
828 # Only linux and windows are supported.
829 BUILD/stamp-$(CROSSARCH)-gdb: | SRC/gdb BUILD
830 rm -rf BUILD/build-gdb-$(CROSSARCH)
831 mkdir BUILD/build-gdb-$(CROSSARCH)
832 ifeq ($(PLATFORM),win)
833 cd BUILD/build-gdb-$(CROSSARCH) && \
834 CC="x86_64-w64-mingw32-gcc -m32" \
835 CC_FOR_BUILD="x86_64-w64-mingw32-gcc -m32" \
836 LDFLAGS="$(USER_LDFLAGS)" \
837 CFLAGS="$(USER_CFLAGS)" \
838 ../../SRC/gdb/configure \
841 --host=x86_64-w64-mingw32 \
842 --target=x86_64-nacl \
843 --enable-targets=arm-none-nacl-eabi
844 $(MAKE) -C BUILD/build-gdb-$(CROSSARCH) all
845 $(MAKE) -C BUILD/build-gdb-$(CROSSARCH) DESTDIR=$(DESTDIR) install
847 cd BUILD/build-gdb-$(CROSSARCH) && \
849 LDFLAGS="$(USER_LDFLAGS)" \
850 CFLAGS="$(USER_CFLAGS)" \
851 ../../SRC/gdb/configure \
853 --target=x86_64-nacl \
854 --enable-targets=arm-none-eabi-nacl
855 $(MAKE) -C BUILD/build-gdb-$(CROSSARCH) all
856 $(MAKE) -C BUILD/build-gdb-$(CROSSARCH) DESTDIR=$(DESTDIR) install
861 gdb: BUILD/stamp-$(CROSSARCH)-gdb
864 ##################################################################
865 # Install headers from the NaCl tree locally for the gcc build to see.
866 ##################################################################
867 .PHONY: headers_for_build
870 ./$(SCONS) naclsdk_mode=custom:$(PREFIX_NATIVE) \
871 --verbose platform=x86-$(BITSPLATFORM) \
872 install_headers includedir=$(HEADERS_FOR_BUILD_NATIVE)
874 HEADERS_FOR_BUILD = \
875 $(abspath $(dir $(THISMAKEFILE)))/BUILD/headers_for_build
877 ifeq ($(PLATFORM), win)
878 HEADERS_FOR_BUILD_NATIVE = `cygpath -m $(HEADERS_FOR_BUILD)`
880 HEADERS_FOR_BUILD_NATIVE = $(HEADERS_FOR_BUILD)
883 ##################################################################
884 # Build the entire toolchain.
885 ##################################################################
887 # On platforms where glibc build is slow or unavailable you can specify
888 # glibc_download.sh (or any other program) to download glibc
889 INST_GLIBC_PROGRAM ?= none
890 .PHONY: build-with-glibc
891 build-with-glibc: SRC/gcc
892 $(MAKE) -f $(THISMAKEFILE) sdkdirs
893 cp -f SRC/gcc/COPYING* $(DESTDIR)$(PREFIX)
894 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-binutils
895 ifeq ($(INST_GLIBC_PROGRAM), none)
896 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-pregcc-standalone
897 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-glibc32
898 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-glibc64
900 $(INST_GLIBC_PROGRAM) "$(DESTDIR)$(PREFIX)"
902 cp -f SRC/glibc/sysdeps/nacl/{irt_syscalls,nacl_stat}.h \
903 "$(DESTDIR)$(PREFIX)/$(CROSSARCH)"/include
904 $(MAKE) -f $(THISMAKEFILE) export-headers
905 $(MAKE) -f $(THISMAKEFILE) glibc-adhoc-files
906 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-full-gcc
907 ifeq ($(CANNED_REVISION), no)
908 ifeq ($(PLATFORM), win)
910 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-gdb
913 $(CREATE_REDIRECTORS) "$(DESTDIR)$(PREFIX)"
914 for dir in lib32 lib64 ; do ( \
915 cd $(DESTDIR)$(PREFIX)/$(CROSSARCH)/$$dir ; \
916 for lib in BrokenLocale anl c cidn crypt dl m nsl \
917 nss_{compat,dns,files,hesiod,nis,nisplus} pthread \
918 resolv rt util ; do \
919 for fulllib in lib$$lib.so.* ; do \
920 mv lib$$lib-$(GLIBC_VERSION).so "$$fulllib" ; \
921 ln -sfn "$$fulllib" lib$$lib-$(GLIBC_VERSION).so ; \
924 for fulllib in ld-linux.so.* ld-linux-x86-64.so.* ; do \
925 if [[ "$$fulllib" != *\** ]] ; then \
926 mv ld-$(GLIBC_VERSION).so "$$fulllib" ; \
927 ln -sfn "$$fulllib" ld-$(GLIBC_VERSION).so ; \
930 for fulllib in libthread_db.so.* ; do \
931 mv libthread_db-1.0.so "$$fulllib" ; \
932 ln -sfn "$$fulllib" libthread_db-1.0.so ; \
934 chmod a+x libgcc_s.so.1 ; \
935 for fulllib in libgfortran.so.3.* ; do \
936 mv "$$fulllib" libgfortran.so.3 ; \
937 ln -sfn libgfortran.so.3 "$$fulllib" ; \
938 ln -sfn libgfortran.so.3 libgfortran.so ; \
940 for fulllib in libobjc.so.2.* ; do \
941 mv "$$fulllib" libobjc.so.2 ; \
942 ln -sfn libobjc.so.2 "$$fulllib" ; \
943 ln -sfn libobjc.so.2 libobjc.so ; \
945 for fulllib in libstdc++.so.6.* ; do \
946 mv "$$fulllib" libstdc++.so.6 ; \
947 ln -sfn libstdc++.so.6 "$$fulllib" ; \
948 ln -sfn libstdc++.so.6 libstdc++.so ; \
951 rm -rf "$(DESTDIR)$(PREFIX)"/{include,lib/*.a*,$(CROSSARCH)/lib{,32}/*.la}
952 rm -rf "$(DESTDIR)$(PREFIX)"/{lib/{*/*/*/*{,/*}.la,*.so*},lib{32,64}}
954 .PHONY: build-with-newlib
955 build-with-newlib: SRC/gcc
956 $(MAKE) -f $(THISMAKEFILE) sdkdirs
957 cp -f SRC/gcc/COPYING* $(DESTDIR)$(PREFIX)
958 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-binutils
959 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-pregcc
960 $(MAKE) -f $(THISMAKEFILE) export-headers
961 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-newlib
962 $(CREATE_REDIRECTORS) "$(DESTDIR)$(PREFIX)"
963 ifeq ($(CANNED_REVISION), no)
964 $(MAKE) -f $(THISMAKEFILE) headers_for_build
966 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-gcc
967 ifeq ($(CANNED_REVISION), no)
968 ifeq ($(PLATFORM), win)
970 $(MAKE) -f $(THISMAKEFILE) BUILD/stamp-$(CROSSARCH)-gdb
973 $(CREATE_REDIRECTORS) "$(DESTDIR)$(PREFIX)"
974 rm -rf "$(DESTDIR)$(PREFIX)"/{include,lib/*.a*,lib/*.so*,lib32,lib64}
976 ifeq ($(CANNED_REVISION), no)
977 # Newlib toolchain for buildbot.
978 .PHONY: buildbot-build-with-newlib
979 buildbot-build-with-newlib: | \
980 buildbot-mark-version \
982 find SRC -print0 | xargs -0 touch -r SRC
983 $(MAKE) -f $(THISMAKEFILE) build-with-newlib
985 # Don't generate patch files for things like gmp or linux-headers-for-nacl
986 # because these are not changed from upstream.
987 BINUTILS_PATCHNAME := naclbinutils-$(BINUTILS_VERSION)-r$(shell $(SVNVERSION) | tr : _)
988 GCC_PATCHNAME := naclgcc-$(GCC_VERSION)-r$(shell $(SVNVERSION) | tr : _)
989 #GDB_PATCHNAME := naclgdb-$(GDB_VERSION)-r$(shell $(SVNVERSION) | tr : _)
990 GLIBC_PATCHNAME := naclglibc-$(GLIBC_VERSION)-r$(shell $(SVNVERSION) | tr : _)
991 NEWLIB_PATCHNAME := naclnewlib-$(NEWLIB_VERSION)-r$(shell $(SVNVERSION) | tr : _)
993 patch-names = $(BINUTILS_PATCHNAME) $(GCC_PATCHNAME) \
994 $(GLIBC_PATCHNAME) $(NEWLIB_PATCHNAME)
995 patch-list = $(patch-names:%=SRC/%.patch)
997 $(patch-list): SRC/%.patch:
999 package=$${package#SRC/nacl} && \
1000 package=$${package/.patch/} && \
1001 basename=$${package/-*-r*} && \
1002 cd SRC/$${basename} && \
1003 git diff --patience --patch-with-stat --no-renames \
1004 --src-prefix=$$basename/ \
1005 --dst-prefix=$$basename/ \
1006 $(NACL_$(shell n=$@ ; n=$${n#SRC/nacl} ; echo $${n/-*-r*/} | \
1007 tr '[:lower:]-' '[:upper:]_')_GIT_BASE) \
1011 patches: $(patch-list)
1013 # Glibc toolchain for buildbot.
1014 .PHONY: buildbot-build-with-glibc
1015 buildbot-build-with-glibc: | \
1016 buildbot-mark-version \
1018 pinned-src-linux-headers-for-nacl \
1020 rm -rf SRC/gcc/gmp-* SRC/gcc/mpfr-*
1021 find SRC -print0 | xargs -0 touch -r SRC
1022 $(MAKE) -f $(THISMAKEFILE) build-with-glibc
1024 .PHONY: buildbot-mark-version
1025 buildbot-mark-version: | \
1026 pinned-src-binutils \
1030 printf -- "--- SRC/binutils/bfd/version.h\n\
1031 +++ SRC/binutils/bfd/version.h\n\
1033 -#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@\n\
1034 +#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ \" `LC_ALL=C $(SVN) info | grep 'Last Changed Date' | sed -e s'+Last Changed Date: \(....\)-\(..\)-\(..\).*+\1\2\3+'` (Native Client r`LC_ALL=C $(SVNVERSION)`, Git Commit `cd SRC/binutils ; LC_ALL=C git rev-parse HEAD`)\"\n" |\
1036 LC_ALL=C $(SVN) info | grep 'Last Changed Date' | sed -e s'+Last Changed Date: \(....\)-\(..\)-\(..\).*+\1\2\3+' > SRC/gcc/gcc/DATESTAMP
1037 echo "Native Client r`LC_ALL=C $(SVNVERSION)`, Git Commit `cd SRC/gcc ; LC_ALL=C git rev-parse HEAD`" > SRC/gcc/gcc/DEV-PHASE
1038 printf -- "--- SRC/gdb/gdb/version.in\n\
1039 +++ SRC/gdb/gdb/version.in\n\
1041 -`cat SRC/gdb/gdb/version.in`\n\
1042 +`cat SRC/gdb/gdb/version.in` `LC_ALL=C $(SVN) info | grep 'Last Changed Date' | sed -e s'+Last Changed Date: \(....\)-\(..\)-\(..\).*+\1\2\3+'` (Native Client r`LC_ALL=C $(SVNVERSION)`, Git Commit `cd SRC/gdb ; LC_ALL=C git rev-parse HEAD`)\n" |\
1046 ##################################################################
1047 # Run DejaGnu tests.
1048 ##################################################################
1050 SEL_LDR = $(abspath ../scons-out/opt-$(PLATFORM)-x86-$(BITSPLATFORM)/staging/sel_ldr)
1051 DEJAGNU_TIMESTAMP := $(shell date +%y%m%d%H%M%S)
1056 ./$(SCONS) naclsdk_mode=custom:$(DESTDIR)$(PREFIX) \
1057 --mode=opt-host,nacl platform=x86-$(BITSPLATFORM) \
1063 ./$(SCONS) naclsdk_mode=custom:$(DESTDIR)$(PREFIX) \
1064 --mode=opt-host,nacl platform=x86-$(BITSPLATFORM) \
1065 --verbose run_hello_world_test)
1066 mkdir BUILD/build-gcc-$(CROSSARCH)/results.$(DEJAGNU_TIMESTAMP)
1068 -C BUILD/build-gcc-$(CROSSARCH) \
1069 DEJAGNU=$(abspath dejagnu/site.exp) \
1071 --target_board=nacl \
1072 --outdir=$(abspath BUILD/build-gcc-$(CROSSARCH)/results.$(DEJAGNU_TIMESTAMP)) \
1074 LDFLAGS_FOR_TARGET="-lnosys" \
1078 ##################################################################
1080 ##################################################################
1083 glibc-check: $(SEL_LDR)
1084 GLIBC_TST_COLLECT2="$(PREGCC_PREFIX)/libexec/gcc/$(CROSSARCH)/$(GCC_VERSION)/collect2" \
1085 GLIBC_TST_STATIC_LDSCRIPT="$(DESTDIR)$(PREFIX)/$(CROSSARCH)"/lib/ldscripts/elf64_nacl.x.static \
1086 GLIBC_TST_NACL_LOADER="$(SEL_LDR)" \
1087 GLIBC_TST_NACL_LIBDIR="$(DESTDIR)$(PREFIX)/$(CROSSARCH)"/lib \
1088 glibc-tests/run_tests.sh $(BITSPLATFORM)
1090 .PHONY: glibc-check32
1091 glibc-check32: $(SEL_LDR)
1092 GLIBC_TST_COLLECT2="$(PREGCC_PREFIX)/libexec/gcc/$(CROSSARCH)/$(GCC_VERSION)/collect2" \
1093 GLIBC_TST_STATIC_LDSCRIPT="$(DESTDIR)$(PREFIX)/$(CROSSARCH)"/lib/ldscripts/elf_nacl.x.static \
1094 GLIBC_TST_NACL_LOADER="$(SEL_LDR)" \
1095 GLIBC_TST_NACL_LIBDIR="$(DESTDIR)$(PREFIX)/$(CROSSARCH)"/lib32 \
1096 glibc-tests/run_tests.sh $(BITSPLATFORM)
1099 ##################################################################
1100 # Compile Native Client tests with the toolchain and run them.
1101 ##################################################################
1106 $(SCONS_DESTINATIONS_NOLIB) \
1107 --mode=opt-host,nacl platform=x86-$(BITSPLATFORM) \
1108 --nacl_glibc --verbose small_tests)
1111 ##################################################################
1112 # Remove the BUILD directory.
1113 # Library builds are maintained by scons.
1114 ##################################################################