• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2019 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package build
16
17import (
18	"encoding/binary"
19	"syscall"
20)
21
22func detectTotalRAM(ctx Context) uint64 {
23	s, err := syscall.Sysctl("hw.memsize")
24	if err != nil {
25		ctx.Printf("Failed to get system memory size: %v", err)
26		return 0
27	}
28
29	// syscall.Sysctl assumes that the return value is a string and trims the last byte if it is 0.
30	if len(s) == 7 {
31		s += "\x00"
32	}
33
34	if len(s) != 8 {
35		ctx.Printf("Failed to get system memory size, returned %d bytes, expecting 8 bytes", len(s))
36		return 0
37	}
38
39	return binary.LittleEndian.Uint64([]byte(s))
40}
41