com.facebook.buck.apple.AppleLibrary.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.apple.AppleLibrary.java

Source

/*
 * 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.apple;

import com.facebook.buck.cxx.ArchiveStep;
import com.facebook.buck.cxx.CompilerStep;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.step.Step;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;

import java.nio.file.Path;

public class AppleLibrary extends AbstractAppleNativeTargetBuildRule {

    private final boolean linkedDynamically;
    private final SourcePath archiver;

    public AppleLibrary(BuildRuleParams params, SourcePathResolver resolver, AppleNativeTargetDescriptionArg arg,
            TargetSources targetSources, SourcePath archiver, boolean linkedDynamically) {
        super(params, resolver, arg, targetSources);
        this.linkedDynamically = linkedDynamically;
        this.archiver = Preconditions.checkNotNull(archiver);
    }

    public boolean getLinkedDynamically() {
        return linkedDynamically;
    }

    @Override
    protected ImmutableList<Step> getFinalBuildSteps(ImmutableSortedSet<Path> files, Path outputFile) {
        if (files.isEmpty()) {
            return ImmutableList.of();
        } else if (linkedDynamically) {
            // TODO(user): This needs to create a dylib, not a static library.
            return ImmutableList.<Step>of(new CompilerStep(/* compiler */ getCompiler(), /* shouldLink */ true,
                    /* srcs */ files, /* outputFile */ outputFile, /* shouldAddProjectRootToIncludePaths */ false,
                    /* includePaths */ ImmutableSortedSet.<Path>of(),
                    /* commandLineArgs */ ImmutableList.<String>of()));
        } else {
            return ImmutableList.<Step>of(
                    new ArchiveStep(getResolver().getPath(archiver), outputFile, ImmutableList.copyOf(files)));
        }
    }

    @Override
    protected String getOutputFileNameFormat() {
        return getOutputFileNameFormat(linkedDynamically);
    }

    public static String getOutputFileNameFormat(boolean linkedDynamically) {
        if (linkedDynamically) {
            return "%s.dylib";
        } else {
            return "lib%s.a";
        }
    }
}