--
-- snc.lua
-- Provides Sony SNC-specific configuration strings.
-- Copyright (c) 2010-2016 Jason Perkins and the Premake project
--

	local p = premake

	p.tools.snc = {}
	local snc = p.tools.snc
	local gcc = p.tools.gcc


--
-- Retrieve the CFLAGS for a specific configuration.
--

	snc.shared = {
		flags = {
			FatalCompileWarnings = "-Xquit=2",
		},
		optimize = {
			Off = "-O0",
			On = "-O1",
			Debug = "-Od",
			Full = "-O3",
			Size = "-Os",
			Speed = "-O2",
			},
		warnings = {
			Extra = "-Xdiag=2",
		}
	}

	snc.cflags = {
	}

	function snc.getcflags(cfg)
		local shared = p.config.mapFlags(cfg, snc.shared)
		local cflags = p.config.mapFlags(cfg, snc.cflags)
		local flags = table.join(shared, cflags, snc.getwarnings(cfg))
		return flags
	end


--
-- Retrieve the CXXFLAGS for a specific configuration.
--

	snc.cxxflags = {
		exceptionhandling = {
			Default = "-Xc+=exceptions",
			On = "-Xc+=exceptions",
			SEH = "-Xc-=exceptions",
		},
		rtti = {
			Default = "-Xc+=rtti",
			On = "-Xc+=rtti",
			SEH = "-Xc-=rtti",
		}
	}

	function snc.getcxxflags(cfg)
		local shared = config.mapFlags(cfg, snc.shared)
		local cxxflags = config.mapFlags(cfg, snc.cxxflags)
		local flags = table.join(shared, cxxflags, snc.getwarnings(cfg))
		return flags
	end


--
-- Returns a list of forced include files, decorated for the compiler
-- command line.
--
-- @param cfg
--    The project configuration.
-- @return
--    An array of force include files with the appropriate flags.
--

	function snc.getforceincludes(cfg)
		-- Just pass through to GCC for now
		local flags = gcc.getforceincludes(cfg)
		return flags
	end


--
-- Retrieve the LDFLAGS for a specific configuration.
--

	function snc.getldflags(cfg)
		local flags = { }

		if not (cfg.symbols == p.ON) then
			table.insert(flags, "-s")
		end

		return flags
	end


--
-- These are the same as GCC
--

	snc.getcppflags = gcc.getcppflags
	snc.getdefines = gcc.getdefines
	snc.getincludedirs = gcc.getincludedirs
	snc.getrunpathdirs = gcc.getrunpathdirs
	snc.getLibraryDirectories = gcc.getLibraryDirectories
	snc.getlinks = gcc.getlinks


--
-- Returns makefile-specific configuration rules.
--

	function snc.getmakesettings(cfg)
		return nil
	end


--
-- Retrieves the executable command name for a tool, based on the
-- provided configuration and the operating environment.
--
-- @param cfg
--    The configuration to query.
-- @param tool
--    The tool to fetch, one of "cc" for the C compiler, "cxx" for
--    the C++ compiler, or "ar" for the static linker.
-- @return
--    The executable command name for a tool, or nil if the system's
--    default value should be used.
--

	snc.tools = {
	}

	function snc.gettoolname(cfg, tool)
		local names = snc.tools[cfg.architecture] or snc.tools[cfg.system] or {}
		return names[tool]
	end
