#ifndef C_H
#define C_H

#include "tier1/utlstring.h"
#include "tier1/utlvector.h"
#include "runner.h"
#include "ld.h"
#include "target.h"
#include "helper.h"

struct C_Macro_t
{
	CUtlString szName;
	CUtlString szValue;
};

enum ECVersion
{
	CVERSION_89,
	CVERSION_99 = 0,
	CVERSION_11,
	CVERSION_17,
	CVERSION_23,
	CVERSION_2Y,
};

enum ECPPVersion
{
	CPPVERSION_98 = 1,
	CPPVERSION_11 = 0,
	CPPVERSION_14 = 2,
	CPPVERSION_17 = 3,
	CPPVERSION_20 = 4,
	CPPVERSION_23 = 5,
	CPPVERSION_2C = 6,
};

class CCProject : public CProject
{
public:
	CUtlVector<CUtlString> files = {};
	CUtlVector<C_Macro_t> macros = {};
	CUtlVector<CUtlString> includeDirectories = {};
	CUtlVector<CUtlString> includeFiles = {};
	bool bFPIE = false;
	bool bFPIC = false;
	bool bDebug = m_target.optimization == TARGET_DEBUG;
	ECVersion cVersion;
	ECPPVersion cppVersion;
	CLDProject Compile();
	static void GenerateCompileCommands();
};

#endif
