All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.android.build.gradle.ndk.internal.GccNativeToolSpecification Maven / Gradle / Ivy

There is a newer version: 0.9.0
Show newest version
/*
 * 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 com.android.SdkConstants;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;

import org.gradle.nativeplatform.platform.NativePlatform;

/**
 * Flag configuration for GCC toolchain.
 */
public class GccNativeToolSpecification extends AbstractNativeToolSpecification {

    private static final ListMultimap RELEASE_CFLAGS =
            ImmutableListMultimap.builder()
                    .putAll(SdkConstants.ABI_ARMEABI, ImmutableList.of(
                            "-fpic",
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-fstack-protector",
                            "-no-canonical-prefixes",
                            "-march=armv5te",
                            "-mtune=xscale",
                            "-msoft-float",
                            "-mthumb",
                            "-Os",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-fno-strict-aliasing",
                            "-finline-limit=64"))
                    .putAll(SdkConstants.ABI_ARMEABI_V7A, ImmutableList.of(
                            "-fpic",
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-fstack-protector",
                            "-no-canonical-prefixes",
                            "-march=armv7-a",
                            "-mfpu=vfpv3-d16",
                            "-mfloat-abi=softfp",
                            "-mthumb",
                            "-Os",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-fno-strict-aliasing",
                            "-finline-limit=64"))
                    .putAll(SdkConstants.ABI_ARM64_V8A, ImmutableList.of(
                            "-fpic",
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-fstack-protector",
                            "-no-canonical-prefixes",
                            "-O2",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-fstrict-aliasing",
                            "-funswitch-loops",
                            "-finline-limit=300"))
                    .putAll(SdkConstants.ABI_INTEL_ATOM, ImmutableList.of(
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-no-canonical-prefixes",
                            "-fstack-protector",
                            "-O2",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-fstrict-aliasing",
                            "-funswitch-loops",
                            "-finline-limit=300"))
                    .putAll(SdkConstants.ABI_INTEL_ATOM64, ImmutableList.of(
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-no-canonical-prefixes",
                            "-fstack-protector",
                            "-O2",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-fstrict-aliasing",
                            "-funswitch-loops",
                            "-finline-limit=300"))
                    .putAll(SdkConstants.ABI_MIPS, ImmutableList.of(
                            "-fpic",
                            "-fno-strict-aliasing",
                            "-finline-functions",
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-fmessage-length=0",
                            "-fno-inline-functions-called-once",
                            "-fgcse-after-reload",
                            "-frerun-cse-after-loop",
                            "-frename-registers",
                            "-no-canonical-prefixes",
                            "-O2",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-funswitch-loops",
                            "-finline-limit=300"))
                    .putAll(SdkConstants.ABI_MIPS64, ImmutableList.of(
                            "-fpic",
                            "-fno-strict-aliasing",
                            "-finline-functions",
                            "-ffunction-sections",
                            "-funwind-tables",
                            "-fmessage-length=0",
                            "-fno-inline-functions-called-once",
                            "-fgcse-after-reload",
                            "-frerun-cse-after-loop",
                            "-frename-registers",
                            "-no-canonical-prefixes",
                            "-O2",
                            "-g",
                            "-DNDEBUG",
                            "-fomit-frame-pointer",
                            "-funswitch-loops",
                            "-finline-limit=300"))
                    .build();

        private static final ListMultimap DEBUG_CFLAGS =
                ImmutableListMultimap.builder()
                        .putAll(SdkConstants.ABI_ARMEABI, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-strict-aliasing"))
                        .putAll(SdkConstants.ABI_ARMEABI_V7A, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-strict-aliasing"))
                        .putAll(SdkConstants.ABI_ARM64_V8A, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-strict-aliasing"))
                        .putAll(SdkConstants.ABI_INTEL_ATOM, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-strict-aliasing"))
                        .putAll(SdkConstants.ABI_INTEL_ATOM64, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-strict-aliasing"))
                        .putAll(SdkConstants.ABI_MIPS, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer",
                                "-fno-unswitch-loops"))
                        .putAll(SdkConstants.ABI_MIPS64, ImmutableList.of(
                                "-O0",
                                "-UNDEBUG",
                                "-fno-omit-frame-pointer"))
                        .build();

    private static final Iterable LDFLAGS = ImmutableList.of("-no-canonical-prefixes");

    private NativePlatform platform;

    private boolean isDebugBuild;


    public GccNativeToolSpecification(NativePlatform platform, boolean isDebugBuild) {
        this.isDebugBuild = isDebugBuild;
        this.platform = platform;
    }

    @Override
    public Iterable getCFlags() {
        return Iterables.concat(
                RELEASE_CFLAGS.get(platform.getName()),
                (isDebugBuild ? DEBUG_CFLAGS.get(platform.getName()) : ImmutableList.of()));
    }

    @Override
    public Iterable getCppFlags() {
        return getCFlags();
    }

    @Override
    public Iterable getLdFlags() {
        return LDFLAGS;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy