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: false,		// -ipo

				noBuiltIn: true,

				intelExtensions: false,
				asmBlocks: true,

				positionIndependentCode: false
			),
			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: false,		// -ipo
				stripSymbolTable: true,
				staticLibGcc: true,
				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: [
					'_ITERATOR_DEBUG_LEVEL': 0,	// for std::list, disable debug iterator in debug mode
				]
			),
			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: false,
				stripSymbolTable: false,
				staticLibGcc: true,
				staticIntel: true,
			),
			librarianOptions: new GccToolchainConfig.LibrarianOptions(
			)
		)
	}

	return cfg
}