// Copyright (c) 2019-2022 Alexander Medvednikov. All rights reserved. // Use of this source code is governed by an MIT license // that can be found in the LICENSE file. import os import time const voptions = ' -skip-unused -show-timings -stats ' const exe = os.executable() const fast_dir = os.dir(exe) const vdir = @VEXEROOT fn main() { dump(fast_dir) dump(vdir) os.chdir(fast_dir)? if !os.exists('$vdir/v') && !os.is_dir('$vdir/vlib') { println('fast.html generator needs to be located in `v/cmd/tools/fast`') } println('fast.html generator\n') if !os.args.contains('-noupdate') { println('Fetching updates...') ret := os.system('$vdir/v up') if ret != 0 { println('failed to update V') return } } // fetch the last commit's hash commit := exec('git rev-parse HEAD')[..8] if !os.exists('table.html') { os.create('table.html')? } mut table := os.read_file('table.html')? if os.exists('website/index.html') { uploaded_index := os.read_file('website/index.html')? if uploaded_index.contains('>$commit<') { println('nothing to benchmark') exit(1) return } } message := exec('git log --pretty=format:"%s" -n1 $commit') println('\nBenchmarking commit $commit "$message"') // build an optimized V println(' Building vprod...') os.chdir(vdir)? if os.args.contains('-noprod') { exec('./v -o vprod cmd/v') // for faster debugging } else { exec('./v -o vprod -prod -prealloc cmd/v') } // cache vlib modules exec('$vdir/v wipe-cache') exec('$vdir/v -o v2 -prod cmd/v') // measure diff1 := measure('$vdir/vprod $voptions -o v.c cmd/v', 'v.c') mut tcc_path := 'tcc' $if freebsd { tcc_path = '/usr/local/bin/tcc' if vdir.contains('/tmp/cirrus-ci-build') { tcc_path = 'clang' } } if os.args.contains('-clang') { tcc_path = 'clang' } diff2 := measure('$vdir/vprod $voptions -cc $tcc_path -o v2 cmd/v', 'v2') diff3 := 0 // measure('$vdir/vprod -native $vdir/cmd/tools/1mil.v', 'native 1mil') diff4 := measure('$vdir/vprod -usecache $voptions -cc clang examples/hello_world.v', 'hello.v') vc_size := os.file_size('v.c') / 1000 scan, parse, check, cgen, vlines := measure_steps(vdir) commit_date := exec('git log -n1 --pretty="format:%at" $commit') date := time.unix(commit_date.int()) os.chdir(fast_dir)? mut out := os.create('table.html')? // place the new row on top html_message := message.replace_each(['<', '<', '>', '>']) table = '