Code Monkey home page Code Monkey logo

gradle-metal's People

Contributors

pedrolamarao avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

gradle-metal's Issues

MSVC tools

Currently, gradle-metal supports LLVM tools only.

Let us support MSVC tools also.

CMake adapter

Tasks:

  • acquire sources
  • validate sources signature
  • configure < gradle-metal cmake DSL
  • make < gradle-metal cmake DSL
  • discover cmake components
  • publish outgoing elements

Cache discovered tools

Currently, tasks will try to resolve the compiler tool every time with Metal.locateTool. Let us cache this discovery somehow, resisting the urge to "model" the entire toolchain.

Linker script sources

Add a linker script language, linker script elements and dependencies, and feed linker scripts to the linker.

This should improve the definition of metal multiboot2 library.

Reorganize samples

In preparation for the great refactoring, let us reorganize our samples.

  • asm-application
  • asm-archive
  • c-application
  • c-archive
  • cxx-application
  • cxx-archive
  • dependency-on-project
  • dependency-on-build
  • dependency-on-prebuilt
  • dependency-transitivity
  • polyglot-application
  • polyglot-archive

Specify the target machine

Currently, gradle-metal does not configure the target machine, leaving it up to the toolset.

Let us allow the user to specify the target machine.

The ultimate goal is to allow projects capable of multiple target machines with a protocol to resolve the target machine for a certain build.

Target matching

Allow configuring targets for which a task or component makes sense. Running lifecycle tasks such as test must update only dependencies that make sense for this target.

CLion integration

Currently, one is able to load a gradle-metal project in CLion via compile commands database.

Let us write plugins for full IDE support.

Export locateTool

Export method locateTool used to find the tool executable file in the tools path. Metal will use this to locate GRUB and QEMU.

Target mapping

The original "psys" build system, based on nokee, allowed us to define custom targets.

This enabled us to define targets such as x86_32-elf-multiboot2, something that makes perfect sense for this project: a target that generates code for x86_32 and links an ELF Multiboot2 application. This top level target would configure compilation for i686-elf and would include a dependency on module multiboot2, perhaps even link the application as a module to a multiboot2 start main module.

We could still support such a system if we had some kind of target mapping, that would take the "top" target name and map that to compile target and link target names.

That would be immediately useful, since clang thinks it needs gcc to link target i686-elf and we must trick it to use lld by transforming that to i686-linux-elf. This transform is hard-coded in MetalLinkTask.

Build flavour

Let us support build flavors such as debug and release. This is fundamentally about defining flavour specific options, such as -g or -O2.

Dependencies from Maven repository

  • define an artifact set scheme, probably using classifiers for includables, importables, linkables etc.
  • explode artifacts into some local cache
  • add includables etc. on local cache to includable elements etc.

Configuration cache

Let us prepare Gradle Metal for the configuration cache. Performance is not an issue at this time, but this seems an excellent way to keep the plugins up with best practices.

Allow transitive dependencies

Currently, the only public dependency configuration is nativeImplementation, which is not transitive.

Add some kind of "api" dependency configuration for transitive dependencies.

Discover the host target name

Export a provider that yields the host target name, discovered from running clang -v, and apply that as default target.

This should allow filtering targets with no weird exceptions.

Target aware dependency resolution

Do variant aware selection on a "target" attribute.

Pulling dependencies from repositories will not be pratical without target aware selection.

Shared libraries

Assemble shared libraries.

This should require adjustments on MetalLinkTask to accomodate Windows library.lib and library.so distinction.
Let us take the opportunity to also support library.pdb for all executable components.

Driver for googletest

Drive a googletest application, producing JUnit test reports, which every CI knows how to consume.

Conventional test sources and application

Provide a way to easily define the "test" component wired to "main" sources.

Perhaps the conventional archive plugin should set this up.

The run task for this component must be wired to the test task.

Consider archive dependency transitivity

Consider this: an application component with a dependency on a (shared) library component with an api dependency on a (static) archive. Certainly the application must be configured to include the (static) archive's public headers. But should it also link with the archive? Maybe introduce something akin to "compileOnlyApi"?

Redesign to single component projects

The current design allows for a single project with any number of components, mixing applications and archives. After applying to project Metal and gaining initial experience, this design is too complicated for no benefit.

Let us redesign Gradle Metal for a single main component per project. There will be no component container for creating components. There will be a single application or archive top level DSL object at most.

JVM FFI libraries

Let us do a specialized project that generates a JAR archive with a shared library appropriately for JNI or FFI based JVM libraries.

Toolset specification

At this time, gradle-metal uses LLVM tools from the environment PATH.

Let us allow the user to write a toolset specification with custom paths.

Target specific sources

Provide DSL for configuring target specific sources.
It is enough to allow including sources by pattern.

Tools from Chocolatey

Discover tools installed with Chocolatey.

For example, use cmake and ninja from Chocolatey.

GCC tools

Currently, gradle-metal supports LLVM tools only.

Let us support GCC tools also.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.