Archivi delle etichette: compile from source

Destinazione Go 1.1…

Sommario breve

Come compilare il compilatore per il linguaggio Go su Debian e derivate (come Ubuntu)…

Antefatto

Era parecchio tempo che non smanettavo con i sorgenti e la compilazione di pacchetti. Me ne ha data l’occasione la recente uscita della versione 1.1 del linguaggio Go.

Il mio PC è un po’ datato infatti ed il processore non supporta le istruzioni che sono state aggiunte nelle generazioni successive, in particolare è in difficoltà con le istruzioni SSE.

Quindi un post di quelli classici di una volta, della serie “come fare per” che oggi mi capita sempre meno di scrivere per effetto dell’aumento della documentazione disponibile.

Per compilare Go dai sorgenti su un PC Linux del resto ho seguito la guida ufficiale Installing Go from source sul sito del Go.

Questo l’errore che ricevo invece se installo i pacchetti precompilati nel momento di lanciare il compilatore:

SIGILL: illegal instruction PC=0x81832bd  math.init·1() 	/usr/local/go/src/pkg/math/pow10.go:34 +0x1d
... ecc

Passi della procedura

Per prima cosa attrezziamoci con il compilatore C, le sue librerie e con mercurial:

$ sudo apt-get install gcc libc6-dev
$ sudo apt-get install mercurial

Scarichiamo i sorgenti con (vi allego anche i messaggi di output) nella directory Home:

$ hg clone -u release https://code.google.com/p/go
directory di destinazione: go
sto richiedendo tutte le modifiche
sto aggiungendo i changeset
sto aggiungendo i manifesti
sto aggiungendo le modifiche ai file
aggiunti 17004 changeset con 59801 modifiche a 8126 file (+6 head)
updating to branch release-branch.go1.1
3736 files updated, 0 files merged, 0 files removed, 0 files unresolved

A questo punto è preferibile valorizzare tre variabili d’ambiente per impostare la directory principale, così da non disturbare l’installazione della legacy della versione precedente 1.0.3, e soprattutto il tipo di processore (attenzione, è bene ricordare che questi valori valgono solamente nella sessione corrente del terminale, ok?).

$ export GOROOT=$HOME/go
$ export GOOS=linux
$ export GOARCH=386

Ok, siamo pronti:

$ cd $GOROOT/src
$ ./all.bash

Dopo circa 10 minuti terminerà la compilazione ed inizierà la fase di testing che impiega molto più tempo. Alla fine vi apparirà il nuovo e velocissimo Go1.1 correttamente funzionante… ma sul mio PC lento lento che me ne faccio? Bah 😉

...
ALL TESTS PASSED

---
Installed Go for linux/386 in /home/roberto/go
Installed commands in /home/roberto/go/bin
*** You need to add /home/roberto/go/bin to your PATH.
$ cd $GOROOT/bin
$ ./go version
go version go1.1 linux/386

R.