Building, installing and running software€¦ · Building, installing and running software ... 2...

Post on 23-May-2018

230 views 4 download

Transcript of Building, installing and running software€¦ · Building, installing and running software ... 2...

1

Building, installingand running software

Bob DowlingUniversity Computing Service

Day three

http://www-uxsup.csx.cam.ac.uk/courses/http://training.csx.cam.ac.uk/

2

Progress so far

LocationUnpackingConfigured buildsSimple makeUsing libraries

${HOME}/sw

Builds:configuremakemake install

Makefile

Librariesbuild timerun time

3

Today

1. Real world exampleA bad Makefile

2. Recursive make

3. Rewrite Makefile from scratch

4

Meet the enemy

LAPACK

BLAS

Linear Algebra Package

Basic Linear Algebra Subprograms(Fortran)

Well respected pair of libraries

Extensively used

Absolute $@%#! to build

5

Worked example: unpacking

$ cd /tmp/building

$ tar -xf /ux/Lessons/Building/

$ cd

LAPACK.tgz

LAPACK

6

Worked example: first look

$ ls

BLAS

latapeINSTALL

TIMINGREADMETESTINGmake.incSRCMakefile

No buildinstructions!

Can we get thisto work unaided?

7

INSTALL directory

ls INSTALL/

dlamch.fdlamchtst.fdsecnd.fdsecnd.f.RS6Kdsecndtst.flawn81.pdflawn81.pslawn81.texlsame.flsametst.f

Makefilemake.inc.ALPHAmake.inc.HPPAmake.inc.IRIX64make.inc.LINUXmake.inc.O2Kmake.inc.pghpfmake.inc.RS6Kmake.inc.SGI5make.inc.SUN4

Per-architectureinclude files$

8

LAPACK Makefile

# Top Level Makefile for LAPACK# Version 3.0# June 30, 1999

include make.inc

all: install lib testing …

Comments

Include the contents ofanother file

Standardtarget

9

LAPACK Makefile

blaslib)( $(MAKE);cd BLAS/SRC

:

target sub-shell

changedirectory

startanothermake

10

Recursive make

LAPACK

BLAS INSTALL SRC TESTING

SRC EIG LIN

make

make[1]

make[1] make[1] make[1]

make[2]make[2]

11

Iterative development

Freshlyunpackedsource

Build Install

Start fromscratch?

Makefile

Changes

Success?

Analysis

12

Default make.inc

# The machine (platform) identifier to# append to the library names

PLAT = _SUN4SOL2

Sun4 hardwareSolaris 2 operating system

13

Build #1

$ cp INSTALL/make.inc.LINUX make.inc

$ make make01.log&>

Log for this attempt

Output, errors,everything

Record changeto file in lab book

14

Success? #1

Fails almostinstantly

$ make make01.log&>

We need toread the log

15

Reading a make log

Start at the end & work backwards

“Rewind”

16

Analysis #1: last line

make Error 2]lapacklib: *** [

target

Error message

Error 2: Error in a sub-make or sub-shell

17

Analysis #1: penultimate line

make[1]: Leaving directory/tmp

building

LAPACK

SRCmake[1]

make

Sub-make

`/tmp/building/LAPACK/SRC'

18

Analysis #1: antepenultimate line

make[1] Error 127]sgbbrd.o: *** [

Samesub-make

target

error message

Error 127: “Command not found”

19

Analysis #1: previous line

make[1] Command not found: :g77

Told you so! ☺

This command

20

Changes #1: previous line

g77 gfortran

…g77… …gfortran…

make.inc

Record changeto file in lab book

21

Start from scratch?

Nothing wrong with what's done do far.

22

Build #2

$ make make02.log&>

Distinctlog file

5 (ish)minutes

23

Analysis #2: Last line

make: *** [testing] Error 2

Sub-make error(again)

24

Analysis #2:

make[1]: Leaving directory

/tmp

building

LAPACK

TESTINGmake[1]

` '/tmp/building/LAPACK/TESTING

make

25

Analysis #2:

make[1] Error 2xlintsts:*** [ ]

sub-make

Error in sub-sub-make

Trying tobuild xlintsts

/tmp

building

LAPACK

TESTINGxlintsts

26

/tmp

building

Analysis #2:

make[2]

LAPACK

TESTING

LIN

make[1]

`/tmp/building/LAPACK/TESTING/LIN

make

make[2]

': Leaving directory

Sub-sub-make

27

/tmp

building

Analysis #2:

make[2]

LAPACK

TESTING

LIN../xlintsts

xlintsts

Equivalent

Error 1]../xlintsts: *** [

target

“Something went wrong”

28

Analysis #2:/tmp

building

LAPACK

TESTING

LIN

gfortran: ../../blas_LINUX.a:

blas_LINUX.a

../

../

No such file or directory

29

Analysis #2:/tmp

building

LAPACK

TESTING

LIN

$ ls -l blas_LINUX.als: cannot access blas_LINUX.a:No such file or directory

blas_LINUX.a✗

30

Analysis #2:/tmp

building

LAPACK

TESTING

LIN

blas_LINUX.a

Why does blas_LINUX.a not exist?

Because the Makefile doesn't build it!

?

31

Analysis #2:

Why doesn't theMakefile build it?

Because it'scommented out!

lib: lapacklib tmglib# lapacklib tmglibblasliblib:

Makefile

32

Changes #2

lib: lapacklib tmglib# lapacklib tmglibblasliblib:

Makefile

lib: lapacklib tmglib#lapacklib tmglibblasliblib:

Makefile

33

Start from scratch?

Nothing wrong with what's done so far.

34

Build #3

$ make make03.log&>

5‒10minutes

Third log file

35

“Sleep whenyou're dead.”

Ten minutes

36

Analysis #3: Last line

make Error 2]timing: *** [

target

sub-make error

37

Analysis #3

make[1]: Leaving directory` '/tmp/building/LAPACK/TIMING

/tmp

building

LAPACK

TIMINGmake[1]

make

38

Analysis #3

make[1]: *** [

/tmp

building

LAPACK

TIMINGstime.out

Error 127]stime.out

Trying to buildstime.out

Command not found

39

Analysis #3

xlintims stime.out< stime.in >

the target

thecommandnot found

/tmp

building

LAPACK

TIMINGmake[1]

40

Analysis #3/tmp

building

LAPACK

TIMINGmake[1]

We are here

xlintims ?

$ find -name xlintims.

41

xlintims

Analysis #3/tmp

building

LAPACK

TIMINGmake[1]

xlintims ?

$ find -name xlintims.

./TIMING/

xlintims ……

It's there!

42

Analysis #3/tmp

building

LAPACK

TIMINGmake[1]

xlintims ……

“ PATHis not on the”.

43

Changes #3

$ export PATH="${PATH}: ".

Add “.” to PATH

!Do not make thischange permanent!

44

Start from scratch?

Nothing wrong with what's done so far?

There shouldn't be anything wrong…

45

Build #4

$ make make04.log&>

Fails almostimmediately

Fourth log file

46

Analysis #4: Last line

make Error 2]blas_testing: *** [

Top-levelmake

47

Analysis #4: The error message

At line 130 of file zblat2.fFortran runtime error: File exists

Need to look at the larger error message.

Need to look at the action being taken.

Need to look at the zblat2.f file.

48

Analysis #4: The Makefileblas_testing:

…( ; ./xblat2s < sblat2.in ; \

./xblat2d < dblat2.in ; \

./xblat2c < cblat2.in ; \

…./xblat2z < zblat2.in )

cd BLAS

/tmp/building/LAPACK/BLAS

Source of the lasterror message

“How not to write a Makefile”

Makefile

49

Analysis #4: The program…* Read name and unit number for * summary output file and open file. READ( NIN, FMT = * )SUMMRY READ( NIN, FMT = * )NOUT

NOUTC = NOUT*…

OPEN( NOUT, FILE = SUMMRY, )STATUS = 'NEW'

zblat2.f

Line 130File must notalready exist!

50

Changes #4

None!

Just start from scratch!

51

Start from scratch!

$ cp make*.log .. Copy the log filesout of LAPACK

$ cd .. Get out of LAPACKourselves

$ rm -rf LAPACK/ Remove LAPACK

$ tar -xf /ux/Lessions/Building/LAPACK.tgz

Create a fresh copyof LAPACK

52

Build #5

Repeat the previous changes!

1.

2.

3.

4.

INSTALL/make.inc.LINUX → make.inc

g77 → gfortran

“lib” target in Makefile

Check “.” on PATH

5. make &> make05.loginstall lib

Cheat to save time

>1hr → ~10mins

53

Installation

$ make install✘$ ls *.a

blas_LINUX.a

tmglib_LINUX.alapack_LINUX.a

basic linear algebrasubprograms

linear algebrapackage

timing library

54

Installation

$ install blas_LINUX.a ${HOME}/sw/lib/libblas.a

$ install lapack_LINUX.a ${HOME}/sw/lib/liblapack.a

55

Progress

LocationUnpackingConfigured buildsSimple makeUsing librariesReal world example

Real worldexample(almost)

56

A “multiple purposegenerally recognizedas safe food substance”

Five minutes

57

Makefiles from scratch

LAPACKMakefilesare awful

We knowbetterprinciples

vs.It's a lotof work

Should be alast resort

58

What are we building?

LAPACK

BLAS SRC

SRC

141sourcefiles

libblas.a

1,291sourcefiles

liblapack.a

59

libblas.a/tmp

building

LAPACK

BLAS

SRC

SBLAS1 = isamax.o sasum.o saxpy.o scopy.o \ sdot.o snrm2.o srot.o srotg.o \ sscal.o sswap.o…ZBLAS3 = zgemm.o zsymm.o zsyrk.o zsyr2k.o \ ztrmm.o ztrsm.o zhemm.o zherk.o \ zher2k.o

Makefile

1. Keep the lists of file names

2. Ditch the rest

60

libblas.a/tmp

building

LAPACK

BLAS

SRC

OBJECTS = $(SBLAS1) $(CBLAS1) $(DBLAS1) \ $(ZBLAS1) $(CB1AUX) $(ZB1AUX) \ $(ALLBLAS) $(SBLAS2) $(CBLAS2) \ $(DBLAS2) $(ZBLAS2) $(SBLAS3) \ $(CBLAS3) $(DBLAS3) $(ZBLAS3)

Makefile

3. Glue all the object files togetherfor convenience

61

Tool for building static libraries

/usr/bin/ar Builds an object file “archive”

isamax.o

sasum.o

zher2k.o

…libblas.a

libblas.a isamax.o … zher2k.o:

$(AR) $(ARFLAGS) $@ $^TAB

62

libblas.a/tmp

building

LAPACK

BLAS

SRC

libblas.a: $(OBJECTS)TAB $(AR) $(ARFLAGS) $@ $^

Makefile

4. Add the rule to the Makefile

63

libblas.a/tmp

building

LAPACK

BLAS

SRC

PREFIX=${HOME}/swTARGET=libblas.a

all: $(TARGET)

install: allinstall -d $(PREFIX)/libinstall $(TARGET) $(PREFIX)/lib

clean:$(RM) $(TARGET) $(OBJECTS)

Makefile

5. Add the standard targets

64

And that's it!

$ make

gfortran -c -o isamax.o isamax.fgfortran -c -o sasum.o sasum.f...ar: creating libblas.aa - isamax.o...a - zher2k.o

FC=gfortran Identify Fortrancompiler

65

Same for liblapack.a/tmp

building

LAPACK

SRC

Makefile

1. Keep the lists of file names

2. Ditch the rest

3. Glue all the object files togetherfor convenience

4. Add the library build rule to the Makefile

5. Add the standard targets

66

Gluing it together

LAPACK

BLAS SRC

SRC

make

make[1]

make[1]

67

Top-level Makefile

all:allall

cd BLAS/SRC && $(MAKE)cd SRC && $(MAKE)

clean :cleanclean

cd BLAS/SRC && $(MAKE)cd SRC && $(MAKE)

installinstallinstall

cd BLAS/SRC && $(MAKE)cd SRC && $(MAKE)

: all

Pure recursion

68

Top-level Makefile

all :allall

cd BLAS/SRC && $(MAKE)cd SRC && $(MAKE)

Common macros

export FC = gfortran

clean :cleanclean

cd BLAS/SRC && $(MAKE)cd SRC && $(MAKE)

69

And that's it!

$ cd /tmp/building/LAPACK$ make

70

Progress

LocationUnpackingConfigured buildsSimple makeUsing librariesReal world exampleRecursive makeBuild from scratch

71

LocationUnpackingConfigured buildsSimple makeUsing librariesReal world exampleRecursive makeBuild from scratch

Conclusion

A tough course

You can buildsoftware:

configure-styleMakefile-style

Personal copies:no systemprivileges

Congratulations!