go-hep.org/x/hep@v0.38.1/ci/build-cxx-root.go (about) 1 // Copyright ©2019 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build ignore 6 7 // Command to build a given ROOT version from sources. 8 package main 9 10 import ( 11 "flag" 12 "fmt" 13 "log" 14 "os" 15 "os/exec" 16 "path/filepath" 17 "runtime" 18 ) 19 20 func main() { 21 log.SetPrefix("") 22 log.SetFlags(0) 23 24 rvers := flag.String("root-version", "6.36.02", "ROOT version to build") 25 nproc := flag.Int("j", runtime.NumCPU(), "number of parallel build processes") 26 27 flag.Parse() 28 29 build(*rvers, *nproc) 30 } 31 32 func build(rvers string, nproc int) { 33 tmp, err := os.MkdirTemp("", "build-root-") 34 if err != nil { 35 log.Fatalf("could not create top-level tmp dir: %+v", err) 36 } 37 defer os.RemoveAll(tmp) 38 39 bdir := filepath.Join(tmp, "build") 40 err = os.MkdirAll(bdir, 0755) 41 if err != nil { 42 log.Fatalf("could not create build dir %q: %+v", bdir, err) 43 } 44 45 dst := filepath.Join(tmp, "root-"+rvers) 46 err = os.MkdirAll(dst, 0755) 47 if err != nil { 48 log.Fatalf("could not create dst dir %q: %+v", dst, err) 49 } 50 51 fname := filepath.Join(tmp, "build.sh") 52 err = os.WriteFile(fname, []byte(fmt.Sprintf(docker, rvers, nproc)), 0644) 53 if err != nil { 54 log.Fatalf("could not create build-script: %+v", err) 55 } 56 57 cmd := exec.Command("docker", "run", "--rm", 58 "--network=host", 59 "-v", fname+":/build.sh", 60 "-v", bdir+":/build/src", 61 "-v", dst+":/build/install", 62 "ubuntu:24.04", "/bin/sh", "/build.sh", 63 ) 64 cmd.Stdin = os.Stdin 65 cmd.Stdout = os.Stdout 66 cmd.Stderr = os.Stderr 67 68 err = cmd.Run() 69 if err != nil { 70 log.Fatalf("could not build ROOT-%s: %+v", rvers, err) 71 } 72 73 wd, err := os.Getwd() 74 if err != nil { 75 log.Fatalf("could not get pwd: %+v", err) 76 } 77 78 cmd = exec.Command("tar", "zcf", filepath.Join(wd, "root-"+rvers+"-linux_amd64.tar.gz"), "root-"+rvers) 79 cmd.Dir = tmp 80 cmd.Stdout = os.Stdout 81 cmd.Stderr = os.Stderr 82 83 err = cmd.Run() 84 if err != nil { 85 log.Fatalf("could not tar ROOT-%s: %+v", rvers, err) 86 } 87 } 88 89 const docker = `#!/bin/sh 90 91 set -e 92 set -x 93 94 export DEBIAN_FRONTEND=noninteractive 95 96 apt update -yq 97 apt install -yq \ 98 cmake curl \ 99 g++ git \ 100 python3 \ 101 ; 102 103 export ROOT_VERSION="%[1]s" 104 105 cd /tmp 106 107 curl -O -L https://root.cern.ch/download/root_v${ROOT_VERSION}.source.tar.gz 108 tar zxf ./root_v${ROOT_VERSION}.source.tar.gz 109 110 cd /build/src 111 cmake /tmp/root-${ROOT_VERSION} \ 112 -DCMAKE_INSTALL_PREFIX=/build/install -DCMAKE_BUILD_TYPE=Release \ 113 -Dall=OFF -Dfail-on-missing=OFF \ 114 -Dalien=OFF \ 115 -Dastiff=OFF \ 116 -Dbonjour=OFF \ 117 -Dbuiltin_afterimage=OFF \ 118 -Dbuiltin_ftgl=OFF \ 119 -Dbuiltin_glez=OFF \ 120 -Dcastor=OFF \ 121 -Dclad=OFF \ 122 -Dchirp=OFF \ 123 -Ddcache=OFF \ 124 -Dfftw3=OFF \ 125 -Dfitsio=OFF \ 126 -Dgenvector=OFF \ 127 -Dgfal=OFF \ 128 -Dglite=OFF \ 129 -Dgnuinstall=OFF \ 130 -Dgraphics=OFF \ 131 -Dgviz=OFF \ 132 -Dhdfs=OFF \ 133 -Dkrb5=OFF \ 134 -Dldap=OFF \ 135 -Dmathmore=OFF \ 136 -Dmonalisa=OFF \ 137 -Dmysql=OFF \ 138 -Dodbc=OFF \ 139 -Dpython=OFF \ 140 -Dshared=OFF \ 141 -Dtmva=OFF \ 142 -Dvdt=OFF \ 143 -Dx11=OFF \ 144 -Dxrootd=OFF \ 145 ; 146 147 make -j%[2]d 148 make -j%[2]d install 149 `