aboutsummaryrefslogtreecommitdiff
path: root/INSTALL.md
blob: f5c02b9b0b7ee4ff55f67edf9a7592a417df8e7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# INSTALL GEMMA: Genome-wide Efficient Mixed Model Association

## Check version

Simply run gemma once installed

    gemma

and it should give you the version.

## GEMMA dependencies

GEMMA runs on Linux, MAC OSX and Windows (with Docker). The runtime
has the following dependencies:

* C++ tool chain >= 5.5.0 (see Travis CI and we test with file .guix-dev-gcc-older)
* GNU Science library (GSL) 2.x (GEMMA dropped support for GSL 1.x)
* blas/openblas
* lapack
* zlib

See below for installation on Guix.

## Install GEMMA

### Debian and Ubuntu

Travis-CI uses Ubuntu for testing. Check the test logs for version numbers.

[![Build Status](https://travis-ci.org/genetics-statistics/GEMMA.svg?branch=master)](https://travis-ci.org/genetics-statistics/GEMMA)

Current settings can be found in [travis.yml](.travis.yml).

### Bioconda

(Note Bioconda install is a work in [progress](https://github.com/genetics-statistics/GEMMA/issues/52)

Recent versions of GEMMA can be installed with
[BioConda](http://ddocent.com/bioconda/) without root permissions using the following
command

    conda install gemma

### FreeBSD

Recent editions of FreeBSD ports include [GEMMA](https://www.freebsd.org/cgi/ports.cgi?query=gemma&stype=all)

### GNU Guix

The GNU Guix package manager can install recent versions of [GEMMA](https://www.gnu.org/software/guix/packages/g.html)
using the following command

    guix package -i gemma

A more recent version may be found in the guix-bioinformatics channel
which is maintained by the authors. See the
[README](http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics), e.g.

    env GUIX_PACKAGE_PATH=./guix-bioinformatics guix package -A gemma

To build GEMMA from source you can opt to install the build tools with
GNU Guix, the current build container is in [guix.scm](guix.scm). See the first lines on how to create one using `guix shell`.

An alternative is the command line invocation of [guix-dev](./.guix-dev)

    source .guix-dev
    make

Guix allows for easy versioning. To build with an older gcc, for
example:

    guix environment -C guix --ad-hoc gcc-toolchain@9.3.0 gdb gsl openblas zlib bash ld-wrapper perl vim which

### Install with Docker

Recent version of GEMMA come with a 64-bit Docker image that should run
on Linux, Windows and MacOS.

### Install from source

Install listed dependencies (you may want to take hints from
the Travis-CI [tests](./.travis.yml)) and run

	make -j 4

(the -j switch builds on 4 cores).

	time make check

You can run gemma in the debugger with, for example

	gdb --args \
		./bin/gemma -g example/mouse_hs1940.geno.txt.gz \
		-p example/mouse_hs1940.pheno.txt -a example/mouse_hs1940.anno.txt \
		-snps example/snps.txt -nind 400 -loco 1 -gk -debug -o myoutput

Note that if you get <optimized out> warnings on inspecting variables you
should compile with GCC_FLAGS="" to disable optimizations (-O3). E.g.

    make WITH_OPENBLAS=1 GCC_FLAGS=

Other options, such as compiling with warnings, are listed in the
Makefile.

### GNU Guix commands used

Some development examples.  With git bisect build the older versions
of gemma with openblas

    ~/.config/guix/current/bin/guix environment -C guix --ad-hoc gcc gdb gfortran:lib gsl lapack openblas zlib bash ld-wrapper perl ldc
    make clean ; make WITH_OPENBLAS=1 FORCE_DYNAMIC=1 -j 8

or with atlas

    ~/.config/guix/current/bin/guix environment -C guix --ad-hoc gcc gdb gfortran:lib gsl lapack atlas zlib bash ld-wrapper perl ldc
    make clean ; make WITH_OPENBLAS= FORCE_DYNAMIC=1 -j 25

## Run tests

GEMMA includes the shunit2 test framework (version 2.0).

    make check

or

    ./run_tests.sh

## Releases

### Docker release

To distribute GEMMA I made static versions of the binary. A container
can be made instead with, for example

```sh
env GUIX_PACKAGE_PATH=~/guix-bioinformatics ~/.config/guix/current/bin/guix \
  pack -f docker gemma-gn2 -S /bin=bin
```

which created a container in of size 51MB. Tiny! For more information
see
[GUIX-NOTES](http://git.genenetwork.org/guix-bioinformatics/guix-notes/CONTAINERS.org).


### Static release

To create a static release, locate the gfortran lib and use

    source .guix-dev-static
    make WITH_GFORTRAN=1 EXTRA_FLAGS=-L/gnu/store/741057r2x06zwg6zcmqmdyv51spm6n9i-gfortran-7.5.0-lib/lib static

otherwise OpenBlas will complain with

    undefined reference to `_gfortran_concat_string'