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

				noBuiltIn: true,

				intelExtensions: false,
				asmBlocks: true,

				positionIndependentCode: false,

				extraDefines: [
					'_GLIBCXX_USE_CXX11_ABI': 0,  // don't use specific c++11 features from GCC 5.X for backward compatibility to earlier version ABI libstdc++.so.6
				]
			),
			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: true,		// -ipo
				stripSymbolTable: true,
				staticLibStdCpp: false,
				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: [
					'_GLIBCXX_USE_CXX11_ABI': 0, // don't use specific c++11 features from GCC 5.X for backward compatibility to earlier version ABI libstdc++.so.6
				]
			),
			linkerOptions: new GccToolchainConfig.LinkerOptions(
				interProceduralOptimizations: false,
				stripSymbolTable: false,
				staticLibStdCpp: false,
				staticLibGcc: false,
				staticIntel: true,
			),
			librarianOptions: new GccToolchainConfig.LibrarianOptions(
			)
		)
	}

	cfg.singleDefines('REGAMEDLL_SSE')
	cfg.singleDefines('LINUX', '_LINUX')
	return cfg
}