Exemplo n.º 1
0
        /// <inheritdoc />
        protected override void SetupLinkFilesArgs(TaskGraph graph, BuildOptions options, List <string> args, string outputFilePath)
        {
            base.SetupLinkFilesArgs(graph, options, args, outputFilePath);

            // Speed up build
            //args.Add("-Wl,--as-needed");
            args.Add("-Wl,--hash-style=gnu");
            //args.Add("-Wl,--build-id");

            if (options.LinkEnv.Output == LinkerOutput.SharedLibrary)
            {
                args.Add("-shared");
                args.Add(string.Format("-soname=\"{0}\"", Path.GetFileNameWithoutExtension(outputFilePath)));
            }

            args.Add(string.Format("-target {0}", ArchitectureName));
            args.Add(string.Format("--sysroot=\"{0}\"", ToolsetRoot.Replace('\\', '/')));

            // Link core libraries
            args.Add("-pthread");
            args.Add("-ldl");
            args.Add("-lrt");

            // Link X11
            args.Add("-L/usr/X11R6/lib");
            args.Add("-lX11");
            args.Add("-lXcursor");
            args.Add("-lXinerama");
        }
Exemplo n.º 2
0
        /// <inheritdoc />
        protected override void SetupCompileCppFilesArgs(TaskGraph graph, BuildOptions options, List <string> args, string outputPath)
        {
            base.SetupCompileCppFilesArgs(graph, options, args, outputPath);

            args.Add(string.Format("-target {0}", ArchitectureName));
            args.Add(string.Format("--sysroot=\"{0}\"", ToolsetRoot.Replace('\\', '/')));
        }
Exemplo n.º 3
0
        /// <inheritdoc />
        protected override void SetupCompileCppFilesArgs(TaskGraph graph, BuildOptions options, List <string> args, string outputPath)
        {
            base.SetupCompileCppFilesArgs(graph, options, args, outputPath);

            var toolchain = ToolsetRoot.Replace('\\', '/');

            args.Add(string.Format("--target={0}", ArchitectureName));
            args.Add(string.Format("--gcc-toolchain=\"{0}\"", toolchain));
            args.Add(string.Format("--sysroot=\"{0}/sysroot\"", toolchain));

            args.Add("-fpic");
            args.Add("-funwind-tables");
            args.Add("-no-canonical-prefixes");
            if (options.Configuration != TargetConfiguration.Release)
            {
                args.Add("-fstack-protector-strong");
                args.Add("-D_FORTIFY_SOURCE=2");
            }
            else
            {
                args.Add("-D_FORTIFY_SOURCE=1");
            }
            if (options.CompileEnv.DebugInformation)
            {
                args.Add("-g2 -gdwarf-4");
                args.Add("-fno-omit-frame-pointer");
                args.Add("-fno-function-sections");
            }

            switch (Architecture)
            {
            case TargetArchitecture.x86:
                args.Add("-march=atom");
                if (Configuration.AndroidPlatformApi < 24)
                {
                    args.Add("-mstackrealign");
                }
                break;

            case TargetArchitecture.x64:
                args.Add("-march=atom");
                break;

            case TargetArchitecture.ARM:
                args.Add("-march=armv7-a");
                args.Add("-mfloat-abi=softfp");
                args.Add("-mfpu=vfpv3-d16");
                break;

            case TargetArchitecture.ARM64:
                args.Add("-march=armv8-a");
                break;

            default: throw new InvalidArchitectureException(Architecture);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AndroidToolchain"/> class.
        /// </summary>
        /// <param name="platform">The platform.</param>
        /// <param name="architecture">The target architecture.</param>
        /// <param name="toolchainRoot">The toolchain root path.</param>
        public AndroidToolchain(AndroidPlatform platform, TargetArchitecture architecture, string toolchainRoot)
            : base(platform, architecture, toolchainRoot, false, string.Empty)
        {
            var toolchain = ToolsetRoot.Replace('\\', '/');

            SystemIncludePaths.Add(Path.Combine(toolchain, "sources/usr/include/c++/v1").Replace('\\', '/'));
            SystemIncludePaths.Add(Path.Combine(toolchain, "sysroot/usr/include").Replace('\\', '/'));
            SystemIncludePaths.Add(Path.Combine(toolchain, "sysroot/usr/local/include").Replace('\\', '/'));
            SystemIncludePaths.Add(Path.Combine(toolchain, "lib64/clang/9.0.8/include").Replace('\\', '/'));
        }
Exemplo n.º 5
0
        /// <inheritdoc />
        protected override void SetupLinkFilesArgs(TaskGraph graph, BuildOptions options, List <string> args, string outputFilePath)
        {
            base.SetupLinkFilesArgs(graph, options, args, outputFilePath);

            args.Add("-shared");
            args.Add("-no-canonical-prefixes");
            args.Add("-Wl,-Bsymbolic");
            args.Add("-Wl,--build-id=sha1");
            args.Add("-Wl,-gc-sections");

            if (options.LinkEnv.Output == LinkerOutput.Executable)
            {
                args.Add("-u ANativeActivity_onCreate");
            }

            string target;

            switch (Architecture)
            {
            case TargetArchitecture.x86:
                target = "i686-none-linux-android";
                break;

            case TargetArchitecture.x64:
                target = "x86_64-none-linux-android";
                break;

            case TargetArchitecture.ARM:
                target = "armv7-none-linux-androideabi";
                break;

            case TargetArchitecture.ARM64:
                target = "aarch64-none-linux-android";
                break;

            default: throw new InvalidArchitectureException(Architecture);
            }

            var toolchain = ToolsetRoot.Replace('\\', '/');

            args.Add(string.Format("--sysroot=\"{0}/sysroot\"", toolchain));
            args.Add(string.Format("--gcc-toolchain=\"{0}\"", toolchain));
            args.Add("--target=" + target + Configuration.AndroidPlatformApi);
        }
Exemplo n.º 6
0
        /// <inheritdoc />
        protected override void SetupCompileCppFilesArgs(TaskGraph graph, BuildOptions options, List <string> args, string outputPath)
        {
            base.SetupCompileCppFilesArgs(graph, options, args, outputPath);

            // Hide all symbols by default
            args.Add("-fvisibility-inlines-hidden");
            args.Add("-fvisibility-ms-compat");

            args.Add(string.Format("-target {0}", ArchitectureName));
            args.Add(string.Format("--sysroot=\"{0}\"", ToolsetRoot.Replace('\\', '/')));

            if (Architecture == TargetArchitecture.x64)
            {
                args.Add("-mssse3");
            }

            if (options.LinkEnv.Output == LinkerOutput.SharedLibrary)
            {
                args.Add("-fPIC");
            }
        }