// Copyright 2019 The ChromiumOS 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
	})
}
