(no commit message)
[libreriscv.git] / HDL_workflow / devscripts.mdwn
1 # Dev setup scripts
2
3 Setting up the dependencies and repositories for Libre-SOC is big enough
4 that it is just much easier to do in an automated fashion. Follow these
5 steps after making sure that you review the scripts line by line because
6 they run as root and it is your responsibility to check them, not ours.
7
8 Note the reason for entering the chroot as a user (not root) and
9 then running sudo bash again is due to this procedure setting the
10 SUDO_USER environment, on which the scripts critically rely. Also:
11 the dev-env-setup repository is cloned twice, once to get the chroot
12 script and a second time to use scripts *inside* the chroot. Feel free
13 to simply copy the repository into the chroot to save bandwidth.
14
15 **no you do not need to blow away your system and install debian 10 native**
16 you can e.g. use debian/11 at the "host" level and some people have managed
17 to use archlinux but you are **on your own if you do so**.
18
19 Note: these scripts assume that you are using debian/10 and that you
20 understand and accept why we have standardised on that as an OS
21 (reproduceability and minimising "support"). If you use anything
22 different it risks creating non-reproducible HDL. It's not about
23 "what's the favurite OS", it's about making sure that two developers
24 can produce the **exact** same GDS-II files.
25
26 $ git clone https://git.libre-soc.org/git/dev-env-setup.git
27 $ cd dev-env-setup
28 $ sudo bash
29 # ./mk-deb-chroot libresoc
30 # exit
31 $ schroot -c libresoc
32 (libresoc)$ git clone https://git.libre-soc.org/git/dev-env-setup.git
33 (libresoc)$ cd dev-env-setup
34 (libresoc)$ sudo bash
35 (libresoc)# ./install-hdl-apt-reqs
36 (libresoc)# ./hdl-dev-repos
37 (libresoc)# ./ppc64-gdb-gcc # needed for compiling unit tests
38 (libresoc)# exit
39 (libresoc)$
40
41 <https://git.libre-soc.org/?p=dev-env-setup.git;a=blob;f=hdl-dev-repos;hb=HEAD>
42
43 Additional scripts in the dev-env-setup repository will install yosys,
44 verilator, coriolis2, ghdl, gdb and so on: from the above it is pretty
45 straightforward and obvious to work out what to do (just run them).
46 There is an accompanying walkthrough video which goes through the above
47 <https://m.youtube.com/watch?v=1-4eJKTNrEk> and includes running some
48 unit tests, explaining some of the background, and also files some bugs.
49
50 # Notes about Script "mk-deb-chroot"
51
52 This section is developer-notes **only** it documents the
53 process by which mk-deb-chroot was established and explains
54 its decisions and effect.
55
56 The script sets up an schroot debootstrap jail with debian 10.
57 This chroot can then be used for nmigen, coriolis, or any other development.
58 These instructions are based on information taken from here:
59 <https://www.debian.org/releases/stretch/amd64/apds03.html.en>
60
61 The chroot name for this section is assumed to be "libresoc"
62
63 In advance, on the host system, edit /etc/fstab and add mount points:
64
65 (edit: personally I prefer using mount --bind points. however if doing
66 that then after a reboot the chroot will lose the bind mountpoints
67 and the commands need to be re-run, without which the chroot is
68 unusable)
69
70 /dev /home/chroot/libresoc/dev none bind 0 0
71 /dev/pts /home/chroot/libresoc/dev/pts none bind 0 0
72 /proc /home/chroot/libresoc/proc none bind 0 0
73 /sys /home/chroot/libresoc/sys none bind 0 0
74 /tmp /home/chroot/libresoc/tmp none bind 0 0
75
76 Then run these commands:
77
78 sudo bash
79 apt-get install debootstrap schroot
80 mkdir /opt/chroot/libresoc
81 /usr/sbin/debootstrap buster !$ http://ftp.us.debian.org/debian
82 mount /home/chroot/libresoc/dev
83 mount /home/chroot/libresoc/dev/pts
84 mount /home/chroot/libresoc/proc
85 mount /home/chroot/libresoc/sys
86 mount /home/chroot/libresoc/tmp
87 echo "libresoc" > /home/chroot/libresoc/etc/debian_chroot
88
89 To do some preparation (users):
90
91 chroot -c libresoc /bin/bash
92 adduser {yourpreferredusername}
93
94 It is best to make the username the same as the first user that
95 was added during the *main* (non-chroot) debian install, so that
96 uid 1000 matches between both main and chroot. You can check
97 this by looking at /etc/passwd as root, or by typing "id".
98
99 lkcl@fizzy:~$ id
100 uid=1000(lkcl) gid=1000(lkcl) groups=1000(lkcl),5(tty),....
101
102 Alternatively, /etc/passwd and /etc/group may
103 be mount-bound as well as /home however if you later forget you did
104 this and decide to delete the chroot, you will delete the entire /home
105 of your main system, as well as /etc/passwd.
106
107 You may wish to follow some of the other things such as configuring apt,
108 locales and keyboard, from the above-linked debian-admin HOWTO.
109
110 bootloader, kernel, ssh access, are unnecessary. Do run "apt clean"
111 to clear out /var/cache/apt/archives in the chroot.
112
113
114
115
116 Create an schroot file section for the libresoc chroot by
117 editing /etc/schroot/schroot.conf:
118
119 [libresoc]
120 description=Debian Buster for Coriolis
121 directory=/home/chroot/libresoc
122 groups=sbuild-security,lkcl,users
123
124 Now as an *ordinary* user - not as root - you may type:
125
126 lkcl@fizzy:~$ schroot -c libresoc
127
128 and, due to the contents of /etc/debian\_chroot, and that you were in
129 fact logged in as uid 1000 and did in fact add a user to the chroot
130 as uid 1000, the prompt should become:
131
132 (libresoc)lkcl@fizzy:~$
133
134 If however you need to run as root, then from outside the chroot,
135 as *root*, you run this:
136
137 lkcl@fizzy:~# schroot -c libresoc
138
139 and you will see this as a result:
140
141 (libresoc)lkcl@fizzy:~#
142