// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

func processPieFlags(builder *commandBuilder) {
	fpieMap := map[string]bool{"-D__KERNEL__": true, "-fPIC": true, "-fPIE": true, "-fno-PIC": true, "-fno-PIE": true,
		"-fno-pic": true, "-fno-pie": true, "-fpic": true, "-fpie": true, "-nopie": true,
		"-nostartfiles": true, "-nostdlib": true, "-pie": true, "-static": true}

	pieMap := map[string]bool{"-D__KERNEL__": true, "-A": true, "-fno-PIC": true, "-fno-PIE": true, "-fno-pic": true, "-fno-pie": true,
		"-nopie": true, "-nostartfiles": true, "-nostdlib": true, "-pie": true, "-r": true, "--shared": true,
		"-shared": true, "-static": true}

	pie := false
	fpie := false
	if builder.target.abi != "eabi" {
		for _, arg := range builder.args {
			if arg.fromUser {
				if fpieMap[arg.value] {
					fpie = true
				}
				if pieMap[arg.value] {
					pie = true
				}
			}
		}
	}
	builder.transformArgs(func(arg builderArg) string {
		// Remove -nopie as it is a non-standard flag.
		if arg.value == "-nopie" {
			return ""
		}
		if fpie && !arg.fromUser && arg.value == "-fPIE" {
			return ""
		}
		if pie && !arg.fromUser && arg.value == "-pie" {
			return ""
		}
		return arg.value
	})
}