| /* |
| * Copyright (C) 2014 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. |
| */ |
| |
| package com.android.build.gradle.ndk.internal; |
| |
| import static com.android.builder.model.AndroidProject.FD_INTERMEDIATES; |
| import static com.android.builder.model.AndroidProject.FD_OUTPUTS; |
| |
| import com.android.annotations.NonNull; |
| import com.android.annotations.Nullable; |
| import com.android.utils.StringHelper; |
| import com.google.common.base.Joiner; |
| |
| import org.gradle.nativeplatform.NativeBinarySpec; |
| |
| import java.io.File; |
| |
| /** |
| * Naming scheme for NdkPlugin's outputs. |
| */ |
| public class NdkNamingScheme { |
| |
| public static File getObjectFilesOutputDirectory( |
| NativeBinarySpec binary, |
| File buildDir, |
| String sourceSetName) { |
| return new File( |
| buildDir, |
| String.format( |
| "%s/objectFiles/%s/%s", |
| FD_INTERMEDIATES , |
| binary.getName(), |
| sourceSetName)); |
| } |
| |
| public static String getTaskName(NativeBinarySpec binary, @Nullable String verb) { |
| return getTaskName(binary, verb, null); |
| } |
| |
| public static String getTaskName( |
| NativeBinarySpec binary, |
| @Nullable String verb, |
| @Nullable String target) { |
| StringBuilder sb = new StringBuilder(); |
| appendCamelCase(sb, verb); |
| appendCamelCase(sb, binary.getName()); |
| appendCamelCase(sb, target); |
| return sb.toString(); |
| } |
| |
| private static void appendCamelCase(StringBuilder sb, @Nullable String word) { |
| if (word != null) { |
| if (sb.length() == 0) { |
| sb.append(word); |
| } else { |
| sb.append(StringHelper.capitalize(word)); |
| } |
| } |
| } |
| |
| public static String getNdkBuildTaskName(@NonNull NativeBinarySpec binary) { |
| return getTaskName(binary, "ndkBuild"); |
| } |
| |
| /** |
| * Return the name of the directory that will contain the final output of the native binary. |
| */ |
| public static String getOutputDirectoryName(String buildType, String productFlavor, String abi) { |
| return Joiner.on(File.separator).join( |
| FD_INTERMEDIATES, |
| "binaries", |
| buildType, |
| productFlavor, |
| "lib", |
| abi); |
| } |
| |
| public static String getOutputDirectoryName(NativeBinarySpec binary) { |
| return getOutputDirectoryName( |
| binary.getBuildType().getName(), |
| binary.getFlavor().getName(), |
| binary.getTargetPlatform().getName()); |
| } |
| |
| /** |
| * Return the name of the directory that will contain the native library with debug symbols. |
| */ |
| public static String getDebugLibraryDirectoryName(String buildType, String productFlavor, String abi) { |
| return Joiner.on(File.separator).join( |
| FD_INTERMEDIATES, |
| "binaries", |
| buildType, |
| productFlavor, |
| "obj", |
| abi); |
| } |
| |
| public static String getDebugLibraryDirectoryName(NativeBinarySpec binary) { |
| return getDebugLibraryDirectoryName( |
| binary.getBuildType().getName(), |
| binary.getFlavor().getName(), |
| binary.getTargetPlatform().getName()); |
| } |
| |
| public static String getSharedLibraryFileName(String moduleName) { |
| return "lib" + moduleName + ".so"; |
| } |
| } |