import org.doomedsociety.gradlecpp.cfg.BinaryKind
import org.doomedsociety.gradlecpp.gcc.GccToolchainConfig
import org.doomedsociety.gradlecpp.gcc.OptimizationLevel

rootProject.ext.createIccConfig = { boolean release, BinaryKind binKind ->
	GccToolchainConfig cfg
	if (release) {
		cfg = new GccToolchainConfig(
			compilerOptions: new GccToolchainConfig.CompilerOptions(
				optimizationLevel: OptimizationLevel.LEVEL_3,
				stackProtector: false,
				interProceduralOptimizations: true,
				noBuiltIn: true,
				intelExtensions: false,
				asmBlocks: true,
				positionIndependentCode: false,

				extraDefines: [
					'linux': null,
					'__linux__': null,
					'NDEBUG': null,
				],
			),

			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: true,		// -ipo
				stripSymbolTable: true,
				staticLibStdCpp: true,
				staticLibGcc: false,
				staticIntel: true,
			),

			librarianOptions: new GccToolchainConfig.LibrarianOptions(
			)
		)
	} else {
		//debug
		cfg = new GccToolchainConfig(
			compilerOptions: new GccToolchainConfig.CompilerOptions(
				optimizationLevel: OptimizationLevel.DISABLE,
				stackProtector: true,
				interProceduralOptimizations: false,
				noBuiltIn: true,
				intelExtensions: false,
				asmBlocks: true,

				extraDefines: [
					'linux': null,
					'__linux__': null,
					'NDEBUG': null,
				],
			),

			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: false,
				stripSymbolTable: false,
				staticLibStdCpp: true,
				staticLibGcc: false,
				staticIntel: true,
			),

			librarianOptions: new GccToolchainConfig.LibrarianOptions(
			)
		)
	}

	return cfg;
}