# toolchains

Toolchains are collections of compiler and utility tools used to build software, with frameworks such as Bazel and CMake selecting or configuring them for platforms and languages.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Google joins the OpenROAD Initiative as principal member to accelerate open source silicon innovation

DevFeed: [Google joins the OpenROAD Initiative as principal member to accelerate open source silicon innovation](<https://devfeed.tech/articles/google-joins-the-openroad-initiative-as-principal-member-to-accelerate-open-source-silicon-innovation-41367.md>)

Original publisher: [Read original article](<http://opensource.googleblog.com/2026/08/%20google-joins-the-openroad-initiative-as-principal-member-to-accelerate-open-source-silicon-innovation.html>)

Author: Google Open Source (noreply@blogger.com)

Published: 2026-08-11T18:30:00Z

Content type: release

Language: en

Sources: [Google Open Source Blog](<https://devfeed.tech/sources/google-open-source-blog.md>)

Topics: [Google](<https://devfeed.tech/topics/google.md>), [Chip design](<https://devfeed.tech/topics/chip-design.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Continuous integration](<https://devfeed.tech/topics/continuous-integration.md>)

Tags: [chip-design](<https://devfeed.tech/tags/chip-design.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [eda](<https://devfeed.tech/tags/eda.md>), [google](<https://devfeed.tech/tags/google.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [openroad](<https://devfeed.tech/tags/openroad.md>), [semiconductors](<https://devfeed.tech/tags/semiconductors.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>)

### AI overview

Google has joined the OpenROAD Initiative as a principal member and appointed Aaron Cunningham to its Governing Board. The partnership supports OpenROAD's open-source electronic design automation ecosystem through governance, ecosystem growth, workforce development, and technical improvements.

### Source excerpt

by Ethan Mahintorabi & Aaron Cunningham, Hardware Toolchains Team Google is committed to advancing open source silicon innovation. We are excited to share that we have formally joined the OpenROAD Initiative (ORI), Inc. as a principal member. ORI is a nonprofit public benefit corporation dedicated to the open source electronic design automation (EDA) ecosystem. As part of this commitment, Aaron Cunningham has been appointed to the ORI Governing Board to represent Google and help drive the foundation's strategic direction, financial sustainability, and technical stewardship. Driving long-term open source sustainability The OpenROAD Initiative's mission is to advance and sustain the open source EDA ecosystem by fostering collaborative innovation across research, education, and industry--transforming ideas into silicon. Google's membership aligns directly with ORI's multi-year sustainability goals, supported by the US National Science Foundation's (NSF) Pathways to Enable Open-Source Ecosystems (POSE) program. With Google's participation and membership commitment, ORI will continue to strengthen, grow, and sustain its open source ecosystem through key vectors: Neutral Stewardship: Fostering transparent governance where no single company has outsized control over the code, ensuring the project remains inspectable, accessible, and community-driven. Ecosystem Growth: Supporting open and reproducible silicon research, developing robust design flows, and hosting global design contests. Workforce Development: Supporting global silicon skilling initiatives by expanding open source chip design curricula and collaborating with academic institutions and industrial training networks. Technical Strengthening: Enhancing continuous integration and deployment (CI/CD) pipelines, expanding PDK enablement, and improving user experience. Leadership perspectives "The OpenROAD Initiative is built on the vision of making chip design open and accessible to all--building a collaborative ecosyst

## GC and Exceptions in Wasmtime

DevFeed: [GC and Exceptions in Wasmtime](<https://devfeed.tech/articles/gc-and-exceptions-in-wasmtime-15142.md>)

Original publisher: [Read original article](<https://bytecodealliance.org/articles/wasmtime-gc>)

Author: Nick Fitzgerald

Published: 2026-07-20T00:00:00Z

Content type: release

Language: en

Sources: [Bytecode Alliance](<https://devfeed.tech/sources/bytecode-alliance.md>)

Topics: [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [wasm](<https://devfeed.tech/topics/wasm.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>)

Tags: [compilation](<https://devfeed.tech/tags/compilation.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [release](<https://devfeed.tech/tags/release.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

Wasmtime 47 enables the Wasm GC and exceptions proposals by default. The article explains how Wasm GC supports languages with object-and-reference data models by letting the runtime manage types and lifetimes, while the exceptions proposal provides more efficient exception handling for WebAssembly compilation targets.

### Source excerpt

The Wasm GC and exceptions proposals are both enabled by default in today's Wasmtime 47 release! We are excited to help bring more languages to WebAssembly and everywhere that Wasmtime runs. Getting to this point involved large Wasmtime changes and represents the culmination of years of engineering effort.

## ESPHome 2026.7.0: Native toolchains by default

DevFeed: [ESPHome 2026.7.0: Native toolchains by default](<https://devfeed.tech/articles/esphome-2026-7-0-native-toolchains-by-default-16712.md>)

Original publisher: [Read original article](<https://esphome.io/blog/2026/07/15/esphome-2026-7/>)

Author: Jesse Hills

Published: 2026-07-15T00:00:00Z

Content type: release

Language: en

Sources: [ESPHome - Smart Home Made Simple - Blog](<https://devfeed.tech/sources/esphome-smart-home-made-simple-blog.md>)

Topics: [esphome](<https://devfeed.tech/topics/esphome.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [ESP32](<https://devfeed.tech/topics/esp32.md>), [Modbus](<https://devfeed.tech/topics/modbus.md>), [Security](<https://devfeed.tech/topics/security.md>), [ESP-IDF](<https://devfeed.tech/topics/esp-idf.md>), [SDK](<https://devfeed.tech/topics/sdk.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [esp-idf](<https://devfeed.tech/tags/esp-idf.md>), [esp32](<https://devfeed.tech/tags/esp32.md>), [esphome](<https://devfeed.tech/tags/esphome.md>), [modbus](<https://devfeed.tech/tags/modbus.md>), [native](<https://devfeed.tech/tags/native.md>), [release](<https://devfeed.tech/tags/release.md>), [releases](<https://devfeed.tech/tags/releases.md>), [security](<https://devfeed.tech/tags/security.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>)

### AI overview

ESPHome 2026.7.0 makes native ESP32 and nRF52 toolchains the default, adds security infrastructure including NVS encryption and OTA downgrade protection, and introduces a transport-agnostic provisioning component. The release also overhauls Modbus and includes performance, memory, LVGL, Ethernet, ESP-NOW, Zigbee, and component updates.

### Source excerpt

ESPHome 2026.7.0 makes native toolchains the default on ESP32 and nRF52, adds EN18031 security groundwork, and overhauls Modbus.

## How Gradle Is Javamaxxing

DevFeed: [How Gradle Is Javamaxxing](<https://devfeed.tech/articles/how-gradle-is-javamaxxing-24628.md>)

Original publisher: [Read original article](<https://blog.gradle.org/gradle-is-javamaxxing>)

Author: Laura Kassovic

Published: 2026-05-28T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [garbage-collectors](<https://devfeed.tech/tags/garbage-collectors.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [java-8](<https://devfeed.tech/tags/java-8.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

Gradle aggressively adopts new JDK releases because newer JVMs can improve build speed, memory use, startup behavior, and maintainability. JVM toolchains allow Gradle to run on JDK 26 while compiling and testing projects for older Java versions, including producing Java 8-compatible bytecode.

### Source excerpt

Some people optimize one part of their lives to the absolute limit, then past it. They call it "-maxxing." Houseplantmaxxing. Sleepmaxxing. Tokenmaxxing. The Gradle Build Tool is Javamaxxing. TL;DR Breathe easy knowing you can run modern Gradle on JDK 26 while still shipping Java 8-compatible artifacts: Gradle aggressively adopts new JDKs because newer JVMs make builds faster, leaner, and easier to maintain. Upgrading the JDK that runs Gradle is often the easiest performance win. JVM toolchains fully separate the JVM running Gradle, the JVM compiling your code, and the JVM running your tests. NOT TL;DR We aggressively adopt new JDK releases as soon as we responsibly can. Not because it's trendy. Because newer JDKs make Gradle faster, leaner, and easier to maintain. Every OpenJDK release ships improvements to the JVM; garbage collectors, compiler infrastructure, startup behavior, memory layout, and runtime APIs. As a high-performance JVM build tool, Gradle benefits directly from all of it. The question people immediately ask is: Does this mean my project also has to run on the newest JDK? No. That coupling effectively disappeared once Gradle introduced JVM toolchains. With toolchains, the JVM that runs Gradle is completely separate from the JVM that compiles, tests, and executes your code. You can run Gradle on JDK 26 today and still produce Java 8 bytecode. What Is the Current State of Gradle and Java? We add daemon support for every new JDK as soon as the ecosystem permits: Java 24 in Gradle 8.14.0, Java 25 in 9.1.0 (released two days after JDK 25 GA), Java 26 in 9.4.0. The full mapping is in the Compatibility Matrix. We then bump the minimum JVM required to execute Gradle as users move. Gradle 9.0.0, released on July 31, 2025, raised the minimum JVM required to run the Gradle daemon to Java 17. That was the first daemon JVM floor increase since Gradle 5.0 made Java 8 the minimum back in 2018. The next major transition is already underway, Gradle 10.0.0 will likely

## Architectural Choices in China's Open-Source AI Ecosystem: Building Beyond DeepSeek

DevFeed: [Architectural Choices in China's Open-Source AI Ecosystem: Building Beyond DeepSeek](<https://devfeed.tech/articles/architectural-choices-in-china-s-open-source-ai-ecosystem-building-beyond-deepseek-7251.md>)

Original publisher: [Read original article](<https://huggingface.co/blog/huggingface/one-year-since-the-deepseek-moment-blog-2>)

Author: Adina Yakefu; Irene Solaiman

Published: 2026-01-27T15:01:45Z

Content type: article

Language: en

Sources: [Hugging Face - Blog](<https://devfeed.tech/sources/hugging-face-blog.md>)

Topics: [Open Source](<https://devfeed.tech/topics/open-source.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Mixture of Experts (MoE)](<https://devfeed.tech/topics/mixture-of-experts-moe.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>), [multimodal](<https://devfeed.tech/topics/multimodal.md>), [Open Source Models & Datasets](<https://devfeed.tech/topics/open-source-models-datasets.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [model-deployment](<https://devfeed.tech/topics/model-deployment.md>), [datasets](<https://devfeed.tech/topics/datasets.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [stable-diffusion](<https://devfeed.tech/topics/stable-diffusion.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [china](<https://devfeed.tech/tags/china.md>), [compute](<https://devfeed.tech/tags/compute.md>), [datasets](<https://devfeed.tech/tags/datasets.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [evaluation](<https://devfeed.tech/tags/evaluation.md>), [mixture-of-experts-moe](<https://devfeed.tech/tags/mixture-of-experts-moe.md>), [multimodal](<https://devfeed.tech/tags/multimodal.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [performance](<https://devfeed.tech/tags/performance.md>), [text-to-image](<https://devfeed.tech/tags/text-to-image.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>)

### AI overview

This second article in a three-part series examines architectural and hardware choices in China's open-source AI ecosystem after the DeepSeek Moment. It explains why Mixture-of-Experts architectures became widespread, emphasizing flexible compute allocation, sustainable cost-performance balance, deployment across varied hardware, and expansion into multimodal models, agents, datasets, evaluation, and toolchains.

### Source excerpt

This is the second blog in a three-part series on China's open source community's historical advancements since January 2025's "DeepSeek Moment." The first blog is available here, and the third blog is available here. In this second piece we turn our focus from models to the architectural and hardware choices Chinese companies have made as openness becomes the norm.

## Engineers Want to Build, Not Maintain: Key Findings From Our 2026 Engineering Reality Report

DevFeed: [Engineers Want to Build, Not Maintain: Key Findings From Our 2026 Engineering Reality Report](<https://devfeed.tech/articles/engineers-want-to-build-not-maintain-key-findings-from-our-2026-engineering-reality-report-13029.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/engineers-want-to-build-not-maintain-key-findings-from-our-2026-engineering-reality-report>)

Published: 2025-10-08T00:00:00Z

Content type: article

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [code productivity](<https://devfeed.tech/topics/code-productivity.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Security](<https://devfeed.tech/topics/security.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [ai](<https://devfeed.tech/tags/ai.md>), [automation](<https://devfeed.tech/tags/automation.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-containers-report](<https://devfeed.tech/tags/chainguard-containers-report.md>), [chainguard-report](<https://devfeed.tech/tags/chainguard-report.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [developer-experience-report](<https://devfeed.tech/tags/developer-experience-report.md>), [engineering-reality](<https://devfeed.tech/tags/engineering-reality.md>), [engineering-reality-2025](<https://devfeed.tech/tags/engineering-reality-2025.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [report](<https://devfeed.tech/tags/report.md>), [secure-software](<https://devfeed.tech/tags/secure-software.md>), [security](<https://devfeed.tech/tags/security.md>), [software-engineer](<https://devfeed.tech/tags/software-engineer.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>)

### AI overview

Chainguard's 2026 Engineering Reality Report, based on a survey of 1,200 engineers and technology leaders, examines the modern developer experience. It finds that automation and AI are reducing repetitive work, while technical debt, maintenance, fragmented tooling, workflow disruption, burnout, and limited trust continue to constrain productivity. Engineers consistently want more time to build, and the article connects secure, integrated tools with innovation and business growth.

### Source excerpt

Chainguard surveyed 1,200 engineers and technology leaders to better understand the state of the developer experience today and where teams can improve.

## Malicious MCP Server on npm postmark-mcp Harvests Emails

DevFeed: [Malicious MCP Server on npm postmark-mcp Harvests Emails](<https://devfeed.tech/articles/malicious-mcp-server-on-npm-postmark-mcp-harvests-emails-8009.md>)

Original publisher: [Read original article](<https://snyk.io/blog/malicious-mcp-server-on-npm-postmark-mcp-harvests-emails/>)

Author: Liran Tal

Published: 2025-09-25T04:00:00Z

Content type: news

Language: en

Sources: [Blog RSS Feed | Snyk](<https://devfeed.tech/sources/blog-rss-feed-snyk.md>)

Topics: [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [supply-chain-security](<https://devfeed.tech/topics/supply-chain-security.md>), [npm](<https://devfeed.tech/topics/npm.md>), [incident](<https://devfeed.tech/topics/incident.md>), [Security](<https://devfeed.tech/topics/security.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [awareness](<https://devfeed.tech/tags/awareness.md>), [backdoor](<https://devfeed.tech/tags/backdoor.md>), [blog](<https://devfeed.tech/tags/blog.md>), [devrel](<https://devfeed.tech/tags/devrel.md>), [incident](<https://devfeed.tech/tags/incident.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [npm](<https://devfeed.tech/tags/npm.md>), [open-source-security](<https://devfeed.tech/tags/open-source-security.md>), [pii](<https://devfeed.tech/tags/pii.md>), [secrets](<https://devfeed.tech/tags/secrets.md>), [security](<https://devfeed.tech/tags/security.md>), [snyk](<https://devfeed.tech/tags/snyk.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>), [supply-chain-security](<https://devfeed.tech/tags/supply-chain-security.md>), [tokens](<https://devfeed.tech/tags/tokens.md>), [vulnerability-insights](<https://devfeed.tech/tags/vulnerability-insights.md>)

### AI overview

This security article reports that the npm package postmark-mcp, an MCP Server for sending email through Postmark, was modified in September 2025 to secretly add a BCC forwarding emails to an external domain. It outlines the incident timeline, the email data and credentials potentially at risk, and mitigation steps including uninstalling the package, rotating credentials, reviewing email logs, and scanning with Snyk's MCP-Scan.

### Source excerpt

Urgent security alert: On September 25, 2025, the npm package 'postmark-mcp' was compromised, secretly exfiltrating email contents. Learn about the incident timeline, impact, and immediate mitigation steps, including uninstalling, rotating credentials, and scanning with Snyk's MCP-Scan.

## Demonstrably Secure Software Supply Chains with Nix

DevFeed: [Demonstrably Secure Software Supply Chains with Nix](<https://devfeed.tech/articles/demonstrably-secure-software-supply-chains-with-nix-32452.md>)

Original publisher: [Read original article](<https://nixcademy.com/posts/secure-supply-chain-with-nix/>)

Author: Jacek Galowicz

Published: 2025-05-12T00:00:00Z

Content type: article

Language: en

Sources: [Nixcademy Blog](<https://devfeed.tech/sources/nixcademy-blog.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [supply-chain-security](<https://devfeed.tech/topics/supply-chain-security.md>), [open-source-security](<https://devfeed.tech/topics/open-source-security.md>), [integrity](<https://devfeed.tech/topics/integrity.md>), [Security](<https://devfeed.tech/topics/security.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [audit](<https://devfeed.tech/topics/audit.md>)

Tags: [audit](<https://devfeed.tech/tags/audit.md>), [audits](<https://devfeed.tech/tags/audits.md>), [builds](<https://devfeed.tech/tags/builds.md>), [capabilities](<https://devfeed.tech/tags/capabilities.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [compliance](<https://devfeed.tech/tags/compliance.md>), [environments](<https://devfeed.tech/tags/environments.md>), [government](<https://devfeed.tech/tags/government.md>), [integrity](<https://devfeed.tech/tags/integrity.md>), [local](<https://devfeed.tech/tags/local.md>), [offline](<https://devfeed.tech/tags/offline.md>), [organizations](<https://devfeed.tech/tags/organizations.md>), [rebuilds](<https://devfeed.tech/tags/rebuilds.md>), [secure-software](<https://devfeed.tech/tags/secure-software.md>), [security](<https://devfeed.tech/tags/security.md>), [software](<https://devfeed.tech/tags/software.md>), [software-supply-chain](<https://devfeed.tech/tags/software-supply-chain.md>), [software-supply-chain-security](<https://devfeed.tech/tags/software-supply-chain-security.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>), [supply-chain-security](<https://devfeed.tech/tags/supply-chain-security.md>)

### AI overview

This article explains how Nix can support verifiable software supply chain integrity. It describes tracing sources and toolchains, enabling hermetic offline rebuilds, and exporting release sources for audits to help meet regulatory requirements.

### Source excerpt

Discover how Nix can revolutionize your software supply chain security, enabling verifiable integrity and offline rebuilds from source.

## Finding unused targets with bazel

DevFeed: [Finding unused targets with bazel](<https://devfeed.tech/articles/finding-unused-targets-with-bazel-25411.md>)

Original publisher: [Read original article](<https://smileykeith.com/2025/03/24/unused-bazel-targets/>)

Author: Keith Smiley

Published: 2025-03-24T18:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Graphs](<https://devfeed.tech/topics/graphs.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Code](<https://devfeed.tech/topics/code.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>)

Tags: [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [graph](<https://devfeed.tech/tags/graph.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [use-cases](<https://devfeed.tech/tags/use-cases.md>)

### AI overview

This article explains how to use bazel query to inspect a build graph and identify unused targets. It presents a query that subtracts dependencies of top-level targets from all first-party targets, then discusses handling edge cases with kind filters and special tags such as allow-unused. It also describes tagging toolchains and other targets whose dependencies should be treated as used.

### Source excerpt

Once you've fully migrated a codebase to bazel, one of the many advantages is that you can easily inspect your build graph using bazel query. One of the many things you can do with queries is write scripts to enforce coding standards, or in today's example, find unused targets that can lead to discovering unused code. The simplest version of this query starts like this: let all_targets = //... in let top_level_targets = tests($all_targets) union kind("(.*_binary) rule", $all_targets) in $all_targets - deps($top_level_targets) This initial version discovers all your first party targets, and then subtracts the dependencies of all "top level" targets, so that any remaining targets are considered unused. The idea of "top level" targets is better defined as: anything that you consider to be important enough that its dependencies are used. Depending on your codebase you might want to exclude test targets from this so that targets only in the dependencies of test targets are diagnosed as unused (this won't work if you have intentional testonly dependencies, although you could special case those as shown below). Once you have this initial query, you can start iterating in order to handle in edge cases. For example it's likely that you have some targets that aren't binaries or tests, but are considered used. There are 2 approaches I would recommend to handle this. First you can continue to build out the kind filter: kind("(.*_binary|platform|test_suite) rule", $all_targets) The downside with this approach is it can get unwieldy quickly. I like adding rules here that have many uses, but for other one off cases another approach you can use is to expand the query to look for special tags: let all_targets = //... in let top_level_targets = tests($all_targets) union kind("(.*_binary|platform|test_suite) rule", $all_targets) in let allowed_unused = attr(tags, allow-unused, $all_targets) in $all_targets - deps($top_level_targets) - $allowed_unused Then you can add tags = ["allow-un

## From XAMPP to Ephemeral Postgres: Where "Works on My Machine" Has Led Us

DevFeed: [From XAMPP to Ephemeral Postgres: Where "Works on My Machine" Has Led Us](<https://devfeed.tech/articles/from-xampp-to-ephemeral-postgres-where-works-on-my-machine-has-led-us-5293.md>)

Original publisher: [Read original article](<https://neon.com/blog/from-xampp-to-ephemeral-postgres>)

Author: Andrew Tate

Published: 2025-02-27T00:51:30Z

Content type: article

Language: en

Sources: [Blog -- Neon Docs](<https://devfeed.tech/sources/blog-neon-docs.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [XAMPP](<https://devfeed.tech/topics/xampp.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [PHP](<https://devfeed.tech/topics/php.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Package Management](<https://devfeed.tech/topics/package-management.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [coding](<https://devfeed.tech/tags/coding.md>), [community](<https://devfeed.tech/tags/community.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [database](<https://devfeed.tech/tags/database.md>), [databases](<https://devfeed.tech/tags/databases.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [environment-variables](<https://devfeed.tech/tags/environment-variables.md>), [installations](<https://devfeed.tech/tags/installations.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [local](<https://devfeed.tech/tags/local.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [package-management](<https://devfeed.tech/tags/package-management.md>), [php](<https://devfeed.tech/tags/php.md>), [servers](<https://devfeed.tech/tags/servers.md>), [source](<https://devfeed.tech/tags/source.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This article looks back at local web development in the 1990s, when developers manually installed and configured Apache, PHP, and databases such as MySQL and Postgres. It describes environment drift, dependency and version conflicts, difficult database setup, manual configuration, and the technical understanding that these constraints encouraged.

### Source excerpt

"It works on my machine" is now a trope--a horror story to tell young developers (or AI coding models) about what it was like to build without today's stack. Like all clichés, it was once true. Hodgepodge local installs, no containers, and massive environment drift were challenges...

## Gradle toolchains are rarely a good idea

DevFeed: [Gradle toolchains are rarely a good idea](<https://devfeed.tech/articles/gradle-toolchains-are-rarely-a-good-idea-20938.md>)

Original publisher: [Read original article](<https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/>)

Published: 2024-03-21T00:00:00Z

Content type: opinion

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Java](<https://devfeed.tech/topics/java.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [containers](<https://devfeed.tech/tags/containers.md>), [go](<https://devfeed.tech/tags/go.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>)

### AI overview

The article argues that Gradle Java toolchains are often counterproductive. Using an old JDK can produce outdated, non-searchable Javadoc, ignore container resource limits, and increase the risk of compiler and JVM bugs. The author recommends building with a modern JDK while controlling the target language level through compiler configuration, and keeping installed JDKs up to date.

### Source excerpt

The last post featured some Kotlin code inadvertently targeting a new Java API when the build JDK was bumped to 21. This can be solved with the -Xjdk-release Kotlin compiler flag, or by using Gradle toolchains to build with an old JDK. If you read the Gradle docs... Using Java toolchains is a preferred way to target a language version ...or the Android docs... We recommend that you always specify the Java toolchain ...you wouldn't be blamed for thinking Java toolchains are the way to go! However, Java toolchains are rarely a good idea. Let's look at why. Bad docs Last week I released a new version of Retrofit which uses a Java toolchain to target Java 8. Its use of toolchains was contributed a while ago, and I simply forgot to remove it. As a consequence, its Javadoc was built using JDK 8 and is thus not searchable. Searchable Javadoc came in JEP 225 with JDK 9. The next release of Retrofit will be made without a toolchain and with the latest JDK. Its docs will have all the Javadoc advancements from the last 10 years including search and better modern HTML/CSS. Resource ignorance Old JVMs were somewhat notorious for being ignorant to resource limitations imposed by the system. The rise of containers, especially on CI systems, means your process resource limits are different from those of the host OS. JDK 10 kicked things into high gear with cgroups support and JDK 15 extended that to cgroups2. Both of those changes were backported to the 8 and 11 branches, but since Gradle toolchains will use an already-installed JDK if available you have to have kept your JDK 8 and/or JDK 11 up-to-date. Have you? Not to stray too far off-topic, but if you installed it with SDKMAN! or similar JDK management tools there's a good chance it's wildly out of date. I keep all my JDKs up-to-date by installing them through a Homebrew tap which itself updates automatically using the Azul Zulu API. As long as I do a brew upgrade every so often, each major JDK release that I have installed will be upd

## Building with nightly Swift toolchains on macOS

DevFeed: [Building with nightly Swift toolchains on macOS](<https://devfeed.tech/articles/building-with-nightly-swift-toolchains-on-macos-21725.md>)

Original publisher: [Read original article](<https://oleb.net/2024/swift-toolchains/>)

Author: Ole Begemann

Published: 2024-03-05T18:54:44Z

Content type: tutorial

Language: en

Sources: [Ole Begemann](<https://devfeed.tech/sources/ole-begemann.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Package manager](<https://devfeed.tech/topics/package-manager.md>)

Tags: [command-line](<https://devfeed.tech/tags/command-line.md>), [macos](<https://devfeed.tech/tags/macos.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

A practical guide to installing and selecting nightly Swift compiler toolchains on macOS. It covers using custom toolchains in Xcode and from the command line, including the TOOLCHAINS environment variable and bundle IDs. The article also notes limitations such as unsupported playgrounds, built-in Swift Package Manager behavior, and App Store submission restrictions.

### Source excerpt

The Swift website provides nightly builds of the Swift compiler (called toolchains) for download. Building with a nightly compiler can be useful if you want to check if a bug has already been fixed on main, or if you want to experiment with upcoming language features such as Embedded Swift, as I've been doing lately. A toolchain is distributed as a .pkg installer that installs itself into /Library/Developer/Toolchains (or the equivalent path in your home directory). After installation, you have several options to select the toolchain you want to build with: In Xcode In Xcode, select the toolchain from the main menu (Xcode > Toolchains), then build and/or run your code normally. Not all Xcode features work with a custom toolchain. For example, playgrounds don't work, and Xcode will always use its built-in copy of the Swift Package Manager, so you won't be able to use unreleased SwiftPM features in this way. Also, Apple won't accept apps built with a non-standard toolchain for submission to the App Store. On the command line When building on the command line there are multiple options, depending on your preferences and what tool you want to use. The TOOLCHAINS environment variable All of the various Swift build tools respect the TOOLCHAINS environment variable. This should be set to the desired toolchain's bundle ID, which you can find in the Info.plist file in the toolchain's directory. Example (I'm using a nightly toolchain from 2024-03-03 here): # My normal Swift version is 5.10 $ swift --version swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) # Make sure xcode-select points to Xcode, not to /Library/Developer/CommandLineTools # The Command Line Tools will ignore the TOOLCHAINS variable. $ xcode-select --print-path /Applications/Xcode.app/Contents/Developer # The nightly toolchain is 6.0-dev $ export TOOLCHAINS=org.swift.59202403031a $ swift --version Apple Swift version 6.0-dev (LLVM 0c7823cab15dec9, Swift 0cc0590933

## Dev Mode: Building a design tool that works harder for developers

DevFeed: [Dev Mode: Building a design tool that works harder for developers](<https://devfeed.tech/articles/dev-mode-building-a-design-tool-that-works-harder-for-developers-9804.md>)

Original publisher: [Read original article](<https://www.figma.com/blog/how-we-built-dev-mode/>)

Author: Alia Fite

Published: 2023-11-22T00:00:00Z

Content type: article

Language: en

Sources: [Figma Blog](<https://devfeed.tech/sources/figma-blog.md>)

Topics: [Figma](<https://devfeed.tech/topics/figma.md>), [developer tooling](<https://devfeed.tech/topics/developer-tooling.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [React](<https://devfeed.tech/topics/react.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [developer-tooling](<https://devfeed.tech/tags/developer-tooling.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [figma](<https://devfeed.tech/tags/figma.md>), [product-design](<https://devfeed.tech/tags/product-design.md>), [react](<https://devfeed.tech/tags/react.md>), [tool](<https://devfeed.tech/tags/tool.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

Figma describes how its Dev Mode team built a developer-focused experience within the design tool. The team moved away from a code-generation-first approach, studied developer workflows and toolchains, and accelerated development through its 2021 acquisition of Visly, whose team had built a tool for developing UI components in React.

### Source excerpt

How do you create a home for developers in a design tool? The Dev Mode team shares their early pivot away from a codegen-first approach, the acquisition that accelerated their efforts, and what it means to break down the handoff wall.

## Announcing Lit 3.0 Pre-releases

DevFeed: [Announcing Lit 3.0 Pre-releases](<https://devfeed.tech/articles/announcing-lit-3-0-pre-releases-3519.md>)

Original publisher: [Read original article](<https://lit.dev/blog/2023-05-15-lit-3.0-prerelease/>)

Author: Justin Fagnani

Published: 2023-05-15T00:00:00Z

Content type: release

Language: en

Sources: [Lit Blog](<https://devfeed.tech/sources/lit-blog.md>)

Topics: [releases](<https://devfeed.tech/topics/releases.md>), [Web Components](<https://devfeed.tech/topics/web-components.md>), [Web](<https://devfeed.tech/topics/web.md>), [npm](<https://devfeed.tech/topics/npm.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Server-side rendering](<https://devfeed.tech/topics/server-side-rendering.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [npm](<https://devfeed.tech/tags/npm.md>), [packages](<https://devfeed.tech/tags/packages.md>), [pre-release](<https://devfeed.tech/tags/pre-release.md>), [release](<https://devfeed.tech/tags/release.md>), [releases](<https://devfeed.tech/tags/releases.md>), [ssr](<https://devfeed.tech/tags/ssr.md>), [testing](<https://devfeed.tech/tags/testing.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

The Lit team announces the first Lit 3.0 pre-releases. This major version introduces a small set of breaking changes focused on browser support, deprecated APIs, package publishing, and SSR hydration modules, while adding no new features. Lit 2.x users without deprecation warnings should generally have a seamless upgrade, although some may need newer tooling because Lit's npm modules are now published as ES2021.

### Source excerpt

Get an early look at the upcoming Lit 3.0 release.

## Build on latest Java, test through lowest Java

DevFeed: [Build on latest Java, test through lowest Java](<https://devfeed.tech/articles/build-on-latest-java-test-through-lowest-java-20920.md>)

Original publisher: [Read original article](<https://jakewharton.com/build-on-latest-java-test-through-lowest-java/>)

Published: 2022-05-17T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [ci](<https://devfeed.tech/topics/ci.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [testing](<https://devfeed.tech/tags/testing.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

This article explains how to use Gradle toolchains to compile a Java project once with the latest Java version while running tests across every supported version down to the lowest. The approach reduces CI workload and is especially useful for projects whose behavior or API usage varies by Java version.

### Source excerpt

In the past, when a new version of Java was released, I would add that version to our open source project's CI builds. strategy: matrix: java-version: - 8 - 9 ⋮ - 17 + - 18 This ensures that each project can be built and its tests pass on every major version. But this makes no sense! No user is building these projects on different versions. No user is building these projects at all. Consumers are using the pre-built .jar which we ship to Maven Central built on a single version. Testing on every version, however, is something extremely valuable. Thankfully, Gradle toolchains let us retain this while still only building once. First, CI only has to build on a single version. We choose the latest because Java has excellent cross-compilation capabilities, and we want to be using the latest tools. - uses: actions/setup-java@v2 with: distribution: 'zulu' - java-version: ${{ matrix.java-version }} + java-version: 18 Second, unchanged from before, we still target whichever Java version is the lowest supported through either the --release flag or sourceCompatibility/targetCompatibility per the Gradle docs. And finally, we set up tests to run on every supported version. // Normal test task runs on compile JDK. (8..17).each { majorVersion -> def jdkTest = tasks.register("testJdk$majorVersion", Test) { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(majorVersion) } description = "Runs the test suite on JDK $majorVersion" group = LifecycleBasePlugin.VERIFICATION_GROUP // Copy inputs from normal Test task. def testTask = tasks.getByName("test") classpath = testTask.classpath testClassesDirs = testTask.testClassesDirs } tasks.named("check").configure { dependsOn(jdkTest) } } This setup reduces CI burden since we only compile the main and test sources once but execute the tests on every supported version from latest to lowest. Verification tasks ------------------ check - Runs all checks. test - Runs the test suite. testJdk10 - Runs the test sui

## How to Integrate Just-In-Time Access Requests into Your DevOps Workflow

DevFeed: [How to Integrate Just-In-Time Access Requests into Your DevOps Workflow](<https://devfeed.tech/articles/how-to-integrate-just-in-time-access-requests-into-your-devops-workflow-29725.md>)

Original publisher: [Read original article](<https://goteleport.com/blog/just-in-time-access-request/>)

Author: info@goteleport.com (Steven Martin)

Published: 2021-11-11T00:00:00Z

Content type: tutorial

Language: en

Sources: [Teleport](<https://devfeed.tech/sources/teleport.md>)

Topics: [DevOps](<https://devfeed.tech/topics/devops.md>), [Zero Trust](<https://devfeed.tech/topics/zero-trust.md>), [certificates](<https://devfeed.tech/topics/certificates.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [Slack](<https://devfeed.tech/topics/slack.md>), [email](<https://devfeed.tech/topics/email.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>), [Amazon EC2](<https://devfeed.tech/topics/amazon-ec2.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [aws](<https://devfeed.tech/tags/aws.md>), [containers](<https://devfeed.tech/tags/containers.md>), [devops](<https://devfeed.tech/tags/devops.md>), [email](<https://devfeed.tech/tags/email.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implement](<https://devfeed.tech/tags/implement.md>), [jira](<https://devfeed.tech/tags/jira.md>), [least-privilege](<https://devfeed.tech/tags/least-privilege.md>), [on-call](<https://devfeed.tech/tags/on-call.md>), [organization](<https://devfeed.tech/tags/organization.md>), [pagerduty](<https://devfeed.tech/tags/pagerduty.md>), [request](<https://devfeed.tech/tags/request.md>), [server](<https://devfeed.tech/tags/server.md>), [speed](<https://devfeed.tech/tags/speed.md>), [ssh](<https://devfeed.tech/tags/ssh.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [workflow](<https://devfeed.tech/tags/workflow.md>), [zero-trust](<https://devfeed.tech/tags/zero-trust.md>)

### AI overview

This tutorial explains how Teleport Access Requests provide temporary elevated infrastructure access for DevOps workflows. It covers approval through command-line, web console, and plugins such as Slack, PagerDuty, Jira, Email, and GitLab, with short-lived certificates reverting to default roles after the access period.

### Source excerpt

Just-in-time access requests enable DevOps teams to implement least privilege without introducing roadblocks to productivity. This post shows you how to get started.

## Introducing Java toolchains

DevFeed: [Introducing Java toolchains](<https://devfeed.tech/articles/introducing-java-toolchains-24661.md>)

Original publisher: [Read original article](<https://blog.gradle.org/java-toolchains>)

Author: Louis Jacomet

Published: 2020-10-30T04:00:00Z

Content type: tutorial

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [install](<https://devfeed.tech/tags/install.md>), [installation](<https://devfeed.tech/tags/installation.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [project](<https://devfeed.tech/tags/project.md>), [run](<https://devfeed.tech/tags/run.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>)

### AI overview

This article introduces Java toolchain support in Gradle 6.7. It explains how to declare a project's required Java version in one place so Gradle can use that version for compilation, testing, documentation, and application execution, while allowing Gradle itself to run with another installed Java version. Gradle can detect suitable JDK installations and download a required JDK when necessary.

### Source excerpt

Building a Java project and running Gradle both require the installation of a JDK. Most Gradle users conveniently use the Java installation that is running Gradle to build and test their application. While this is acceptable in simple cases, there are a number of issues with this approach. For example, if a build requires the same Java version to be used on all machines, each developer needs to know about that requirement and install that version manually. It has been possible to configure Gradle to build a project with a different Java version than the one used to run Gradle. However, it has required configuring each task like compilation, test, and javadoc separately. Gradle 6.7 introduces "Java toolchain support". In a nutshell, it allows you to run Gradle with whatever version of Java you have installed, while Gradle builds the project with the version of Java declared in a single place. Gradle will automatically configure the build, detect already installed JDKs and download the required JDK if it is not already installed. No more release or sourceCompatibility tweaks, no more wiki pages describing which JDK you should install for the build to work. The advantages are tremendous, let's see how to use this! Introducing Java toolchains support Java toolchains support enables build authors to declare which Java version their project requires for compiling, testing and running their code. Project wide configuration Let's start with what you, as a build author, need to do, at the minimum: plugins { id("java-library") // or id("application") } java { toolchain { languageVersion.set(JavaLanguageVersion.of(11)) } } And that's it! What do you get with the above in Gradle 6.7? You get: All Java compilation tasks will use Java 11 to build. That means code in the main and test source sets, but also Java code in any custom source set you add, will be built with the configured Java version. All tests tasks, including the default test task and any additional custom Test task,

## Cross-compiling with musl Toolchains

DevFeed: [Cross-compiling with musl Toolchains](<https://devfeed.tech/articles/cross-compiling-with-musl-toolchains-27450.md>)

Original publisher: [Read original article](<https://ariya.io/2020/06/cross-compiling-with-musl-toolchains/>)

Published: 2020-06-22T12:37:59Z

Content type: tutorial

Language: en

Sources: [Ariya Hidayat](<https://devfeed.tech/sources/ariya-hidayat.md>)

Topics: [Cross-Compilation](<https://devfeed.tech/topics/cross-compilation.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Zig](<https://devfeed.tech/topics/zig.md>), [C](<https://devfeed.tech/topics/c.md>), [qemu](<https://devfeed.tech/topics/qemu.md>), [ci](<https://devfeed.tech/topics/ci.md>), [make](<https://devfeed.tech/topics/make.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [cross-compilation](<https://devfeed.tech/tags/cross-compilation.md>), [docker](<https://devfeed.tech/tags/docker.md>), [linux](<https://devfeed.tech/tags/linux.md>), [make](<https://devfeed.tech/tags/make.md>), [mips](<https://devfeed.tech/tags/mips.md>), [qemu](<https://devfeed.tech/tags/qemu.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [windows](<https://devfeed.tech/tags/windows.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

A tutorial on using static musl-based toolchains to cross-compile command-line programs for multiple targets, including MIPS and Windows, from a Linux x86-64 host. It also covers testing non-native binaries with QEMU and migrating FastLZ continuous integration to musl.cc.

### Source excerpt

When working on command-line utilities which can be useful for various platforms, from Windows on x86 to Linux on MIPS, the existence of a cross-compilation is highly attractive. A number of different binaries can be constructed conveniently from a single, typically powerful host system.