import org.doomedsociety.gradlecpp.cfg.BinaryKind
import org.doomedsociety.gradlecpp.toolchain.icc.Icc
import org.gradle.nativeplatform.NativeBinarySpec
import org.gradle.nativeplatform.NativeExecutableBinarySpec
import org.gradle.nativeplatform.SharedLibraryBinarySpec
import org.gradle.nativeplatform.StaticLibraryBinarySpec
import org.gradle.nativeplatform.toolchain.VisualCpp

apply from: 'shared_msvc.gradle'
apply from: 'shared_icc.gradle'
apply from: 'shared_gcc.gradle'

rootProject.ext.createToolchainConfig = { NativeBinarySpec bin ->
	BinaryKind binaryKind
	if (bin instanceof NativeExecutableBinarySpec)
	{
		binaryKind = BinaryKind.EXECUTABLE
	}
	else if (bin instanceof SharedLibraryBinarySpec)
	{
		binaryKind = BinaryKind.SHARED_LIBRARY
	}
	else if (bin instanceof StaticLibraryBinarySpec)
	{
		binaryKind = BinaryKind.STATIC_LIBRARY
	}
	else
	{
		throw new RuntimeException("Unknown executable kind ${bin.class.name}")
	}

	boolean releaseBuild = bin.buildType.name.toLowerCase() == 'release'
	if (bin.toolChain instanceof VisualCpp)
	{
		return rootProject.createMsvcConfig(releaseBuild, binaryKind)
	}
	else if (bin.toolChain instanceof Icc)
	{
		return rootProject.createIccConfig(releaseBuild, binaryKind)
	}
	else if (bin.toolChain instanceof Gcc)
	{
		return rootProject.createGccConfig(releaseBuild, binaryKind)
	}
	else
	{
		throw new RuntimeException("Unknown native toolchain: ${bin.toolChain.class.name}")
	}
}