mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 09:17:43 +03:00
33e47828e3
* bazel: 0.28.1 --> 1.1.0 * bazel-watcher sha256 * Fix missing line in patch * proto_source_root --> strip_import_prefix See https://github.com/bazelbuild/bazel/issues/7153 for details. * Update rules_nixpkgs Required to avoid errors of the form ``` ERROR: An error occurred during the fetch of repository 'node_nix': parameter 'sep' may not be specified by name, for call to method split(sep, maxsplit = None) of 'string' ``` and ``` ERROR: An error occurred during the fetch of repository 'node_nix': Traceback (most recent call last): File "/private/var/tmp/_bazel_runner/17d2b3954f1c6dcf5414d5453467df9a/external/io_tweag_rules_nixpkgs/nixpkgs/nixpkgs.bzl", line 149 _execute_or_fail(repository_ctx, <3 more arguments>) File "/private/var/tmp/_bazel_runner/17d2b3954f1c6dcf5414d5453467df9a/external/io_tweag_rules_nixpkgs/nixpkgs/nixpkgs.bzl", line 318, in _execute_or_fail fail(<1 more arguments>) Cannot build Nix attribute 'nodejs'. Command: [/Users/runner/.nix-profile/bin/nix-build, /private/var/tmp/_bazel_runner/17d2b3954f1c6dcf5414d5453467df9a/external/node_nix/nix/bazel.nix, "-A", "nodejs", "--out-link", "bazel-support/nix-out-link", "-I", "nixpkgs=/private/var/tmp/_bazel_runner/17d2b3954f1c6dcf5414d5453467df9a/external/nixpkgs/nixpkgs"] Return code: 1 Error output: src/main/tools/process-tools.cc:173: "setitimer": Invalid argument ``` * Update rules_scala * .proto has been removed, use [ProtoInfo] instead See https://docs.bazel.build/versions/1.1.0/be/protocol-buffer.html#proto_library * python3_nix add nix_file attribute To avoid the following error ``` ERROR: /home/aj/tweag.io/da/da-bazel-1.1/BUILD:66:1: //:nix_python3_runtime depends on @python3_nix//:bin/python in repository @python3_nix which failed to fetch. no such package '@python3_nix//': Traceback (most recent call last): File "/home/aj/.cache/bazel/_bazel_aj/5f825ad28f8e070f999ba37395e46ee5/external/io_tweag_rules_nixpkgs/nixpkgs/nixpkgs.bzl", line 149 _execute_or_fail(repository_ctx, <3 more arguments>) File "/home/aj/.cache/bazel/_bazel_aj/5f825ad28f8e070f999ba37395e46ee5/external/io_tweag_rules_nixpkgs/nixpkgs/nixpkgs.bzl", line 318, in _execute_or_fail fail(<1 more arguments>) Cannot build Nix attribute 'python3'. Command: [/home/aj/.nix-profile/bin/nix-build, "-E", "import <nixpkgs> { config = {}; overlays = []; }", "-A", "python3", "--out-link", "bazel-support/nix-out-link", "-I", "nixpkgs=/home/aj/.cache/bazel/_bazel_aj/5f825ad28f8e070f999ba37395e46ee5/external/nixpkgs/nixpkgs"] Return code: 1 Error output: error: anonymous function at /home/aj/.cache/bazel/_bazel_aj/5f825ad28f8e070f999ba37395e46ee5/external/nixpkgs/nixpkgs.nix:3:1 called with unexpected argument 'config', at (string):1:1 ``` * rules_haskell unnamed string.split(_, maxsplit = _) The keyword argument may no longer be named. * string.replace(_, _, maxsplit = _) may not be named * Move proto sources from deps to data Fixes ``` ERROR: /home/aj/tweag.io/da/da-bazel-1.1/daml-lf/archive/BUILD.bazel:150:1: in deps attribute of scala_test rule //daml-lf/archive:daml_lf_archive_reader_tests_test_suite_src_test_scala_com_digitalasset_daml_lf_archive_DecodeV1Spec.scala: '//daml-lf/archive:daml_lf_1.6_archive_proto_srcs' does not have mandatory providers: 'JavaInfo'. Since this rule was created by the macro 'da_scala_test_suite', the error might have been caused by the macro implementation ``` * Define sha256 for haskell_ghc__paths Bazel 1.1.0 fails on missing hashes. * Disable --incompatible_windows_native_test_wrapper * //compiler/daml-extension don't modify sources Modifying sources in-place can cause issues on Windows, where build actions are not sandboxed and changes on sources can affect other build steps. * bazel-genfiles --> bazel-bin The bazel-genfiles symlink has been removed since Bazel 1.0. See https://github.com/bazelbuild/bazel/issues/8651 * Mark dev_env_tool repository rule as configure See https://docs.bazel.build/versions/1.1.0/skylark/lib/globals.html#repository_rule * Move data deps into data attribute * Mark dev_env_tool as local = True * Manually fetch @makensis_dev_env
121 lines
5.2 KiB
Markdown
121 lines
5.2 KiB
Markdown
[![DAML logo](daml-logo.png)](https://www.daml.com)
|
|
|
|
[![Download](https://img.shields.io/github/release/digital-asset/daml.svg?label=Download)](https://docs.daml.com/getting-started/installation.html)
|
|
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/digital-asset/daml/blob/master/LICENSE)
|
|
[![Build](https://dev.azure.com/digitalasset/daml/_apis/build/status/digital-asset.daml?branchName=master&label=Build)](https://dev.azure.com/digitalasset/daml/_build/latest?definitionId=4&branchName=master)
|
|
|
|
Copyright 2019 Digital Asset (Switzerland) GmbH and/or its affiliates. All Rights Reserved.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Welcome to the DAML repository!
|
|
|
|
This repository hosts all code for the [DAML smart contract language and SDK](https://daml.com/), originally created by
|
|
[Digital Asset](https://www.digitalasset.com). DAML is an open-source smart contract language for building future-proof distributed applications on a safe, privacy-aware runtime. The DAML SDK is a set of tools to help you develop applications based on DAML.
|
|
|
|
## Using DAML
|
|
|
|
To download DAML, follow [the installation instructions](https://docs.daml.com/getting-started/installation.html).
|
|
Once installed, to try it out, follow the [quickstart guide](https://docs.daml.com/getting-started/quickstart.html).
|
|
|
|
If you have questions about how to use DAML or how to build DAML-based solutions, please ask
|
|
them on [StackOverflow using the `daml` tag](https://stackoverflow.com/tags/daml).
|
|
|
|
## Contributing to DAML
|
|
|
|
We warmly welcome [contributions](./CONTRIBUTING.md). If you are looking for ideas on how to contribute, please browse our
|
|
[issues](https://github.com/digital-asset/daml/issues). To build and test DAML:
|
|
|
|
### 1. Clone this repository
|
|
|
|
```
|
|
git clone git@github.com:digital-asset/daml.git
|
|
cd daml
|
|
```
|
|
|
|
### 2. Set up the development dependencies
|
|
|
|
Our builds require various development dependencies (e.g. Java, Bazel, Python), provided by a tool called `dev-env`.
|
|
|
|
#### Linux and Mac
|
|
|
|
On Linux and Mac `dev-env` can be installed with:
|
|
|
|
1. Install Nix by running: `bash <(curl https://nixos.org/nix/install)`
|
|
2. Enter `dev-env` by running: `eval "$(dev-env/bin/dade assist)"`
|
|
|
|
If you don't want to enter `dev-env` manually each time using `eval "$(dev-env/bin/dade assist)"`,
|
|
you can also install [direnv](https://direnv.net). This repo already provides a `.envrc`
|
|
file, with an option to add more in a `.envrc.private` file.
|
|
|
|
#### Windows
|
|
|
|
On Windows you need to enable long file paths by running the following command in an admin powershell:
|
|
|
|
```
|
|
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Type DWord -Value 1
|
|
```
|
|
|
|
Then start `dev-env` from PowerShell with:
|
|
|
|
```
|
|
.\dev-env\windows\bin\dadew.ps1 install
|
|
.\dev-env\windows\bin\dadew.ps1 sync
|
|
.\dev-env\windows\bin\dadew.ps1 enable
|
|
```
|
|
|
|
In all new PowerShell processes started, you need to repeat the `enable` step.
|
|
|
|
### 3. First build and test
|
|
|
|
We have a single script to build most targets and run the tests. On Linux and Mac run `./build.sh`. On Windows run `.\build.ps1`. Note that these scripts may take over an hour the first time.
|
|
|
|
To just build do `bazel build //...`, and to just test do `bazel test //...`. To read more about Bazel and how to use it, see [the Bazel site](https://bazel.build).
|
|
|
|
On Mac if building is causing trouble complaining about missing nix packages, you can try first running `nix-build -A tools -A cached nix` repeatedly until it completes without error.
|
|
|
|
### 4. Installing a local copy
|
|
|
|
On Linux and Mac run `daml-sdk-head` which installs a version of the SDK with version number `0.0.0`. Set the `version:` field in any DAML project to 0.0.0 and it will use the locally installed one.
|
|
|
|
On Windows:
|
|
|
|
```
|
|
bazel build //release:sdk-release-tarball
|
|
tar -vxf .\bazel-bin\release\sdk-release-tarball.tar.gz
|
|
cd sdk-*
|
|
daml\daml.exe install . --activate
|
|
```
|
|
|
|
That should tell you what to put in the path, something along the lines of `C:\Users\admin\AppData\Roaming\daml\bin`.
|
|
Note that the Windows build is not yet fully functional.
|
|
|
|
### Caching: build speed and disk space considerations
|
|
|
|
Bazel has a lot of nice properties, but they come at the cost of frequently rebuilding "the world".
|
|
To make that bearable, we make extensive use of caching. Most artifacts should be cached in our CDN,
|
|
which is configured in `.bazelrc` in this project.
|
|
|
|
However, even then, you may end up spending a lot of time (and bandwidth!) downloading artifacts from
|
|
the CDN. To alleviate that, by default, our build will create a subfolder `.bazel-cache` in this
|
|
project and keep an on-disk cache. **This can take about 10GB** at the time of writing.
|
|
|
|
To disable the disk cache, remove the following lines:
|
|
|
|
```
|
|
build:linux --disk_cache=.bazel-cache
|
|
build:darwin --disk_cache=.bazel-cache
|
|
```
|
|
|
|
from the `.bazelrc` file.
|
|
|
|
If you work with multiple copies of this repository, you can point all of them to the same disk cache
|
|
by overwriting these configs in either a `.bazelrc.local` file in each copy, or a `~/.bazelrc` file
|
|
in your home directory.
|
|
|
|
|
|
### Haskell profiling builds
|
|
|
|
To build Haskell executables with profiling enabled, pass `-c dbg` to
|
|
Bazel, e.g. `bazel build -c dbg damlc`. If you want to build the whole
|
|
SDK with profiling enabled use `daml-sdk-head --profiling`.
|