CMake-based build system for node.js native modules

Overview

Node CMake

A CMake-based build system for Node.js native modules, for CMake >= v3.1.

Newly rewritten for 2.0!

New Features
  • Drop-in execution compatibility with the node-gyp binary
  • Standardization with the node-gyp output and format. Should work better with tools that expect node-gyp's behaviour
  • Simplified, portable and customizable configuration script
  • Better recovery from failed downloads and builds
  • Generalized support for Node.js variants. This supports additional variant types that are compatible with the Node.js release server structure (SHAs defined for all resources hosted on the download server, headers and .lib files located in standard locations).
Removed Features
  • find_package support. The module loading technique used in 1.0 was flawed for specific module structures and setup (deeply nested native dependencies). The new technique is to run ncmake update to copy the configuration script into your project. This means that projects will not stay in sync with updates automatically. Be sure to run ncmake update when updating node-cmake to a new version.
  • ncmake command line arguments. ncmake now follows and extends the node-gyp command line interface. Please update your build files to use the new syntax (ncmake --build => ncmake rebuild). For more info, see the manual.
  • Support for NW.js - The NW.js release server is not compliant to the Node.js release server structure. Workaround for the NW.js naming conventions have been included in the update, but the server SHA file does not include checksums for all resources, leaving no way to validate downloads. The SHASUMS256.txt file on the server needs to be updated to include these entries to be used with this tool.

Usage

To use this package, add the module node-cmake to your package.json as a development dependency:

npm install --save-dev node-cmake

Run ncmake update to copy the file NodeJS.cmake from this module into your project. Then add a CMakeLists.txt file to the root of your module that contains at least the following (<REPLACE> with your own definitions):

cmake_minimum_required(VERSION 3.1)

project(<NAME OF MODULE> VERSION 1.0.0)

include(NodeJS.cmake)
nodejs_init()

add_nodejs_module(${PROJECT_NAME} <SOURCE AND HEADER FILES GO HERE>)

This CMakeLists.txt file is the main build script for CMake, and replaces your existing binding.gyp file from node-gyp. It defines the build process for this project, including how to configure Node.js, and how to build your project components (modules, libraries, etc.)

The NodeJS.cmake file, included by relative path in this example, is a self-contained configuration tool for downloading the dependencies for building Node.js native modules, and configuring cmake to build them:

nodejs_init configures the version of Node.js to use for building. By default, this is the currently installed version of node on your platform. This function can take a number of advanced options (see Documentation). This function must be called before any other function provided by the script.

add_nodejs_module is a helper function for configuring CMake to build a node module based on the currently configured version of node. It takes the name of a target to create, along with a list of source files to build. All arguments after the target name are treated as sources.

CMake has extensive documentation online, which can be found here.

Building

node-cmake has been updated to provide a drop-in replacement for node-gyp's interface. To build your module, use the command ncmake rebuild, which cleans, configures and builds the module.

This can be integrated into npm via its "scripts" directive:

"scripts": {
    "install": "ncmake rebuild"
}

Running

node-cmake also provides a simple javascript module to simplify the finding and loading of the built native module in your own scripts. It exposes a single function similar to require with the same effects. Calling

require('node-cmake')('<NAME OF MODULE>')

will load and return the named native module by searching in standard build locations. A second boolean can be passed to this function to configure loading of debug builds by default (if available).

Example

An example project is provided in the example folder. Follow the directions in its README.md to build it correctly.

Documentation

Motivation

This tool was developed as a replacement for node-gyp, the current Node.js build system. Google has stopped working on its core, the gyp build tool, to focus on its replacement gn and the future of gyp is uncertain.

CMake also provides a number of benefits over gyp:

  • Does not depend on python
  • Extensive cross-platform utilities for finding and using other libraries and packages (the find_* family of commands, and the package system).
  • Native IDE support (CLion, KDevelop), and good support for platform IDEs (Visual Studio, Xcode, Eclipse)
  • Easy integration with other projects and build systems
  • Cross-compilation via toolchains
Comments
  • targetname_BUILD macro

    targetname_BUILD macro

    https://github.com/cjntaylor/node-cmake/blob/4ae8a5ca32f672aeb6259f52d3881780a95aea8b/NodeJS.cmake#L573 defines a targetname_BUILD macro, and the comment states that it's for symbol visibility on Windows. Can yo please explain what it does?

    Defining a macro like this makes it impossible to use target names that contain dashes, since macros can't contain dashes.

    enhancement 
    opened by kkaefer 7
  • Unable to extract header archive checksum

    Unable to extract header archive checksum

    node-cmake version: 2.1.1 Node versions: v6.9.4, v4.7.2 OS: Ubuntu 12.04.5 LTS

    Output: (for full output, see Travis CI builds below)

    -- Enabling assertions
    -- Downloading: https://nodejs.org/download/release/v6.9.4/SHASUMS256.txt
    CMake Error at cmake/NodeJS.cmake:280 (message):
      Unable to extract header archive checksum
    Call Stack (most recent call first):
      CMakeLists.txt:93 (nodejs_init)
    

    Travis CI Builds:

    • https://travis-ci.org/Project-OSRM/node-osrm/jobs/194239977
    • https://travis-ci.org/Project-OSRM/node-osrm/jobs/194239975
    opened by jhermsmeier 7
  • Work with electron beta version like v2.0.0-beta.1

    Work with electron beta version like v2.0.0-beta.1

    The version string v2.0.0-beta.1 breaks the HEADERS_MATCH regular expression:

    set(HEADERS_MATCH "^([A-Fa-f0-9]+)[ \t]+([^-]+)-(headers|v?[0-9.]+)-(headers|v?[0-9.]+)([.]tar[.]gz)$")
    

    The content of the SHASUMS.txt

    dc6b365c1d2df25205c878e4ecd3e3106cedf2a1  node-v2.0.0-beta.1.tar.gz
    337cdeea1c4dadc4c20d688c464bc6223fb9f342  iojs-v2.0.0-beta.1.tar.gz
    36c4707de00b044e309c10a67721206a45d632dd  iojs-v2.0.0-beta.1-headers.tar.gz
    44adb76edc7eb84f52eab0fb29a73dcc7183bec5  node.lib
    555d30c34f09ba2c656745cd4940c24eace0db58  x64/node.lib
    44adb76edc7eb84f52eab0fb29a73dcc7183bec5  win-x86/iojs.lib
    555d30c34f09ba2c656745cd4940c24eace0db58  win-x64/iojs.lib
    
    opened by toddwong 6
  • Use keyword signatures

    Use keyword signatures

    The previous version 1.x used keyword signatures for targets. I'm trying to update my project (https://github.com/mapbox/mapbox-gl-native) to 2.x, but am getting this error:

    CMake Error at cmake/node.cmake:35 (target_link_libraries): The plain signature for target_link_libraries has already been used with the target "mbgl-node". All uses of target_link_libraries with a target must be either all-keyword or all-plain.

    The uses of the plain signature are here:

    • cmake/NodeJS.cmake:583 (target_link_libraries)

    Why was the signature changed back to the (old?) plain syntax?

    question wontfix 
    opened by kkaefer 6
  • Configuring a cmake project with different parameters has no effect

    Configuring a cmake project with different parameters has no effect

    This might be my lack of cmake experience, but I believe cache values are not being overridden in the case of defaults vs CLI cmake values.

    If you have a CMakeLists.txt like:

    nodejs_init()
    
    # For the sake of debugging.
    message(STATUS "NODEJS_BINARY: ${NODEJS_BINARY}")
    message(STATUS "NODEJS_VERSION: ${NODEJS_VERSION}")
    message(STATUS "NODEJS_SOURCES: ${NODEJS_SOURCES}")
    message(STATUS "NODEJS_INCLUDE_DIRS: ${NODEJS_INCLUDE_DIRS}")
    message(STATUS "NODEJS_LIBRARIES: ${NODEJS_LIBRARIES}")
    message(STATUS "NODEJS_LINK_FLAGS: ${NODEJS_LINK_FLAGS}")
    message(STATUS "NODEJS_DEFINITIONS: ${NODEJS_DEFINITIONS}")
    

    And you run it:

    $ cmake .. -GXcode
    
    ...
    
    -- NodeJS: Using node, version v7.6.0
    -- NODEJS_BINARY: /Users/XXXXX/nvm/versions/node/v7.6.0/bin/node
    -- NODEJS_VERSION: v7.6.0
    -- NODEJS_SOURCES:
    -- NODEJS_INCLUDE_DIRS: /Users/XXXXX/dev/XXPROJECTXX/build/node/v7.6.0/include
    -- NODEJS_LIBRARIES:
    -- NODEJS_LINK_FLAGS: -undefined dynamic_lookup
    -- NODEJS_DEFINITIONS: _LARGEFILE_SOURCE;_FILE_OFFSET_BITS=64;_DARWIN_USE_64_BIT_INODE=1
    

    Looks good. If you then decide to build for electron:

    $ cmake .. -GXcode -DCODE_COVERAGE=0 -DNODEJS_NAME=iojs -DNODEJS_VERSION=v1.6.4 -DNODEJS_URL=https://atom.io/download/atom-shell
    
    ...
    
    -- NodeJS: Using iojs, version v1.6.4
    -- NODEJS_BINARY: /Users/XXXXX/nvm/versions/node/v7.6.0/bin/node
    -- NODEJS_VERSION: v1.6.4
    -- NODEJS_SOURCES:
    -- NODEJS_INCLUDE_DIRS: /Users/XXXXX/dev/XXPROJECTXX/build/iojs/v1.6.4/include
    -- NODEJS_LIBRARIES:
    -- NODEJS_LINK_FLAGS: -undefined dynamic_lookup
    -- NODEJS_DEFINITIONS: _LARGEFILE_SOURCE;_FILE_OFFSET_BITS=64;_DARWIN_USE_64_BIT_INODE=1
    

    Notice how NODEJS_BINARY is pointing to the old value?

    And finally, if you then later build for just node again, you'll still have the same Electron values:

    $ cmake .. -GXcode
    
    ...
    
    -- NodeJS: Using iojs, version v1.6.4
    -- NODEJS_BINARY: /Users/XXXXX/nvm/versions/node/v7.6.0/bin/node
    -- NODEJS_VERSION: v1.6.4
    -- NODEJS_SOURCES:
    -- NODEJS_INCLUDE_DIRS: /Users/XXXXX/dev/XXPROJECTXX/build/iojs/v1.6.4/include
    -- NODEJS_LIBRARIES:
    -- NODEJS_LINK_FLAGS: -undefined dynamic_lookup
    -- NODEJS_DEFINITIONS: _LARGEFILE_SOURCE;_FILE_OFFSET_BITS=64;_DARWIN_USE_64_BIT_INODE=1
    

    I'm guessing this is because CLI values take precedent over uninitialized defaults. But it's definitely a gotcha. Once the NAME/VERSION/URL is set on the command line, all of those params must be unset (via -U) or given something reasonable.

    Or am I doing it wrong?

    opened by kirbysayshi 5
  • CMake LINK_FLAGS should be space-delimited

    CMake LINK_FLAGS should be space-delimited

    Fixes an issue where, on Windows, we're getting a single link flag: /IGNORE:4199"%3B"/DELAYLOAD:electron.exe"%3B"/DELAYLOAD...

    Could work around it in our CMakeLists by getting the link_flags from the target, looping through them and writing them back to the target's link flags with spaces, but I'd rather fix it at the source.

    It looks like this may have been broken for a while but only shows up on Windows because Windows is the only platform that ends up with multiple values in NodeJS_LINK_FLAGS

    question 
    opened by tedbrandston 5
  • node-gyp rebuild hooks

    node-gyp rebuild hooks

    It's unclear how to take advantage of rebuild hooks when including a package in node_modules. Cmake-js for example, allows you to specify a cmake-js field in the top-most package.json. Since ncmake appears to ignore node-gyp environment (such as msvs_version), there doesn't appear to be a reliable way to take advantage of the rebuild hooks.

    enhancement question 
    opened by computerquip-streamlabs 4
  • Use ANSI version windows APIs explicitly in win_delay_load_hook.c

    Use ANSI version windows APIs explicitly in win_delay_load_hook.c

    Replace GetModuleHandle GetModuleFileName PathFindFileName PathRemoveFileSpec PathAppend to GetModuleHandleA GetModuleFileNameA PathFindFileNameA PathRemoveFileSpecA PathAppendA

    And replace TCHAR with CHAR corresponding

    opened by toddwong 4
  • 32 bit module not working on 64 bit NodeJS

    32 bit module not working on 64 bit NodeJS

    module.js:598
      return process.dlopen(module, path._makeLong(filename));
                     ^
    
    Error: %1 is not a valid Win32 application.
    

    Works only after by using: ncmake configure -g "Visual Studio 15 2017 Win64"

    bug enhancement help wanted 
    opened by gamelaster 4
  • Install Targets

    Install Targets

    There doesn't appear to be anyway to invoke install commands from ncmake. You can invoke them by using cmake --build build --target install but there should preferably be a way to invoke them through ncmake.

    enhancement 
    opened by computerquip-streamlabs 4
  • Use set_target_properties instead of target_link_libraries to add LINK_FLAGS

    Use set_target_properties instead of target_link_libraries to add LINK_FLAGS

    Since 2.0, node-cmake passes the LINK_FLAGS via target_link_libraries, but it should continue to use set_target_properties as per the CMake document:

    Link flags specified here are inserted into the link command in the same place as the link libraries. This might not be correct, depending on the linker. Use the LINK_FLAGS target property to add link flags explicitly. The flags will then be placed at the toolchain-defined flag position in the link command.

    Fixes for https://github.com/cjntaylor/node-cmake/issues/17 for non-Windows builds.

    opened by kkaefer 4
  • Search in cmake-build-debug and cmake-build-release for CLion convenience

    Search in cmake-build-debug and cmake-build-release for CLion convenience

    CLion outputs binaries to cmake-build-debug/<projectname>.node by default, rather than ncmake's default of build/Debug/<projectname>.node.

    This change adds the default CLion search paths for convenient building and debugging within this IDE.

    opened by TomMettam 0
  • Bump hosted-git-info from 2.5.0 to 2.8.9

    Bump hosted-git-info from 2.5.0 to 2.8.9

    Bumps hosted-git-info from 2.5.0 to 2.8.9.

    Changelog

    Sourced from hosted-git-info's changelog.

    2.8.9 (2021-04-07)

    Bug Fixes

    2.8.8 (2020-02-29)

    Bug Fixes

    • #61 & #65 addressing issues w/ url.URL implmentation which regressed node 6 support (5038b18), closes #66

    2.8.7 (2020-02-26)

    Bug Fixes

    • Do not attempt to use url.URL when unavailable (2d0bb66), closes #61 #62
    • Do not pass scp-style URLs to the WhatWG url.URL (f2cdfcf), closes #60

    2.8.6 (2020-02-25)

    2.8.5 (2019-10-07)

    Bug Fixes

    • updated pathmatch for gitlab (e8325b5), closes #51
    • updated pathmatch for gitlab (ffe056f)

    2.8.4 (2019-08-12)

    ... (truncated)

    Commits
    • 8d4b369 chore(release): 2.8.9
    • 29adfe5 fix: backport regex fix from #76
    • afeaefd chore(release): 2.8.8
    • 5038b18 fix: #61 & #65 addressing issues w/ url.URL implmentation which regressed nod...
    • 7440afa chore(release): 2.8.7
    • 2d0bb66 fix: Do not attempt to use url.URL when unavailable
    • f2cdfcf fix: Do not pass scp-style URLs to the WhatWG url.URL
    • e1b83df chore(release): 2.8.6
    • ff259a6 Ensure passwords in hosted Git URLs are correctly escaped
    • 624fd6f chore(release): 2.8.5
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by nlf, a new releaser for hosted-git-info since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump y18n from 3.2.1 to 3.2.2

    Bump y18n from 3.2.1 to 3.2.2

    Bumps y18n from 3.2.1 to 3.2.2.

    Commits
    Maintainer changes

    This version was pushed to npm by oss-bot, a new releaser for y18n since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • node-cmake fails npm audit due to yargs-parser

    node-cmake fails npm audit due to yargs-parser

    The current release of node-cmake depends on a vulnerable verson of yargs-parser, which causes npm audit to fail:

    ┌───────────────┬──────────────────────────────────────────────────────────────┐
    │ Low           │ Prototype Pollution                                          │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Package       │ yargs-parser                                                 │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Patched in    │ >=13.1.2 <14.0.0 || >=15.0.1 <16.0.0 || >=18.1.2             │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Dependency of │ node-cmake [dev]                                             │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Path          │ node-cmake > yargs > yargs-parser                            │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ More info     │ https://npmjs.com/advisories/1500                            │
    └───────────────┴──────────────────────────────────────────────────────────────┘
    
    [email protected] requires [email protected]^5.0.0 via [email protected]
    The earliest fixed version is 13.1.2.
    
    opened by ghost 0
  • error `unrecognized option '-z'`

    error `unrecognized option '-z'`

    I get the following error:

    [build] Starting build
    [proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/workspace/bla/.bin/win --config Debug --target all -- -j 10
    [build] [1/1 100% :: 0.110] Linking CXX shared library bla.abi-79.node
    [build] FAILED: bla.abi-79.node bla.abi-79.dll.a 
    [build] cmd.exe /C "cd . && c:\workspace\bla\..\mingw32\bin\g++.exe  -Wall -g  -z now -shared -o bla.abi-79.node -Wl,--out-implib,libbla.abi-79.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\bla.abi-79.rsp  && cmd.exe /C "cd /D C:\workspace\bla\.bin\win && "C:\Program Files\CMake\bin\cmake.exe" -E copy C:/workspace/bla/.bin/win/bla.abi-79.node C:/workspace/bla/lib/node-v79/bla.node""
    [build] c:/workspace/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: unrecognized option '-z'
    [build] c:/workspace/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: use the --help option for usage information
    [build] collect2.exe: error: ld returned 1 exit status
    [build] ninja: build stopped: subcommand failed.
    [build] Build finished with exit code 1
    
    opened by amir-arad 0
Owner
Colin Taylor
Embedded Software Engineer
Colin Taylor
A custom distribution of FreeImage, with a CMake-based build system. Used by the Athena Game Framework.

This is a custom distribution of FreeImage, version 3.13.1, with a XMake-based build system. License ------- FreeImage's license is unchanged: this

Philip Abbet 51 Apr 6, 2022
Template library and blog that explain how JSI modules are built from scratch in React Native

react-native-jsi-template This is an example library that explains how anyone can build jsi modules from scratch in React Native. This code is written

Ammar Ahmed 128 Dec 17, 2022
CMake modules for common applications related to computer graphics

cgcmake CMake modules for common applications related to computer graphics Sample Usage Maya Project |-- CMakeLists.txt |-- cgcmake |-- modules

Chad Vernon 115 Dec 5, 2022
The Lua programming language with CMake based build

README for Lua 5.1 See INSTALL for installation instructions. See HISTORY for a summary of changes since the last released version. What is Lua? Lua i

The Lua Language distribution [Archived] 1.4k Dec 30, 2022
Plays native alert sound and shows native dialogs/alerts in your Flutter app.

flutter_platform_alert 2021 © Weizhong Yang a.k.a zonble. A simple plugin to present native alerts, including playing alert sounds and showing alert d

Weizhong Yang a.k.a zonble 60 Dec 21, 2022
Visual Studio native debugger extension to help debug native applications using Mono.

Unity Mixed Callstack UnityMixedCallstack is a Visual Studio 2017/2019 extension to help debug native applications embedding Mono, like Unity. If you

Unity Technologies 83 Nov 28, 2022
React-Native build of Hyperswarm and dependencies

Testing Hyperbeam Start hyperbeam on your computer and copy-paste address to packages/mobile/App.tsx. Then in another terminal run yarn mobile:start a

Tomas Ravinskas 5 Sep 5, 2022
Integrate the ZENO node system into Blender for creating robust physics animations!

ZenoBlend Integrate the ZENO node system into Blender for creating robust physics animations! End-user Installation Goto Release page, and click Asset

Zenus Technology 36 Oct 28, 2022
Open-source node system framework, to change your algorithmic code into useful tools to create much more complicated simulations!

Open-source node system framework, to change your algorithmic code into useful tools to create much more complicated simulations!

Zenus Technology 763 Jan 9, 2023
A set of tools allowing JUCE 6.1 + Cmake to build a CLAP

JUCE6/CMake Clap Support This is a set of code which, combined with a JUCE6/CMake project, allows you to build a (buggy, feature incomplete, work in p

Paul 0 Feb 15, 2022
Cmake check - Static analysis for CMake files.

cmake_check Cmake_check is a linter for the CMake language. It takes a set of user-defined rules and reports violations for CMakeLists.txt files and C

Dael 21 Dec 10, 2022
Seam is a pin-based node editor for OpenFrameworks that makes prototyping visual systems easier and faster.

seam Seam is a pin-based node editor for openFrameworks built using: openFrameworks Dear ImGui the node editor extension for ImGui It is heavily WIP,

Austin Clifton 2 Jan 2, 2022
Doom port to the Ikea Tradfri RGB1923R5 and any device using Silicon labs EFR32MG21 based modules

MG21DOOM Doom port to the Ikea Tradfri RGB1923R5 lamp and any device using Silicon labs EFR32MG21 based modules. Coded by Nicola Wrachien. WARNING Do

null 20 Aug 2, 2022
Jimp-native is a fast C++ re-implementation of Jimp with zero system dependencies and minimal overhead!

Jimp native Make your sever-side Jimp code run 10x faster! Jimp-native is a fast C++ re-implementation of Jimp with zero system dependencies and minim

Sjoerd 17 Oct 10, 2022
A Lilu plugin that makes System Information recognize your Realtek card reader as a native one

Realtek Card Reader Driver Friend Introduction A Lilu plugin that makes System Information recognize your Realtek card reader as a native one. Support

FireWolf 57 Nov 30, 2022
Native cross-platform system automation

Native System Automation GET STARTED | DOCUMENTATION | API | COMMUNITY Introducing Robot for C++, a library aimed at facilitating the development of s

Robot 200 Dec 22, 2022
The Raspberry Pi Pico SDK (henceforth the SDK) provides the headers, libraries and build system necessary

The Raspberry Pi Pico SDK (henceforth the SDK) provides the headers, libraries and build system necessary to write programs for the RP2040-based devices such as the Raspberry Pi Pico in C, C++ or assembly language.

Raspberry Pi 1.9k Jan 5, 2023
A static C library to build applications for the Foenix retro computers, and, eventually, a single-tasking operating system and file browser that sits atop the Foenix MCP Kernel

@mainpage Foenix A2560 Foenix Retro OS: fr/OS A2560-FoenixRetroOS This project provides 2 things: A static C library/framework that anyone can use to

null 4 Jun 24, 2022
Node.js Workers, except on the same thread

synchronous-worker – Run Node.js APIs synchronously Usage Example const w = new SynchronousWorker();

Anna Henningsen 72 Nov 25, 2022