aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
Commit message (Collapse)AuthorAge
* Fix link order for all rules using the java library helper.Gravatar Ulf Adams2015-08-27
| | | | | | | | | | | By default, we collect Java-specific link options first, and only collect C++ link options if the dependency does not have Java ones. Longer term, the language-specific link options providers should be replaced by aspects. -- MOS_MIGRATED_REVID=101669588
* Distinguish between user-supplied ios_cpu and the default, and don't ↵Gravatar Michael Thvedt2015-08-27
| | | | | | | propagate the default to the XCode project control. -- MOS_MIGRATED_REVID=101644957
* Add a isLoadingPhase flag to EnvironmentGravatar Francois-Rene Rideau2015-08-27
| | | | | | | | | Have loadingPhase-only methods check that flag. It's no use removing the initial bindings to these methods when they may have been copied anyway. -- MOS_MIGRATED_REVID=101624770
* Create ValidationEnvironment from EnvironmentGravatar Francois-Rene Rideau2015-08-27
| | | | | | | | Allow ValidationEnvironment to be created from initial Environment so that there is no need to manually keep two different sets of constructors in synch. -- MOS_MIGRATED_REVID=101588695
* Fix check for srcs-less android_* rulesGravatar Liam Miller-Cushon2015-08-27
| | | | | | | | | | | | In android rules with no srcs, deps are treated like exports by strict java deps. This fixes the check for srcs-less targets to consider srcjars in addition to .java files. This bug was fixed for java_* rules by adding the runtime_deps attribute, and disallowing deps in srcs-less rules. -- MOS_MIGRATED_REVID=101581572
* Expose java_import and android_library information to skylarkGravatar Liam Miller-Cushon2015-08-27
| | | | | -- MOS_MIGRATED_REVID=101579648
* Clean up the link command action code a bit.Gravatar Ulf Adams2015-08-27
| | | | | -- MOS_MIGRATED_REVID=101568873
* Replace query option --order_results with --order_output, which can take ↵Gravatar Janak Ramakrishnan2015-08-26
| | | | | | | | | | | three values for a given output formatter: 'no', 'deps', or 'full'. A fourth value, 'auto', means either 'deps' or 'full' depending on the formatter. The option 'no' is equivalent to --noorder_results. 'full' means that output will be deterministically ordered, using alphabetization if necessary. 'deps' means that graph order will be preserved (where applicable), but further efforts to order the output may not be undertaken. 'auto' is equivalent to 'full' for all output formatters except for proto, minrank, maxrank, and graph, for which it is equivalent to 'deps'. The purpose of this cl is to enable genquery to force completely deterministic output, which requires that it be able to specify a total ordering on the graph that is consistent across runs. Which ordering doesn't matter very much, so depending on the output formatter, or even within the same one, there may be some groups of nodes that are ordered alphabetically, and some reverse alphabetically. -- MOS_MIGRATED_REVID=101512292
* Implement the core structure for dynamic configurations.Gravatar Greg Estren2015-08-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a big change, so let me walk you through the key pieces: 1) This cl provides an alternative mechanism for creating configurations and doing configuration transitions that's "dynamic" in that the configurations can be created on the fly and the transitions are arbitrary mappings from BuildOptions --> BuildOptions that can also be created on the fly. It also integrates this with ConfiguredTargetFunction, so the configured target graph automatically uses this framework. 2) It does *not* replace old-style (which we'll call "static") configurations. For a number of important reasons: It's not yet at feature parity (particularly: no LIPO). It's not remotely tested across real projects enough to have confidence that it's battle-ready. It doesn't yet handle certain "special" functions like BuildConfiguration.prepareToBuild() and BuildConfiguration.getRoots(). It still relies on the old static transition logic to determine what transitions to apply (eventually we'll distribute that logic out, but that's too much for a single cl). We need the option to toggle it on and off until we have enough confidence in it. So with this cl, builds can be done in either mode. 3) The new flag --experimental_dynamic_configs toggles use of dynamic configurations. 4) Dynamic configurations are created with the Skyframe function BuildConfigurationFunction (this was already created in an earlier change). This consumes a BuildOptions and a set of configuration fragments to produce a BuildConfiguration. 5) Dynamic transitions are instances of the new class PatchTransition, which simply maps an input BuildOptions to an output BuildOptions. 6) Since static and dynamic configurations have to co-exist (for now), this cl tries hard to keep today's transition logic defined in a single place (vs. forking a dedicated copy for each configuration style). This is done via the new interface BuildConfiguration.TransitionApplier. BuildConfiguration.evaluateTransition is modified to feed its transition logic into TransitionApplier's common API. Both dynamic and static configurations have their own implementations that "do the right thing" with the results. 7) The transition applier for dynamic configurations basically stores the Transition, then allows DependencyResolver (which calls BuildConfiguration.evaluateTransition) to return Dependency instances containing that Transition (vs. a BuildConfiguration, which they traditionally contain). 7.5) An earlier variation of the dynamic transition applier retained BuildOptions (e.g. when it got a Transition it immediately applied it to get its output BuildOptions, then stored that). This had the advantage of making composing of transitions easier, especially within BuildConfiguration.evaluateTransition (which can theoretically apply multiple transitions to the input configuration). But it turns out that applying transitions has a cost, and it's simply more performant to pass them through until they're really needed. 8) In dynamic configuration mode, after ConfiguredTargetFunction gets its deps (e.g. an <Attribute, Dependency> multimap), it "trims" the configurations for its dependencies by a) only including config fragments required by the deps' subtrees and b) applying the transitions that came from 7). This all happens in the new method ConfiguredTargetFunction.trimConfigurations. 9) trimConfigurations is heavily performance-optimized based on a lot of experience running this through a large project within Google. As it turns out, the cost of host transitions can be atrocious (because there are a lot of them). Also, BuildOptions.clone() is expensive. And just creating BuildConfiguration SkyKeys also has a cost (largely because of BuildOptions cloning), so that shouldn't be done except when really necessary. My experience with this convinced me it's worth making this method complicated for the sake of making it fast. Since it basically visits every edge in the configured target graph (at least), it really needs to be slick. 10) Since host transitions in particular are problematic w.r.t. speed, I compute the host *once* in ConfigurationCollectionFunction.getHostConfiguration() and expose that reference to ConfiguredTargetFunction and other Skyframe functions. This limits recomputation to just when the fragments are trimmed. 11) Since options cloning is expensive, I'm doing something scary: exposing a BuildConfiguration.getOptions() method that returns a direct reference. Since BuildOptions is mutable, this is dangerous in the wrong hands. I can experiment with going back to cloning (with the caching of host transitions it may not matter as much), but we may ultimately have to put up with this risk for the sake of performant analysis time. What would be *really* awesome would be to make BuildOptions immutable. But that's not going to happen in this cl. So in short, the key abstractions in this cl are: - PatchTransition - BuildConfiguration.TransitionApplier - ConfiguredTargetFunction.trimConfigurations The current implementation imposes no analysis time penalty -- MOS_MIGRATED_REVID=101474620
* Link to tools/objc/dummy.c from output directory to allow xcodeproj to ↵Gravatar Chris Parsons2015-08-26
| | | | | | | resolve the file even while outside a workspace which contains it -- MOS_MIGRATED_REVID=101462428
* Rules created by Skylark macros now have values for the attributes ↵Gravatar Florian Weikert2015-08-26
| | | | | | | | | generator_name and generator_function. Additionally, both Skylark macros and build extensions set the attribute generator_location in order to store the name of the file where generator_function was defined. -- MOS_MIGRATED_REVID=101458757
* Execute spawns inside sandboxes to improve hermeticity (spawns can no longer ↵Gravatar Philipp Wollermann2015-08-26
| | | | | | | | | | | | use non-declared inputs) and safety (spawns can no longer affect the host system, e.g. accidentally wipe your home directory). This implementation works on Linux only and uses Linux containers ("namespaces"). The strategy works with all actions that Bazel supports (C++ / Java compilation, genrules, test execution, Skylark-based rules, ...) and in tests, Bazel could successfully bootstrap itself and pass the whole test suite using sandboxed execution. This is not the default behavior yet, but can be activated explicitly by using: bazel build --genrule_strategy=sandboxed --spawn_strategy=sandboxed //my:stuff -- MOS_MIGRATED_REVID=101457297
* Add an --experimental_disable_jvm flag.Gravatar Ulf Adams2015-08-26
| | | | | -- MOS_MIGRATED_REVID=101457236
* Copies shared object dependencies when building Android native binaries.Gravatar Michael Staib2015-08-25
| | | | | | | | | | | | Previously, shared objects in the transitive closure of an Android binary would be linked in, but not be sent to the apkbuilder. This sends all the shared objects used for linking to join the other native libraries in the APK, so they will be loadable when the main library created by the link step is loaded. Fixes #357. -- MOS_MIGRATED_REVID=101365491
* Remove onlyLoadingPhase on objects.Gravatar Laurent Le Brun2015-08-24
| | | | | | | | | | The mechanism was easy to workaround (store the object in a different variable) and a source of bugs. This affected only 'rule', 'native' and 'attr' objects. It turns out the blacklisting was not useful (native and attr are already filtered, rule is not a problem). -- MOS_MIGRATED_REVID=101359277
* Added more details about the use of configuration fragments in Skylark to ↵Gravatar Florian Weikert2015-08-24
| | | | | | | the documentation. -- MOS_MIGRATED_REVID=101357875
* ctx.new_file(Artifact, String) now replaces the basename of the base ↵Gravatar Florian Weikert2015-08-24
| | | | | | | artifact with the given name instead of appending a suffix -- MOS_MIGRATED_REVID=101348273
* Add '.ldscript' as a possible linker script file extension.Gravatar Googler2015-08-24
| | | | | | | | | | This is an easy way to deal with other code that names scripts as such, rather than requiring that scripts be renamed to end in ".lds" RELNOTES[NEW]: deps of a cc_binary may contain linker script files ending in ".ldscript" -- MOS_MIGRATED_REVID=101346375
* Remove the some calls to AnalysisEnvironment.getDerivedArtifact() and add a ↵Gravatar Lukacs Berki2015-08-24
| | | | | | | | | | | big fat warning that that method shouldn't be used anymore. Ideally, I'd mark it as deprecated, but it's legitimately used by RuleContext. I could just forbid access to AnalysisEnvironment to rule implementations, but, sadly, almost every method on it is called at a few oddball places in implementations of various rules, so we can't do it just yet. -- MOS_MIGRATED_REVID=101345484
* Remove an AnalysisEnvironment.getDerivedArtifact() call from nativedeps.Gravatar Lukacs Berki2015-08-24
| | | | | -- MOS_MIGRATED_REVID=101344826
* Add the implicit output of unstripped binary for Launcher-enabled java_binary.Gravatar Googler2015-08-24
| | | | | | | Use stripped launcher when Fission is enabled. -- MOS_MIGRATED_REVID=101244628
* Make permanent changes already in tools/blaze.blazercGravatar Googler2015-08-24
| | | | | | | RELNOTES: For Objective-C make -DDEBUG part of the -c fastbuild options -- MOS_MIGRATED_REVID=101243825
* Remove an AnalysisEnvironment.getDerivedArtifact() call from nativedeps.Gravatar Lukacs Berki2015-08-24
| | | | | -- MOS_MIGRATED_REVID=101218538
* Abstract away artifact creation in CppLinkAction so that we can create most ↵Gravatar Lukacs Berki2015-08-24
| | | | | | | | | of the artifacts in a way that checks that they are under the package directory. The exception is nativedeps, whose link actions are shared, and thus they cannot be at a package-specific location. -- MOS_MIGRATED_REVID=101216949
* Prefer RuleContext.getFragment over BuildConfiguration.getFragment.Gravatar Ulf Adams2015-08-24
| | | | | | | This improves the coverage of the legality check in RuleContext.getFragment. -- MOS_MIGRATED_REVID=101208822
* Add an empty RunfilesProvider to cc_toolchain_suite to fulfill the contract ↵Gravatar Alex Humesky2015-08-21
| | | | | | | in RuleConfiguredTarget. -- MOS_MIGRATED_REVID=101166333
* Fix output of query --output=buildGravatar Laurent Le Brun2015-08-21
| | | | | | | Implicit attributes start with '_' to make the output parsable. -- MOS_MIGRATED_REVID=101151243
* Rollback of commit 0218320f1316b4d25e35abaaa80206237468824d.Gravatar Han-Wen Nienhuys2015-08-20
| | | | | | | | | | *** Reason for rollback *** Breaks skylark macros that call skylark rules that declare an 'args' attribute. -- MOS_MIGRATED_REVID=101118137
* Replace AnalysisEnvironment.getDerivedArtifact() calls with ↵Gravatar Lukacs Berki2015-08-20
| | | | | | | RuleContext.getShareableArtifact() calls where the former method is used to create the outputs of shared actions. -- MOS_MIGRATED_REVID=101116694
* A minor refactoring of JavaSemantics.Gravatar Lukacs Berki2015-08-20
| | | | | -- MOS_MIGRATED_REVID=101113563
* Remove a few AnalysisEnvironment.getDerivedArtifact() call sites.Gravatar Lukacs Berki2015-08-20
| | | | | -- MOS_MIGRATED_REVID=101111724
* A prototype implementation of top-level aspects.Gravatar Dmitry Lomov2015-08-20
| | | | | -- MOS_MIGRATED_REVID=101033236
* RELNOTES: Allow private headers in the srcs attribute. Add a warning if a ↵Gravatar Googler2015-08-20
| | | | | | | | | file is in both srcs and hdrs. This uses a very restrictive definition of private headers. They may only imported by sources in the same target and other private headers. They are not transitively available to dependers, even indirectly, though this may change in the future. -- MOS_MIGRATED_REVID=101028706
* Skylark rules can no longer overwrite built-in attributes.Gravatar Florian Weikert2015-08-20
| | | | | -- MOS_MIGRATED_REVID=101015647
* Rollback of commit 50adddf01b8d7f46fba6bee12ebbb41c31c87165.Gravatar Ulf Adams2015-08-20
| | | | | | | | | | | | | | | | | *** Reason for rollback *** Makes some tests fail, oddly enough. *** Original change description *** Fixes to use dylib on MacOS X. The change in LinkCommandLine.java fixes the error "ld: library not found for -ltbb.dylib". The change in osx_gcc_wrapper.sh fixes the error "dyld: Library not loaded: @rpath/libtbb.dylib". See https://groups.google.com/forum/#!topic/bazel-discuss/bs8BnXYRjzY -- MOS_MIGRATED_REVID=101012689
* Fixes to use dylib on MacOS X.Gravatar Topher2015-08-20
| | | | | | | | | | | The change in LinkCommandLine.java fixes the error "ld: library not found for -ltbb.dylib". The change in osx_gcc_wrapper.sh fixes the error "dyld: Library not loaded: @rpath/libtbb.dylib". See https://groups.google.com/forum/#!topic/bazel-discuss/bs8BnXYRjzY -- Change-Id: I7feb02eee7d059d86a6d29af391dc2fc71e1d0cc Reviewed-on: https://bazel-review.googlesource.com/#/c/1831/ MOS_MIGRATED_REVID=101007071
* Remove errant paths from crosstool test files.Gravatar Alex Humesky2015-08-20
| | | | | | | | | | | | | | | | | | | Also includes the following changes: Introduce a helper class for low-boilerplate time measurements and logging. -- Removed attribute "args" from java_test. -- Adds the arm64, mips, mips64, x86, and x86_64 toolchains in the Android NDK This adds the precited targets to the crosstools file generated by the android_ndk_repository rule. The crosstools support NDK revision r10e-rc4. RELNOTES: arm64, mips, mips64, x86, and x86_64 NDK toolchains added to android_ndk_repository in Bazel -- MOS_MIGRATED_REVID=100953441
* --Gravatar Rumou Duan2015-08-20
| | | | MOS_MIGRATED_REVID=100930529
* Deduplicate XCode target names in the dependencies propagated to XCode projects.Gravatar Michael Thvedt2015-08-20
| | | | | -- MOS_MIGRATED_REVID=100924958
* Skylark error messages now include a stack trace.Gravatar Florian Weikert2015-08-20
| | | | | | | This means that some tests had to be changed from using exact equality of error messages to working with contains() / startsWith(). -- MOS_MIGRATED_REVID=100923593
* Fail more verbosely in LinkerInputs.java.Gravatar Han-Wen Nienhuys2015-08-18
| | | | | -- MOS_MIGRATED_REVID=100913716
* Change the paths of a few temporary directories javac uses so that they ↵Gravatar Lukacs Berki2015-08-18
| | | | | | | | | don't clash with some Android artifacts. Ideally, we'd simply put these in a temp directory, but we currently have no mechanism for cleaning up temp directories after each action and we don't have sandboxing yet, so we can't rely on that, either. -- MOS_MIGRATED_REVID=100907458
* Change Objective-C defaults to match current versions.Gravatar Googler2015-08-18
| | | | | | | RELNOTES: Change Objective-C defaults to sdk 8.4 and ios_cpu=x86_64 (64-bit simulator). -- MOS_MIGRATED_REVID=100890740
* Split Skylark Library into multiple pages, one per module. Add collapsibleGravatar David Chen2015-08-18
| | | | | | | | submenus to sidebar, and expand and highlight the link for the current page. Collapse sidebar on mobile and expose button for toggling sidebar. -- MOS_MIGRATED_REVID=100836792
* Add Bridging Header attribute to objc_ compilation rulesGravatar Dmitry Shevchenko2015-08-17
| | | | | | | This allows Swift code to import and use Objective-C interfaces. -- MOS_MIGRATED_REVID=100715248
* Add an attribute 'per_proto_includes' which can be set on an ↵Gravatar Googler2015-08-14
| | | | | | | | | objc_proto_library overriding the global setting. This is needed as third_party libraries often do not use depot-relative include paths. RELNOTES: Add objc_proto_library.per_proto_includes attribute. -- MOS_MIGRATED_REVID=100637689
* Open-source full support for J2ObjC in Bazel, including dead code removal, ↵Gravatar Michael Thvedt2015-08-13
| | | | | | | and add an example. -- MOS_MIGRATED_REVID=100493818
* Set the workspace suffix for runfilesGravatar Kristina Chodorow2015-08-13
| | | | | | | This CL covers the "easy" cases. Followup CLs will take care of couple dozen remaining gnarly ones. -- MOS_MIGRATED_REVID=100479410
* UTF-8 encoded template substitution values are now properly displayed.Gravatar Florian Weikert2015-08-12
| | | | | -- MOS_MIGRATED_REVID=100410176
* Resolve TODO now that the feature configuration supports conditional expansionGravatar Manuel Klimek2015-08-12
| | | | | | | of flag sets. -- MOS_MIGRATED_REVID=100400672