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  `