aboutsummaryrefslogtreecommitdiff
path: root/Makefile
Commit message (Collapse)AuthorAgeFilesLines
* Rename NO_WERROR -> MK_WERROR=noAlex Richardson2021-01-071-1/+1
| | | | | | | | As suggested in D27598. This also supports MK_WERROR.clang=no and MK_WERROR.gcc=no to support the existing NO_WERROR.<compiler> uses. Reviewed By: brooks Differential Revision: https://reviews.freebsd.org/D27601
* Makefile: re-wordsmith the blurb about xtoolchain portsKyle Evans2020-11-141-8/+10
| | | | | | | | | | | | | | | The new version only includes a specific version once, and uses the one that's currently advised by tinderbox: -gcc6. It also advises just installing the pkg, but mentions in a side-note at the end where to find the source in the ports tree. Reviewed by: jrtc27 Suggested by: jhb (use default from tinderbox) Differential Revision: https://reviews.freebsd.org/D26820 Notes: svn path=/head/; revision=367688
* pkgbase: Add incremental packagesEmmanuel Vadot2020-11-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds a new target update-packages which will create the new packages compared to the last run. This is how to use it: At this point we cut a release $ make buildworld ... $ make buildkernel $ make packages There is now a PKG_VERSION directory with latest link pointing to it Distribute the packages to server $ something something that update the source tree $ make buildworld ... $ make buildkernel $ make update-packages You know have a PKG_VERSION directory in the REPODIR and latest link pointing to it. In PKG_VERSION dir only the packages which differs from the latest run are named PKG_VERSION, otherwise the old packages are there. The process is : Build the new packages in the PKG_VERSION directory Compare the internal data with the PKG_VERSION_FROM version. The comparison is done by checking the internal hash of the packages. By default PKG_VERSION_FROM is set to what the latest link points to. If the old and new version matches, we rm the new package and cp the old one. Differential Revision: https://reviews.freebsd.org/D25984 Notes: svn path=/head/; revision=367277
* Makefile: add a small blurb about building with gcc xtoolchainKyle Evans2020-10-161-0/+9
| | | | | | | | | | The key details are to install the appropriate flavor of devel/freebsd-gcc9 and pass CROSS_TOOLCHAIN while building. Suggested by: kib Notes: svn path=/head/; revision=366766
* Eliminate building LINT makefilesWarner Losh2020-10-091-10/+0
| | | | | | | | | | | LINT config files are about to be checked in directly. Eliminate building them by hand here from NOTES files. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D26540 Notes: svn path=/head/; revision=366555
* [PowerPC64LE] Set up powerpc.powerpc64le architectureBrandon Bergren2020-09-221-1/+1
| | | | | | | | | | | | | | | | | | This is the initial set up for PowerPC64LE. The current plan is for this arch to remain experimental for FreeBSD 13. This started as a weekend learning project for me and kinda snowballed from there. (More to follow momentarily.) Reviewed by: imp (earlier version), emaste Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D26399 Notes: svn path=/head/; revision=366032
* Fix typo in r364325 that broke tinderbox with -DBUILD_WITH_STRICT_TMPPATHAlex Richardson2020-08-251-1/+1
| | | | | | | | | | | ${TARGET_ARCH} is empty here which results in empy MAKE_PARAMS being passed to the buildkernel phase. This breaks the build when using the strict TMPPATH since cc will not be included in $PATH. Reviewed By: jhb Notes: svn path=/head/; revision=364764
* Add a USE_GCC_TOOLCHAINS knob to make universe.John Baldwin2020-08-171-14/+24
| | | | | | | | | | | | | | | | | | This uses GCC toolchains instead of LLVM on architectures supported by GCC. Currently this uses GCC 6 on aarch64, amd64, i386, and mips. Although this does also try to use GCC 6 on powerpc, it is always skipped for now since a powerpc-gcc6 package is not available and the structure of make universe makes it hard to skip a subset of arches for a target. This should be short-lived as freebsd-gcc9 does include a powerpc-gcc9 package so powerpc should work once this switches to GCC 9. Discussed with: emaste Differential Revision: https://reviews.freebsd.org/D25732 Notes: svn path=/head/; revision=364325
* Use universe-toolchain config(8)Bryan Drewery2020-04-291-0/+1
| | | | | | | | | | | | | | | | | This is a temporary hack to aid with config(8) changing in r360443. It will not work for all cases. env PATH is used because universe-toolchain is only built when worlds are built, and then only if clang is needed, so it may not exist. universe-toolchain needs to be expanded to always be built, inspected to remove non-cross-build-safe tools, used for buildworld/buildkernel, and potentially incremental build support. Sponsored by: Dell EMC Notes: svn path=/head/; revision=360453
* Add powerpcspe to the EXTRA_TARGETSWarner Losh2020-03-311-3/+4
| | | | | | | | | | | | Currently, powerpcspe is broken with clang. Add it to the EXTRA_TARGETS until that's fixed. Reviewed by: brooks, bdrewery, emaste (LGTM) MFC After: 3 days Differential Revision: https://reviews.freebsd.org/D24212 Notes: svn path=/head/; revision=359497
* Fix make kernels to match original commit messageWarner Losh2020-03-311-1/+1
| | | | | | | | | | | | | | | | | | | make kernels was originally documented (in commit r295099) as the same as make universe -DJUST_BUILD_KERNELS. However, it used the UNIVERSE_TARGET=buildkernel which is subtly different in that it also builds the toolchains and doesn't build the LINT modules unless they happened to already exist in the tree. This unbreaks POLA and just builds the kernels, including LINT, now rather than all that other stuff as well. When the commit originally happened, the two just differed by the LINT bug. r335711 introduced the universe dependency on the toolchain that wasn't present before, which diverged the two further. This restores the original intent of r295099. Reviewed by: brooks, bdrewery, emaste (LGTM) MFC After: 3 days Differential Revision: https://reviews.freebsd.org/D24212 Notes: svn path=/head/; revision=359495
* Make universe configuration more consistent with rest of systemWarner Losh2020-03-311-10/+17
| | | | | | | | | | | | | | | Add 'WITHOUT_WORLDS' and 'WITHOUT_KERNELS' as aliases for the inconsistently named MAKE_JUST_KERNELS and MAKE_JUST_WORLDS respectively. I always forget the MAKE_ part (or is it BUILD_), and it's inconsistent with everything else. Document the new things, but leave speculation of any eventual MAKE_JUST_* deprecation out of the manuals and comments. Reviewed by: brooks, bdrewery, emaste (LGTM) MFC After: 3 days Differential Revision: https://reviews.freebsd.org/D24212 Notes: svn path=/head/; revision=359494
* Disable rarely used architecture variants in make universe by default.John Baldwin2020-03-241-5/+6
| | | | | | | | | | | | | | | | If EXTRA_TARGETS is defined, build all supported architecture variants. By default, build architecture variants needed to provide code coverage or that are commonly used. Use this to disable building of all the hard-float and little-endian MIPS architecture variants along with n32 by default. Reviewed by: rpokala Discussed with: imp, emaste Differential Revision: https://reviews.freebsd.org/D24178 Notes: svn path=/head/; revision=359275
* Use Clang and LLD as the default toolchain for MIPSAlex Richardson2020-03-231-5/+5
| | | | | | | | | | | | Now that we have updated the in-tree version of LLVM to 10.0, we have all the necessary LLVM changes to use Clang+LLD as the default toolchain for MIPS. Relnotes: yes Reviewed By: emaste, jhb, brooks, kevans Differential Revision: https://reviews.freebsd.org/D23204 Notes: svn path=/head/; revision=359233
* Per the firm plan, start to remove sparc64Warner Losh2020-02-021-5/+3
| | | | | | | | | | The sparc64 architecture is being removed from FreeBSD 13, starting now. This removes it from the top level only. It is the only architecture that didn't see substantial work after the call to get things working with the external toolchain. Notes: svn path=/head/; revision=357407
* Use clang and lld as the default toolchain for RISCV.John Baldwin2020-01-081-5/+2
| | | | | | | | | | | | | | - Enable clang and lld as system toolchains. - Don't use external GCC for universe by default. - Re-enable riscv64sf since it builds fine with clang + lld. Reviewed by: emaste, mhorne Relnotes: yes Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D23089 Notes: svn path=/head/; revision=356499
* Don't fail universe kernel stage for TARGET_ARCHes without a kernel config.John Baldwin2020-01-071-0/+1
| | | | | | | | | | | | | | | This fixes a regression in r356418 where the entire universe would fail early due to an undefined make target when a given TARGET_ARCH had no associated kernel configs. This is true for all of the hard-float mips TARGET_ARCHes currently. Pointy hat to: me Reviewed by: emaste MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D23071 Notes: svn path=/head/; revision=356478
* Remove support for using GCC 4.2.1 from make tinderbox.John Baldwin2020-01-071-12/+4
| | | | | | | | Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D23054 Notes: svn path=/head/; revision=356452
* Enable powerpc in make tinderbox using clang instead of GCC.John Baldwin2020-01-061-7/+3
| | | | | | | | | | | powerpcspe is disabled for now until clang/llvm issues with spe have been fixed. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D23031 Notes: svn path=/head/; revision=356419
* Only build kernels for enabled TARGET_ARCHes in make universe/tinderbox.John Baldwin2020-01-061-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | Previously, all of the kernels for a given TARGET were built if that target was enabled. This was implemented by having each kernel built via a universe_kernconf_<KERNEL> target that was depended on by a universe_kernconfs target. However, this meant that if one did a build with a limited set of TARGET_ARCH values for a given TARGET, kernels could be built for which we hadn't built a world or toolchain. For example, 'make TARGETS=mips TARGET_ARCHES_mips=mips64' would build mips32 kernels. Fix this by adding an extra layer of indirection in the kernel make targets. universe_kernconf_<KERNEL> is now a dependency of a new universe_kernconfs_<TARGET_ARCH>. universe_kernconfs in turn depends on a list of universe_kernconfs_<target_arch> values, but only the values enabled in TARGET_ARCHES_<TARGET>. Reviewed by: imp MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D23031 Notes: svn path=/head/; revision=356418
* Use the freebsd-gcc6 toolchains instead of powerpc64-xtoolchain-gcc.John Baldwin2020-01-041-9/+9
| | | | | | | | Reviewed by: brooks Differential Revision: https://reviews.freebsd.org/D23029 Notes: svn path=/head/; revision=356344
* Add the missing trailing '/' when setting TARGET_ARCH from TARGETAndrew Turner2020-01-021-1/+1
| | | | | | | | | This should fix the build when setting TARGET but not TARGET_ARCH. Sponsored by: DARPA, AFRL Notes: svn path=/head/; revision=356269
* Remove arm/arm as a valid target.Warner Losh2020-01-021-2/+1
| | | | | | | | | | | | | | | | | | | | | | | TARGET=arm now defaults to TARGET_ARCH=armv7 TARGET_ARCH=arm is no longer valid. Bump __FreeBSD_version to 1300073 Tested with make universe. Any stale LINT-V5 config files remaining in the tree will fail the universe build. However, LINT-V5 was removed in r355119. This retirement has been planned since last summer. The armv5 port is fragile: it works OK for some peeople, and fails badly for others. There's a number of subtle bugs in busdma, pmap and other MD parts of thee system that present themselves under load or in unusual circumstances (like fsck after a crash). stable/8, branched 10 years ago, was the last reliable release. Since the support burden is larger then the benefit, the consensus view is armv5 should be removed from the tree. Discussed with: arm@ mailing list and arm developer community. Notes: svn path=/head/; revision=356263
* Take arm.arm (armv5) out of universeConrad Meyer2019-11-031-1/+2
| | | | | | | | | | It's on the chopping block in two months, the CI tinderbox doesn't bother with it anymore either, and buildworld fails today due to an issue linking clang. It's not worth investigating and it just eats up CPU cycles running universe builds. Notes: svn path=/head/; revision=354290
* Disconnect powerpc from the default tinderbox for now.John Baldwin2019-10-141-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | The wrong toolchain was set in MAKE_PARAMS_powerpc, however, there are some other issues preventing powerpc from building in tinderbox: 1) There is no powerpc-gcc and powerpc-xtoolchain-gcc port that provides an external 32-bit powerpc GCC toolchain. 2) On other targets, the same toolchain can build all of the architectures for a given target. MIPS achieves this by always setting -mabi and -EB/-EL explicitly instead of relying on the compiler's default architecture. PowerPC might be able to do the same thing, but as of today, powerpc-gcc would be required for powerpc and powerpcspe and powerpc64-gcc would be required for powerpc64. Our existing logic for make universe does not permit per-MACHINE_ARCH toolchains. I tried hacking TARGETS_powerpc to only include powerpc64 when powerpc64-gcc was present, and while that skipped the 32-bit worlds, it tried to build all the kernels. Reported by: jeff Discussed with: imp Notes: svn path=/head/; revision=353523
* Wordsmith and simplifyWarner Losh2019-10-091-9/+7
| | | | | | | | | | | | | | | Simplify expressions as suggested by jhb. The extra indirection made sense in earlier versions of this patch, but not the final one. While here, apply suggestion from emaste for wording of universe. Also wordsmith awkwardly worded comment about when we effectively neuter the universe build for an architecture. Once llvm 9.0 has been vetted for mips and powerpc, I'll take them out of these lists. Notes: svn path=/head/; revision=353370
* Don't compile old gcc 4.2.1 archs by default in universe/tinderbox.Warner Losh2019-10-091-7/+31
| | | | | | | | | | | | | | | | | | Only compile clang supporting architectures of amd64, arm, arm64, i386, and riscv as part of universe. Compile the other architectures if MAKE_OBSOLETE_GCC is defined. In all cases, explicit lists of architectures in TARGETS= on the command line override. For mips, powerpc and sparc64, do the same thing we do for risvc when MAKE_OBSOLETE_GCC isn't defined and short-circuit their universe build with an echo saying to install the xtoolchain port or pkg. PR: 241134 Discussed on: arch@ (https://lists.freebsd.org/pipermail/freebsd-arch/2019-August/019674.html) Differential Revision: https://reviews.freebsd.org/D21942 Notes: svn path=/head/; revision=353367
* Add a top-level makeman targetKyle Evans2019-10-011-1/+2
| | | | | | | | Abstracting away the details of how src.conf(5) is generated is arguably a good thing; do so with a top-level makeman target. Notes: svn path=/head/; revision=352929
* pkgbase: Add the sub stage-packages targets to TGTSEmmanuel Vadot2019-07-241-1/+1
| | | | | | | | | | This helps when you don't want to run the dependencies targets. Reviewed by: bapt Differential Revision: https://reviews.freebsd.org/D20955 Notes: svn path=/head/; revision=350275
* Modernize the MAKE_JUST_KERNELS hint in the top-level makefile.Mark Johnston2019-05-241-7/+2
| | | | | | | | | | | | | It doesn't make sense to limit to -j12 anymore, build scalability is better than it used to be. Fold the hint into the description of the universe target. Reviewed by: imp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D20342 Notes: svn path=/head/; revision=348241
* Fix a typo when sanity checking in the bootstrap-tools targetEnji Cooper2019-04-091-1/+1
| | | | | | | | | | | | | The path is incorrect for the linker in the error message. It should have been /usr/bin/ld, not /usr/bin/cc . Reviewed by: emaste Approved by: emaste (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D19852 Notes: svn path=/head/; revision=346056
* Update comment about 'universe' disk usageEric van Gyzen2018-11-101-3/+4
| | | | | | | | | | It's 167 GB now (or 81 GB with ZFS lz4). MFC after: 2 weeks Sponsored by: Dell EMC Isilon Notes: svn path=/head/; revision=340328
* Add a top-level make target to rebuild all sysent files.Brooks Davis2018-11-081-0/+2
| | | | | | | | | | | | | | The sysent target is useful when changing makesyscalls.sh, when making paired changes to syscalls.master files, or in a future where freebsd32 sysent entries are built from the default syscalls.master. Reviewed by: bdrewery Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D17899 Notes: svn path=/head/; revision=340242
* Allow building world without inheriting $PATHAlex Richardson2018-11-051-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Inheriting $PATH during the build phase can cause the build to fail when compiling on a different system due to missing build tools or incompatible versions somewhere in $PATH. This has cause build failures for us before due to the jenkins slaves still running FreeBSD 10. Listing the tools we depend on explicitly instead of just using whatever happens to be in $PATH allows us to check that we don't accidentally add a new build dependency. All tools that do no need to be bootstrapped will now be symlinked to ${WORLDTMP}/legacy/bin and during the build phase $PATH will only contain ${WORLDTMP}. There is also a new variable "BOOTSTRAP_ALL_TOOLS" which can be set to force compiling almost all bootstrap tools instead of symlinking them. This will not bootstrap tools such as cp,mv, etc. since they may be used during the build and for those we should really only be using POSIX compatible options. Furthermore, this change is required in order to be able to build on non-FreeBSD hosts. While the same binaries may exist on Linux/MacOS they often accept different flags or produce incompatible output. Approved By: brooks (mentor) Differential Revision: https://reviews.freebsd.org/D16815 Notes: svn path=/head/; revision=340157
* Don't include the broken riscv64sf TARGET_ARCH in universe.Brooks Davis2018-10-091-1/+2
| | | | | | | | | | | | | | riscv64sf has been broken due to duplicate symbols for months and degrades the quality of universe builds. Remove it until this is resolved leaving a comment to it is not re-added. PR: 232085 Reviewed by: emaste Approved by: re (gjb, kib) Sponsored by: DARPA, AFRL Notes: svn path=/head/; revision=339272
* As discussed several times on freebsd-arch, start to decommission armeb.Warner Losh2018-07-171-1/+1
| | | | | | | | | | Remove armeb/arm from KNOWN_ARCHS. Remove armeb from arm universe targets. Differential Revision: https://reviews.freebsd.org/D16257 Notes: svn path=/head/; revision=336434
* tinderbox: If the clang lookup fails fallback to the old default behavior.Bryan Drewery2018-06-281-6/+8
| | | | | | | | | | | | | This fixes errors from the MK_CLANG_BOOTSTRAP/MK_LLD_BOOTSTRAP lookups to not force using XCC/XLD but to rather just build them as normal by allowing their own bootstrap logic to work. MFC after: 3 weeks X-MFC-with: r335711 r335769 Sponsored by: Dell EMC Notes: svn path=/head/; revision=335770
* Include existing MAKE_PARAMS_<target> when determining the universe toolchain.John Baldwin2018-06-281-2/+2
| | | | | | | | | | | | | | | This fixes a warning for each RISCV target during universe by passing in the required CROSS_TOOLCHAIN setting which will in turn set CROSS_BINUTILS_PREFIX correctly. It also ensures that a tinderbox build uses the correct compiler for riscv. Previously it was using the shared clang compiler instead of riscv64-gcc. Reviewed by: bdrewery Sponsored by: DARPA / AFRL Differential Revision: https://reviews.freebsd.org/D16049 Notes: svn path=/head/; revision=335769
* Fix typo in top-level MakefileDevin Teske2018-06-271-1/+1
| | | | | | | | | | | Submitted by: Ben Widawsky <ben.widawsky@intel.com> MFC after: 3 days X-MFC-to: stable/11 stable/10 Sponsored by: Smule, Inc. Differential Revision: https://reviews.freebsd.org/P186 Notes: svn path=/head/; revision=335750
* tinderbox: Only build clang/lld once if needed.Bryan Drewery2018-06-271-2/+79
| | | | | | | | | | | | | | Need to handle LLD_BOOTSTRAP separately (for archs like i386). This would be much better off with an off-by-default option like SHARED_TOOLCHAIN that universe force-enabled. Then a normal buildworld would store the toolchain there if enabled and otherwise in WORLDTMP with only the 1 arch selected. MFC after: 3 weeks Sponsored by: Dell EMC Notes: svn path=/head/; revision=335711
* tinderbox: Give details about kernel builds.Bryan Drewery2018-06-271-2/+7
| | | | | | | | | | | | This is a bit noisy now but it was silent before leading to wondering if it was doing anything. MFC after: 1 week Suggested by: rpokala Sponsored by: Dell EMC Notes: svn path=/head/; revision=335708
* Only look for NOTES as needed.Bryan Drewery2018-06-201-4/+4
| | | | | | | Sponsored by: Dell EMC Notes: svn path=/head/; revision=335460
* Add WITH_SYSTEM_LINKER, on by default, that avoids building lld when possible.Bryan Drewery2018-06-201-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This works similar to WITH_SYSTEM_COMPILER added in r300354. It only supports lld via WITH_LLD_BOOTSTRAP. When both SYSTEM_COMPILER and SYSTEM_LINKER logic passes then libclang will not build in cross-tools. If either check fails though then libclang is built. The .info is reworked to notify when libclang will be built since if either clang or lld needs to be rebuilt, but not the other, the notification can lead to confusion on why "clang is building". -fuse-ld= is not used with this method so some combinations of compiler and linker are expected to fail. A new 'make test-system-linker' target is added to see the logic results. Makefile.inc1: CROSS_BINUTILS_PREFIX support had to be moved higher up so that XLD could be set and MK_LLD_BOOTSTRAP disabled before checking SYSTEM_LINKER logic as done with SYSTEM_COMPILER. This also required moving where bsd.linker.mk was read since XLD needs to be set before parsing it. This creates a situation where src.opts.mk can not test LINKER_FEATURES or add LLD_BOOTSTAP to BROKEN_OPTIONS. Reviewed by: emaste (earlier version) Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D15894 Notes: svn path=/head/; revision=335450
* Restore arm, riscv, sparc64, and mips to UNIVERSE after r334128Ed Maste2018-05-241-2/+1
| | | | Notes: svn path=/head/; revision=334153
* libpmcstat: compile in events based on json descriptionMatt Macy2018-05-241-1/+2
| | | | Notes: svn path=/head/; revision=334128
* Don't read SRC_ENV_CONF for MAKEOBJDIRPREFIX guard.Bryan Drewery2018-03-031-3/+3
| | | | | | | | | | | | | | This is mostly to allow using MAKEOBJDIRPREFIX in src-env.conf on stable where src.sys.obj.mk is not going to be MFC'd. It is still valid on head but effectively a NOP due to MAKEOBJDIRPREFIX being handled differently in src.sys.obj.mk. Reported by: eadler MFC after: 1 week Sponsored by: Dell EMC Notes: svn path=/head/; revision=330364
* Add a note about why we have the conditional before includingWarner Losh2018-02-071-2/+6
| | | | | | | | | | | | | | | | bsd.compiler.mk. It's so fmake from older 9.x systems still works (still a supported build config, and having the note here will let us know when we can cull it more easily). Also pull in a related change from include to sinclude from arichardson@'s cross building work, as well as it's companion in Makefile.inc1 with a note about why we do the odd thing there. Submitted by: archardson Differential Revision: https://reviews.freebsd.org/D14241 Notes: svn path=/head/; revision=328975
* crossbuild: Make the CHECK_TIME variable work on LinuxAlex Richardson2018-02-061-1/+1
| | | | | | | | | | | | | Linux /usr/bin/find doesn't understand the -mtime -0s flag. Instead create a temporary file and compare that file's mtime to sys/sys/param.h to check whether the clock is correct. Reviewed By: jhb, imp Approved By: jhb (mentor) Differential Revision: https://reviews.freebsd.org/D14157 Notes: svn path=/head/; revision=328935
* tinderbox/universe: Don't execute KERNCONFS lookup if not needed.Bryan Drewery2017-12-071-0/+2
| | | | | | | Sponsored by: Dell EMC Notes: svn path=/head/; revision=326648
* Revert r325529: No longer needed after r325699.Bryan Drewery2017-12-071-1/+1
| | | | | | | Sponsored by: Dell EMC Notes: svn path=/head/; revision=326647