https://github.com/mithro/make-env
Repository containing common Makefiles for setting up conda environments.
https://github.com/mithro/make-env
conda-environment symbiflow template-makefile
Last synced: 6 months ago
JSON representation
Repository containing common Makefiles for setting up conda environments.
- Host: GitHub
- URL: https://github.com/mithro/make-env
- Owner: mithro
- License: isc
- Created: 2020-06-08T22:39:07.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-02-10T17:29:03.000Z (over 2 years ago)
- Last Synced: 2025-04-15T03:52:34.722Z (6 months ago)
- Topics: conda-environment, symbiflow, template-makefile
- Language: Makefile
- Size: 48.8 KB
- Stars: 9
- Watchers: 11
- Forks: 9
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# Makefile for create (conda) environments

This repository contains a Makefile to make it easy to set up a conda
environment and then run commands inside the environment.# Using
## Step 1 - Add make-env to your repository
### Option 1a -- git submodules
The [`make-env`](https://github.com/SymbiFlow/make-env) git
repository can be added as a
[`git submodule`](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your
own git repository.#### Adding using `git submodule`
```bash
git submodule add https://github.com/SymbiFlow/make-env.git third_party/make-env
```#### Updating using `git submodule`
It is recommended you use an "auto rolling" dependency bot which sends you a
pull request every time the upstream module moves forward.```bash
# TODO: Add stuff here.
```### Option 1b -- `git subtrees`
The [`make-env`](https://github.com/SymbiFlow/make-env) git
repository can be directly imported into your repository using
[`git subtree`](https://www.atlassian.com/git/tutorials/git-subtree).`git subtree`s offer a number of advantages over `git submodule`s, they
include;* The contents of the subtree are directly included in your own tree, meaning
no extra clone nor recursive clone is needed. If the upstream source
disappears, you still have a complete copy of the repository contents.* Edits can be done and sent upstream easily.
#### Adding using `git subtree`
```bash
git remote add -f make-env https://github.com/SymbiFlow/make-env.git
git subtree add --prefix third_party/make-env make-env master
git fetch make-env master
```#### Updating using `git subtree`
```bash
git subtree pull --prefix third_party/make-env make-env master
```## Step 2 - Create a Makefile
Create a Makefile which sets;
* `TOP_DIR` -- the directory where an `env` directory will be created in.
* `REQUIREMENTS_FILE` -- [A pip `requirements.txt` file](https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format).
* `ENVIRONMENT_FILE` -- [A conda `environment.yml` file](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html).Include the `third_party/make-env/conda.mk` file.
Make your targets depend on `$(CONDA_ENV_PYTHON)` -- probably as an "order only
dependency".Use `$(IN_CONDA_ENV)` before the commands you wish to run inside the conda
environment.A [template Makefile](Makefile.template) is provided, see below;
```Makefile
# The top directory where environment will be created.
TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))# A pip `requirements.txt` file.
# https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
REQUIREMENTS_FILE := requirements.txt# A conda `environment.yml` file.
# https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
ENVIRONMENT_FILE := environment.ymlinclude third_party/make-env/conda.mk
# Example make target which runs commands inside the conda environment.
test-command: | $(CONDA_ENV_PYTHON)
@$(IN_CONDA_ENV) echo "Python is $$(which python)"
@$(IN_CONDA_ENV) python --version
```# Testing
To make sure that `make-env` continues to work correctly and the template
Makefile is up to date, an example environment can be found in the test
directory.```shell
# core.symlinks=true is needed so windows creates the symlinks.
git clone -c core.symlinks=true https://github.com/SymbiFlow/make-env.git
cd make-env/test
make test-command
```# Todo list
- [ ] Make sure the conda can be disabled and system tooling be used directly.
- [ ] Add support for other types of environments;
- [ ] Docker provided dependencies.
- [ ] System python + virtualenv.
- [ ] (maybe?) nix-os provided dependencies# Contributing
There are a couple of guidelines when contributing to this project which are
listed here.### Sending
All contributions should be sent as
[GitHub Pull requests](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).### License
All software (code, associated documentation, support files, etc) in the
Project X-Ray repository are licensed under the very permissive
[ISC Licence](https://opensource.org/licenses/ISC). A copy can be found in the
[`LICENSE`](LICENSE) file.All new contributions must also be released under this license.
### Code of Conduct
By contributing you agree to the [code of conduct](CODE_OF_CONDUCT.md). We
follow the open source best practice of using the [Contributor
Covenant](https://www.contributor-covenant.org/) for our Code of Conduct.### Sign your work
To improve tracking of who did what, we follow the Linux Kernel's
["sign your work" system](https://github.com/wking/signed-off-by).
This is also called a
["DCO" or "Developer's Certificate of Origin"](https://developercertificate.org/).**All** commits are required to include this sign off and we use the
[Probot DCO App](https://github.com/probot/dco) to check pull requests for
this.The sign-off is a simple line at the end of the explanation for the
patch, which certifies that you wrote it or otherwise have the right to
pass it on as a open-source patch. The rules are pretty simple: if you
can certify the below:Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.then you just add a line saying
Signed-off-by: Random J Developer
using your real name (sorry, no pseudonyms or anonymous contributions.)
You can add the signoff as part of your commit statement. For example:
git commit --signoff -a -m "Fixed some errors."
*Hint:* If you've forgotten to add a signoff to one or more commits, you can use the
following command to add signoffs to all commits between you and the upstream
master:git rebase --signoff upstream/master