• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2015 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 kati
16
17import (
18	"fmt"
19	"path/filepath"
20	"strings"
21)
22
23const bootstrapMakefileName = "*bootstrap*"
24
25func bootstrapMakefile(targets []string) (makefile, error) {
26	bootstrap := `
27CC?=cc
28CXX?=g++
29AR?=ar
30MAKE?=kati
31# Pretend to be GNU make 3.81, for compatibility.
32MAKE_VERSION?=3.81
33KATI?=kati
34SHELL=/bin/sh
35# TODO: Add more builtin vars.
36
37# http://www.gnu.org/software/make/manual/make.html#Catalogue-of-Rules
38# The document above is actually not correct. See default.c:
39# http://git.savannah.gnu.org/cgit/make.git/tree/default.c?id=4.1
40.c.o:
41	$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
42.cc.o:
43	$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
44# TODO: Add more builtin rules.
45`
46	bootstrap += fmt.Sprintf("MAKECMDGOALS:=%s\n", strings.Join(targets, " "))
47	cwd, err := filepath.Abs(".")
48	if err != nil {
49		return makefile{}, err
50	}
51	bootstrap += fmt.Sprintf("CURDIR:=%s\n", cwd)
52	return parseMakefileString(bootstrap, srcpos{bootstrapMakefileName, 0})
53}
54