/*
 * Copyright 2013-present Facebook, Inc.
 *
 * 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.facebook.buck.android;

import com.facebook.buck.rules.Buildable;

/**
 * {@link Buildable} that contains various {@code .so} files for Android, organized by target CPU
 * architecture.
 */
public interface NativeLibraryBuildable {

  /**
   * @return A boolean indicating whether the {@code .so} files in the directory returned by
   *     {@link #getLibraryPath()} should be included in the {@code assets} folder in the APK.
   */
  public boolean isAsset();

  /**
   * Returns the path to the directory containing {@code .so} files organized by target CPU
   * architecture. This often contains subdirectories such as:
   * <ul>
   *   <li><code>armeabi</code>
   *   <li><code>armeabi-v7a</code>
   * </ul>
   * @return A path relative to the project root that should does <em>not</em> include a trailing
   *     slash.
   */
  // TODO(mbolin): Return a Path instead of a String.
  public String getLibraryPath();
}
