Skip to content

Commit

Permalink
Merge branch 'next' into chore/integrate-next
Browse files Browse the repository at this point in the history
# Conflicts:
#	.github/workflows/publish.yml
#	.github/workflows/ubuntu.yml
#	.github/workflows/windows.yml
#	README.adoc
#	build.gradle.kts
#	gradle/wrapper/gradle-wrapper.properties
#	plugins/build.gradle.kts
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/MetalTestBase.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/application/ApplicationFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/archive/ArchiveFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/base/BaseFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/base/CommandsFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/c/CFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/cpp/CppFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/cxx/CxxFunctionalTest.java
#	plugins/src/functionalTest/java/br/dev/pedrolamarao/gradle/metal/ixx/IxxFunctionalTest.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalHostTargetSource.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalIxxPrecompile.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalIxxSourceSet.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalService.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalSourceSet.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/MetalSources.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/application/MetalApplicationPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/archive/MetalArchivePlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/asm/MetalAsmCommandsTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/asm/MetalAsmCompileBaseTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/asm/MetalAsmCompileTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/asm/MetalAsmPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalApplication.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalArchive.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalArchiveTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalBasePlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalCompileTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalComponent.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalComponentPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalExtension.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalLinkTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/base/MetalSourceTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/c/MetalCCommandsTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/c/MetalCCompileBaseTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/c/MetalCCompileTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/c/MetalCPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/commands/MetalCommandsPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/cpp/MetalCppPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/cxx/MetalCxxCommandsTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/cxx/MetalCxxCompileBaseTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/cxx/MetalCxxCompileTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/cxx/MetalCxxPlugin.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/ixx/MetalIxxCommandsTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/ixx/MetalIxxCompileTask.java
#	plugins/src/main/java/br/dev/pedrolamarao/gradle/metal/ixx/MetalIxxPlugin.java
#	samples/README.adoc
#	samples/application-asm/settings.gradle.kts
#	samples/application-c/settings.gradle.kts
#	samples/application-cxx/settings.gradle.kts
#	samples/application-mixed/settings.gradle.kts
#	samples/archive-asm/build.gradle.kts
#	samples/archive-asm/settings.gradle.kts
#	samples/archive-c/build.gradle.kts
#	samples/archive-c/settings.gradle.kts
#	samples/archive-cxx/build.gradle.kts
#	samples/archive-cxx/settings.gradle.kts
#	samples/archive-mixed/build.gradle.kts
#	samples/archive-mixed/settings.gradle.kts
#	samples/asm-application/build.gradle.kts
#	samples/bare-metal-multiboot2/build.gradle.kts
#	samples/bare-metal-multiboot2/gradle.properties
#	samples/bare-metal-multiboot2/multiboot2/build.gradle.kts
#	samples/bare-metal-multiboot2/settings.gradle.kts
#	samples/c-application/build.gradle.kts
#	samples/cxx-application/build.gradle.kts
#	samples/dependency-on-cmake-build/application/build.gradle.kts
#	samples/dependency-on-external-cmake-ninja/build.gradle.kts
#	samples/dependency-on-external-cmake-ninja/googletest/build.gradle.kts
#	samples/dependency-on-external-cmake-ninja/settings.gradle.kts
#	samples/dependency-on-gradle-build/application/build.gradle.kts
#	samples/dependency-on-gradle-build/archive/build.gradle.kts
#	samples/dependency-on-included-build/application/settings.gradle.kts
#	samples/dependency-on-included-build/archive/settings.gradle.kts
#	samples/dependency-on-included-build/settings.gradle.kts
#	samples/dependency-on-subproject-headers/archive/build.gradle.kts
#	samples/dependency-on-subproject-headers/build.gradle.kts
#	samples/dependency-on-subproject-headers/settings.gradle.kts
#	samples/dependency-on-subproject-modules/archive/build.gradle.kts
#	samples/dependency-on-subproject-modules/build.gradle.kts
#	samples/dependency-on-subproject-modules/settings.gradle.kts
#	samples/dependency-transitivity/build.gradle.kts
#	samples/dependency-transitivity/settings.gradle.kts
#	samples/polyglot-application/build.gradle.kts
#	samples/unconventional-project/settings.gradle.kts
#	settings.gradle.kts
  • Loading branch information
pedrolamarao committed Feb 21, 2024
2 parents aafd1cb + 3d635a5 commit 555353f
Show file tree
Hide file tree
Showing 262 changed files with 5,542 additions and 6,101 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ jobs:
timeout-minutes: 10
steps:
- name: "Checkout"
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: "Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v2
- name: "Set up JDK 17"
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "temurin"
- name: "Publish with Gradle"
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
with:
arguments: publishPlugins "-Pgradle.publish.key=${{ secrets.GRADLE_PUBLISH_KEY }}" "-Pgradle.publish.secret=${{ secrets.GRADLE_PUBLISH_SECRET }}"
36 changes: 29 additions & 7 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ jobs:
timeout-minutes: 10
steps:
- name: "Checkout"
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: "Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v2
- name: "Set up JDK 17"
uses: actions/setup-java@v3
with:
Expand All @@ -21,30 +21,52 @@ jobs:
ubuntu-version: 22.04
version: 16.0.4
- name: "Build with Gradle"
uses: gradle/gradle-build-action@v2
uses: gradle/gradle-build-action@v3
with:
arguments: build
- name: "Generate Allure Report"
uses: gradle/gradle-build-action@v3
if: always()
with:
arguments: allureAggregateReport
- name: "Publish Allure Report"
uses: actions/upload-artifact@v4
if: always()
with:
name: ubuntu-22.04-llvm-16
path: "build/reports/allure-report/allureAggregateReport/index.html"
build-llvm-17:
name: "build with llvm 17"
runs-on: ubuntu-22.04
timeout-minutes: 10
steps:
- name: "Checkout"
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: "Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1
- name: "Set up JDK 17"
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "temurin"
- name: "Install LLVM 16"
- name: "Install LLVM 17"
uses: KyleMayes/install-llvm-action@v1
with:
force-version: true
ubuntu-version: 22.04
version: 17.0.2
version: 17.0.6
- name: "Build with Gradle"
uses: gradle/gradle-build-action@v2
with:
arguments: build
arguments: build
- name: "Generate Allure Report"
uses: gradle/gradle-build-action@v3
if: always()
with:
arguments: allureAggregateReport
- name: "Publish Allure Report"
uses: actions/upload-artifact@v4
if: always()
with:
name: ubuntu-22.04-llvm-17
path: "build/reports/allure-report/allureAggregateReport/index.html"
19 changes: 15 additions & 4 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,30 @@ on: [pull_request,workflow_dispatch]
jobs:
build:
name: "build"
runs-on: windows-2022
runs-on: windows-latest
timeout-minutes: 10
steps:
- name: "Checkout"
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: "Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v2
- name: "Set up JDK 17"
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "temurin"
- name: "Build with Gradle"
uses: gradle/gradle-build-action@v2.8.0
uses: gradle/gradle-build-action@v3
with:
arguments: build
- name: "Generate Allure Report"
uses: gradle/gradle-build-action@v3
if: always()
with:
arguments: allureAggregateReport
- name: "Publish Allure Report"
uses: actions/upload-artifact@v4
if: always()
with:
name: windows-latest
path: "build/reports/allure-report/allureAggregateReport/index.html"
55 changes: 29 additions & 26 deletions README.adoc
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
= gradle-metal
:author: Pedro Lamarão <pedro.lamarao@gmail.com>

Gradle Metal is a suite of Gradle plugins supporting development for the bare metal,
Gradle Metal is a suite of Gradle plugins for bare metal development,
primarily design to support project link:https://github.com/pedrolamarao/metal[Metal].

Features:

* compile assembler, c and c++ (including c++ module interfaces)
* assemble archives and executables
* build target support (e.g. `x86_64-elf`)
* generate compilation commands database
* source dependency on included project
* compile assembler, c and c++ sources (with support for c++ modules)
* assemble applications and (static) libraries
* cross-compilation support
* compilation commands database support
* source dependency on included project or build
* binary dependency on prebuilt external project
* LLVM tools
Expand All @@ -19,15 +19,31 @@ This project is under early development.
Compatibility *will be broken* without prior notice.
In particular, we will *not* stabilize our Gradle dependency before Gradle 9.

A C++ library project with modules support is defined as simply as:

[source,kotlin]
----
plugins {
id("br.dev.pedrolamarao.metal.library")
id("br.dev.pedrolamarao.metal.cxx")
}
library {
compileOptions = listOf("-std=c++20")
}
----

Check the link:samples[] for a variety of use-cases.

Current requirements:

* Gradle 8.4 or newer
* Gradle 8.6 or newer
* JDK 17 or newer
* LLVM 16 or newer (with clang, clang-scan-deps, lld, llvm-ar etc.)
* LLVM 16 or newer (with `clang`, `clang-scan-deps`, `lld`, `llvm-ar` etc.)
To use the development version, you may install from source with `./gradlew publishToMavenLocal` and configure your project's settings like this:

[source]
[source,kotlin]
----
pluginManagement {
repositories {
Expand All @@ -36,32 +52,19 @@ pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.id.startsWith("br.dev.pedrolamarao.metal.")) {
useModule("br.dev.pedrolamarao.gradle.metal:plugins:0.4")
useModule("br.dev.pedrolamarao.gradle.metal:plugins:0.5+")
}
}
}
}
----

Check the link:samples[] for a variety of use-cases.

Plugins:

* `br.dev.pedrolamarao.metal.base`: adds the Gradle Metal service and extension
* `br.dev.pedrolamarao.metal.application`: conventional application project
* `br.dev.pedrolamarao.metal.archive`: conventional archive project
* `br.dev.pedrolamarao.metal.asm`: adds assembler source sets
* `br.dev.pedrolamarao.metal.c`: adds C sources sets
* `br.dev.pedrolamarao.metal.cpp`: adds C preprocessor source sets
* `br.dev.pedrolamarao.metal.cxx`: adds C++ module implementation source sets
* `br.dev.pedrolamarao.metal.ixx`: adds C++ module interface source sets
Under construction:

* build flavour support (e.g. `debug`, `release`)
* shared library component
* build flavour (e.g. `debug`, `release`)
* shared library
* source dependencies on cmake project
* binary dependencies on maven repository
* binary dependencies from maven repository
* GCC tools
* MSVC tools
Expand Down
18 changes: 16 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
// Copyright (c) Pedro Lamarão <pedro.lamarao@gmail.com>. All rights reserved.

import io.qameta.allure.gradle.base.tasks.ConditionalArgumentProvider

plugins {
id("base")
id("io.qameta.allure-aggregate-report")
}

group = "br.dev.pedrolamarao.gradle.metal"
version = "0.4"
version = "0.5-SNAPSHOT"

allure {
environment.put("ALLURE_NO_ANALYTICS","true")
environment.put("JAVA_HOME",System.getProperty("java.home"))
version = "2.25.0"
}

subprojects {
group = rootProject.group
version = rootProject.version
}

tasks.allureAggregateReport.configure {
argumentProviders += ConditionalArgumentProvider( project.provider { listOf("--single-file") } )
clean = true
}

tasks.wrapper.configure {
gradleVersion = "8.4"
gradleVersion = "8.6"
}
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Loading

0 comments on commit 555353f

Please sign in to comment.