# WORKSPACE files

{% dynamic setvar source_file "NONE" %} {% dynamic setvar version "7.3.0" %} {% dynamic setvar original_path "/rules/lib/globals/workspace" %} {% include "_buttons.html" %} Methods available in WORKSPACE files.

## Members

- bind
- register_execution_platforms
- register_toolchains
- workspace

## bind

    None bind(name, actual=None)

Warning: use of `bind()` is not recommended. See Consider removing bind for a long discussion of its issues and alternatives.

Gives a target an alias in the `//external` package.

### Parameters

Parameter | Description
--- | ---
`name` | required The label under '//external' to serve as the alias name
`actual` | string; or `None`; default is `None` The real label to be aliased

## register_execution_platforms

    None register_execution_platforms(*platform_labels)

Register an already-defined platform so that Bazel can use it as an execution platform during toolchain resolution.

### Parameters

Parameter | Description
--- | ---
`platform_labels` | sequence of strings; required The labels of the platforms to register.

## register_toolchains

    None register_toolchains(*toolchain_labels)

Register an already-defined toolchain so that Bazel can use it during toolchain resolution. See examples of defining and registering toolchains.

### Parameters

Parameter | Description
--- | ---
`toolchain_labels` | sequence of strings; required The labels of the toolchains to register. Labels can include `:all`, in which case, all toolchain-providing targets in the package will be registered in lexicographical order by name.

## workspace

    None workspace(name)

This function can only be used in a `WORKSPACE` file and must be declared before all other functions in the `WORKSPACE` file. Each `WORKSPACE` file should have a `workspace` function.

Sets the name for this workspace. Workspace names should be a Java-package-style description of the project, using underscores as separators, e.g., github.com/bazelbuild/bazel should use com_github_bazelbuild_bazel.

This name is used for the directory that the repository's runfiles are stored in. For example, if there is a runfile `foo/bar` in the local repository and the WORKSPACE file contains `workspace(name = 'baz')`, then the runfile will be available under `mytarget.runfiles/baz/foo/bar`. If no workspace name is specified, then the runfile will be symlinked to `bar.runfiles/foo/bar`.

Remote repository rule names must be valid workspace names. For example, you could have `maven_jar(name = 'foo')`, but not `maven_jar(name = 'foo%bar')`, as Bazel would attempt to write a WORKSPACE file for the `maven_jar` containing `workspace(name = 'foo%bar')`.

### Parameters

Parameter | Description
--- | ---
`name` | required the name of the workspace. Names must start with a letter and can only contain letters, numbers, underscores, dashes, and dots.