/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

plugins {}

def githubBuild = project.properties['androidx.github.build'] ?: false
if (githubBuild) {
    apply plugin: "cpp-application"

    def COLLECTION_KMP_FRAMEWORK_NAME = 'CollectionKMP'
    def FRAMEWORK_TASK = ':collection:collection:linkReleaseFrameworkMacosX64'

    tasks.withType(CppCompile) {
        def frameworkPath = tasks.getByPath(FRAMEWORK_TASK).outputs.files.singleFile.toString()

        // Add *.m and *.mm files to the source set, since by default the C++ plug-in doesn't do
        // that.
        def sourceFiles = files("src/main/objc/").asFileTree.matching { include("**/*.m?") }
        inputs.files(sourceFiles)
        source.from(sourceFiles)

        compilerArgs.addAll '-x', 'objective-c++', '-F', frameworkPath
    }

    tasks.withType(LinkExecutable) {
        def frameworkTask = tasks.getByPath(FRAMEWORK_TASK)
        dependsOn(frameworkTask)

        def frameworkPath = frameworkTask.outputs.files.singleFile.toString()
        linkerArgs.addAll '-framework', 'Foundation',
                '-l', 'benchmark',
                '-framework', COLLECTION_KMP_FRAMEWORK_NAME,
                '-F', frameworkPath,
                '-rpath', frameworkPath
    }
}
