import org.doomedsociety.gradlecpp.cfg.ToolchainConfigUtils
import org.doomedsociety.gradlecpp.msvc.MsvcToolchainConfig
import org.doomedsociety.gradlecpp.toolchain.icc.Icc
import org.doomedsociety.gradlecpp.toolchain.icc.IccCompilerPlugin
import org.gradle.nativeplatform.NativeBinarySpec
import org.gradle.nativeplatform.NativeLibrarySpec
import org.gradle.nativeplatform.toolchain.VisualCpp


apply plugin: 'c'
apply plugin: IccCompilerPlugin

void setupToolchain(NativeBinarySpec b) {
    def cfg = rootProject.createToolchainConfig(b)
    if (cfg instanceof MsvcToolchainConfig) {
        cfg.compilerOptions.pchConfig = new MsvcToolchainConfig.PrecompiledHeadersConfig(
                enabled: true,
                pchHeader: 'bzlib_private.h',
                pchSourceSet: 'bz2_pch'
        )
    }

    ToolchainConfigUtils.apply(project, cfg, b)
}

model {
    buildTypes {
        debug
        release
    }

    platforms {
        x86 {
            architecture "x86"
        }
    }

    toolChains {
        visualCpp(VisualCpp) {
        }
        icc(Icc) {
        }
    }

    components {
        bzip2(NativeLibrarySpec) {
            targetPlatform 'x86'

            sources {
                bz2_main(CSourceSet) {
                    source {
                        srcDir "src"
                        include "**/*.c"
                        exclude "precompiled.c"
                    }
                    exportedHeaders {
                        srcDir "include"
                    }
                }

                bz2_pch(CSourceSet) {
                    source {
                        srcDir "src"
                        include "precompiled.c"
                    }
                    exportedHeaders {
                        srcDir "include"
                    }
                }
            }

            binaries.all { NativeBinarySpec b -> project.setupToolchain(b) }
        }
    }
}