Comparing version 2.8.9 to 2.8.10
@@ -7,2 +7,6 @@ # Changelog | ||
#### Koffi 2.8.10 (2024-06-17) | ||
- Work around MSVC compiler bug introduced in Visual Studio 17.10 | ||
#### Koffi 2.8.9 (2024-05-17) | ||
@@ -9,0 +13,0 @@ |
76
index.js
@@ -7,5 +7,5 @@ "use strict"; | ||
// build/dist/src/cnoke/src/tools.js | ||
// ../../bin/Koffi/package/src/cnoke/src/tools.js | ||
var require_tools = __commonJS({ | ||
"build/dist/src/cnoke/src/tools.js"(exports2, module2) { | ||
"../../bin/Koffi/package/src/cnoke/src/tools.js"(exports2, module2) { | ||
"use strict"; | ||
@@ -18,15 +18,2 @@ var crypto = require("crypto"); | ||
async function download_http(url, dest) { | ||
if (Array.isArray(url)) { | ||
let urls = url; | ||
for (let url2 of urls) { | ||
try { | ||
await download_http(url2, dest); | ||
return; | ||
} catch (err) { | ||
if (err.code != 404) | ||
throw err; | ||
} | ||
} | ||
throw new Error("All URLs returned error 404"); | ||
} | ||
console.log(">> Downloading " + url); | ||
@@ -201,22 +188,21 @@ let [tmp_name, file] = open_temporary_stream(dest); | ||
let header = decode_elf_header(buf); | ||
let float_abi = (header.e_flags & 6) >> 1; | ||
let float_abi = header.e_flags & 6; | ||
switch (float_abi) { | ||
case 0: | ||
{ | ||
arch2 += "sf"; | ||
} | ||
break; | ||
case 1: | ||
case 2: | ||
{ | ||
arch2 += "hf32"; | ||
arch2 += "f"; | ||
} | ||
break; | ||
case 2: | ||
case 4: | ||
{ | ||
arch2 += "hf64"; | ||
arch2 += "d"; | ||
} | ||
break; | ||
case 3: | ||
case 6: | ||
{ | ||
arch2 += "hf128"; | ||
arch2 += "q"; | ||
} | ||
@@ -226,3 +212,2 @@ break; | ||
} else if (arch2 == "arm") { | ||
arch2 = "arm32"; | ||
let buf = read_file_header(process.execPath, 512); | ||
@@ -380,9 +365,9 @@ let header = decode_elf_header(buf); | ||
// build/dist/src/koffi/package.json | ||
// ../../bin/Koffi/package/src/koffi/package.json | ||
var require_package = __commonJS({ | ||
"build/dist/src/koffi/package.json"(exports2, module2) { | ||
"../../bin/Koffi/package/src/koffi/package.json"(exports2, module2) { | ||
module2.exports = { | ||
name: "koffi", | ||
version: "2.8.9", | ||
stable: "2.8.9", | ||
version: "2.8.10", | ||
stable: "2.8.10", | ||
description: "Fast and simple C FFI (foreign function interface) for Node.js", | ||
@@ -411,21 +396,15 @@ keywords: [ | ||
scripts: { | ||
test: "node tools/qemu.js test", | ||
prepack: `echo 'Use "npm run prepare" instead' && false`, | ||
prepublishOnly: `echo 'Use "npm run release" instead' && false`, | ||
release: "node tools/qemu.js publish" | ||
test: "node tools/koffi.js test", | ||
prepack: `echo 'Use "npm run package" instead' && false`, | ||
prepublishOnly: `echo 'Use "npm run package" instead' && false`, | ||
package: "node tools/koffi.js build" | ||
}, | ||
license: "MIT", | ||
devDependencies: { | ||
chalk: "^4.1.2", | ||
esbuild: "^0.19.2", | ||
"ffi-napi": "^4.0.3", | ||
minimatch: "^5.0.1", | ||
"node-ssh": "^12.0.3", | ||
raylib: "^0.14.0", | ||
"ref-napi": "^3.0.3", | ||
"ref-struct-di": "^1.1.1", | ||
tar: "^6.1.11" | ||
esbuild: "^0.19.2" | ||
}, | ||
cnoke: { | ||
output: "build/koffi/{{ platform }}_{{ arch }}", | ||
api: "../../vendor/node-api-headers", | ||
output: "../../bin/Koffi/{{ platform }}_{{ arch }}", | ||
node: 16, | ||
napi: 8, | ||
@@ -438,3 +417,3 @@ require: "./index.js" | ||
// build/dist/src/koffi/index.js | ||
// ../../bin/Koffi/package/src/koffi/index.js | ||
var util = require("util"); | ||
@@ -483,5 +462,5 @@ var fs = require("fs"); | ||
break; | ||
case "linux_arm32hf": | ||
case "linux_armhf": | ||
{ | ||
native = require("./build/koffi/linux_arm32hf/koffi.node"); | ||
native = require("./build/koffi/linux_armhf/koffi.node"); | ||
} | ||
@@ -499,5 +478,5 @@ break; | ||
break; | ||
case "linux_riscv64hf64": | ||
case "linux_riscv64d": | ||
{ | ||
native = require("./build/koffi/linux_riscv64hf64/koffi.node"); | ||
native = require("./build/koffi/linux_riscv64d/koffi.node"); | ||
} | ||
@@ -545,3 +524,4 @@ break; | ||
`/koffi/${process.platform}_${arch}/koffi.node`, | ||
`/node_modules/koffi/build/koffi/${process.platform}_${arch}/koffi.node` | ||
`/node_modules/koffi/build/koffi/${process.platform}_${arch}/koffi.node`, | ||
`/../../bin/Koffi/${process.platform}_${arch}/koffi.node` | ||
]; | ||
@@ -548,0 +528,0 @@ for (let root of roots) { |
@@ -7,5 +7,5 @@ "use strict"; | ||
// build/dist/src/cnoke/src/tools.js | ||
// ../../bin/Koffi/package/src/cnoke/src/tools.js | ||
var require_tools = __commonJS({ | ||
"build/dist/src/cnoke/src/tools.js"(exports2, module2) { | ||
"../../bin/Koffi/package/src/cnoke/src/tools.js"(exports2, module2) { | ||
"use strict"; | ||
@@ -18,15 +18,2 @@ var crypto = require("crypto"); | ||
async function download_http(url, dest) { | ||
if (Array.isArray(url)) { | ||
let urls = url; | ||
for (let url2 of urls) { | ||
try { | ||
await download_http(url2, dest); | ||
return; | ||
} catch (err) { | ||
if (err.code != 404) | ||
throw err; | ||
} | ||
} | ||
throw new Error("All URLs returned error 404"); | ||
} | ||
console.log(">> Downloading " + url); | ||
@@ -201,22 +188,21 @@ let [tmp_name, file] = open_temporary_stream(dest); | ||
let header = decode_elf_header(buf); | ||
let float_abi = (header.e_flags & 6) >> 1; | ||
let float_abi = header.e_flags & 6; | ||
switch (float_abi) { | ||
case 0: | ||
{ | ||
arch2 += "sf"; | ||
} | ||
break; | ||
case 1: | ||
case 2: | ||
{ | ||
arch2 += "hf32"; | ||
arch2 += "f"; | ||
} | ||
break; | ||
case 2: | ||
case 4: | ||
{ | ||
arch2 += "hf64"; | ||
arch2 += "d"; | ||
} | ||
break; | ||
case 3: | ||
case 6: | ||
{ | ||
arch2 += "hf128"; | ||
arch2 += "q"; | ||
} | ||
@@ -226,3 +212,2 @@ break; | ||
} else if (arch2 == "arm") { | ||
arch2 = "arm32"; | ||
let buf = read_file_header(process.execPath, 512); | ||
@@ -380,9 +365,9 @@ let header = decode_elf_header(buf); | ||
// build/dist/src/koffi/package.json | ||
// ../../bin/Koffi/package/src/koffi/package.json | ||
var require_package = __commonJS({ | ||
"build/dist/src/koffi/package.json"(exports2, module2) { | ||
"../../bin/Koffi/package/src/koffi/package.json"(exports2, module2) { | ||
module2.exports = { | ||
name: "koffi", | ||
version: "2.8.9", | ||
stable: "2.8.9", | ||
version: "2.8.10", | ||
stable: "2.8.10", | ||
description: "Fast and simple C FFI (foreign function interface) for Node.js", | ||
@@ -411,21 +396,15 @@ keywords: [ | ||
scripts: { | ||
test: "node tools/qemu.js test", | ||
prepack: `echo 'Use "npm run prepare" instead' && false`, | ||
prepublishOnly: `echo 'Use "npm run release" instead' && false`, | ||
release: "node tools/qemu.js publish" | ||
test: "node tools/koffi.js test", | ||
prepack: `echo 'Use "npm run package" instead' && false`, | ||
prepublishOnly: `echo 'Use "npm run package" instead' && false`, | ||
package: "node tools/koffi.js build" | ||
}, | ||
license: "MIT", | ||
devDependencies: { | ||
chalk: "^4.1.2", | ||
esbuild: "^0.19.2", | ||
"ffi-napi": "^4.0.3", | ||
minimatch: "^5.0.1", | ||
"node-ssh": "^12.0.3", | ||
raylib: "^0.14.0", | ||
"ref-napi": "^3.0.3", | ||
"ref-struct-di": "^1.1.1", | ||
tar: "^6.1.11" | ||
esbuild: "^0.19.2" | ||
}, | ||
cnoke: { | ||
output: "build/koffi/{{ platform }}_{{ arch }}", | ||
api: "../../vendor/node-api-headers", | ||
output: "../../bin/Koffi/{{ platform }}_{{ arch }}", | ||
node: 16, | ||
napi: 8, | ||
@@ -438,3 +417,3 @@ require: "./index.js" | ||
// build/dist/src/koffi/indirect.js | ||
// ../../bin/Koffi/package/src/koffi/indirect.js | ||
var util = require("util"); | ||
@@ -463,3 +442,4 @@ var fs = require("fs"); | ||
`/koffi/${process.platform}_${arch}/koffi.node`, | ||
`/node_modules/koffi/build/koffi/${process.platform}_${arch}/koffi.node` | ||
`/node_modules/koffi/build/koffi/${process.platform}_${arch}/koffi.node`, | ||
`/../../bin/Koffi/${process.platform}_${arch}/koffi.node` | ||
]; | ||
@@ -466,0 +446,0 @@ for (let root of roots) { |
{ | ||
"name": "koffi", | ||
"version": "2.8.9", | ||
"stable": "2.8.9", | ||
"version": "2.8.10", | ||
"stable": "2.8.10", | ||
"description": "Fast and simple C FFI (foreign function interface) for Node.js", | ||
@@ -32,3 +32,5 @@ "keywords": [ | ||
"cnoke": { | ||
"output": "build/koffi/{{ platform }}_{{ arch }}", | ||
"api": "../../vendor/node-api-headers", | ||
"output": "../../bin/Koffi/{{ platform }}_{{ arch }}", | ||
"node": 16, | ||
"napi": 8, | ||
@@ -35,0 +37,0 @@ "require": "./index.js" |
@@ -48,4 +48,5 @@ // Copyright 2023 Niels Martignène <niels.martignene@protonmail.com> | ||
if (package_dir == null) | ||
package_dir = project_dir; | ||
package_dir = package_dir.replace(/\\/g, '/'); | ||
package_dir = find_parent_directory(project_dir, 'package.json'); | ||
if (package_dir != null) | ||
package_dir = package_dir.replace(/\\/g, '/'); | ||
@@ -68,2 +69,4 @@ let runtime_version = config.runtime_version; | ||
let options = null; | ||
let cache_dir = get_cache_directory(); | ||
@@ -74,9 +77,6 @@ let build_dir = config.build_dir; | ||
if (build_dir == null) { | ||
let pkg = read_package_json(); | ||
let options = read_cnoke_options(); | ||
if (pkg.cnoke.output != null) { | ||
build_dir = expand_path(pkg.cnoke.output); | ||
if (!tools.path_is_absolute(build_dir)) | ||
build_dir = package_dir + '/' + build_dir; | ||
if (options.output != null) { | ||
build_dir = expand_path(options.output, options.directory); | ||
} else { | ||
@@ -86,2 +86,3 @@ build_dir = project_dir + '/build'; | ||
} | ||
build_dir = build_dir.replace(/\\/g, '/'); | ||
work_dir = build_dir + `/v${runtime_version}_${arch}`; | ||
@@ -92,2 +93,4 @@ | ||
this.configure = async function(retry = true) { | ||
let options = read_cnoke_options(); | ||
let args = [project_dir]; | ||
@@ -102,3 +105,2 @@ | ||
// Prepare build directory | ||
fs.mkdirSync(cache_dir, { recursive: true, mode: 0o755 }); | ||
fs.mkdirSync(build_dir, { recursive: true, mode: 0o755 }); | ||
@@ -109,40 +111,48 @@ fs.mkdirSync(work_dir, { recursive: true, mode: 0o755 }); | ||
// Download Node headers | ||
{ | ||
let basename = `node-v${runtime_version}-headers.tar.gz`; | ||
let urls = [ | ||
`https://nodejs.org/dist/v${runtime_version}/${basename}`, | ||
// `https://unofficial-builds.nodejs.org/download/release/v${runtime_version}/${basename}` | ||
]; | ||
let destname = `${cache_dir}/${basename}`; | ||
// Download or use Node headers | ||
if (options.api == null) { | ||
let destname = `${cache_dir}/node-v${runtime_version}-headers.tar.gz`; | ||
if (!fs.existsSync(destname)) | ||
await tools.download_http(urls, destname); | ||
if (!fs.existsSync(destname)) { | ||
fs.mkdirSync(cache_dir, { recursive: true, mode: 0o755 }); | ||
let url = `https://nodejs.org/dist/v${runtime_version}/node-v${runtime_version}-headers.tar.gz`; | ||
await tools.download_http(url, destname); | ||
} | ||
await tools.extract_targz(destname, work_dir + '/headers', 1); | ||
args.push(`-DNODE_JS_INCLUDE_DIRS=${work_dir}/headers/include/node`); | ||
} else { | ||
console.log(`>> Using local node-api headers`); | ||
args.push(`-DNODE_JS_INCLUDE_DIRS=${options.api}/include`); | ||
} | ||
// Download Node import library (Windows) | ||
if (process.platform === 'win32') { | ||
let dirname; | ||
switch (arch) { | ||
case 'ia32': { dirname = 'win-x86'; } break; | ||
case 'x64': { dirname = 'win-x64'; } break; | ||
case 'arm64': { dirname = 'win-arm64'; } break; | ||
// Download or create Node import library (Windows) | ||
if (process.platform == 'win32') { | ||
if (options.api == null) { | ||
let dirname; | ||
switch (arch) { | ||
case 'ia32': { dirname = 'win-x86'; } break; | ||
case 'x64': { dirname = 'win-x64'; } break; | ||
case 'arm64': { dirname = 'win-arm64'; } break; | ||
default: { | ||
throw new Error(`Unsupported architecture '${arch}' for Node on Windows`); | ||
} break; | ||
} | ||
default: { | ||
throw new Error(`Unsupported architecture '${arch}' for Node on Windows`); | ||
} break; | ||
} | ||
let destname = `${cache_dir}/node_v${runtime_version}_${arch}.lib`; | ||
let destname = `${cache_dir}/node_v${runtime_version}_${arch}.lib`; | ||
if (!fs.existsSync(destname)) { | ||
let urls = [ | ||
`https://nodejs.org/dist/v${runtime_version}/${dirname}/node.lib`, | ||
// `https://unofficial-builds.nodejs.org/download/release/v${runtime_version}/${dirname}/node.lib` | ||
]; | ||
await tools.download_http(urls, destname); | ||
if (!fs.existsSync(destname)) { | ||
fs.mkdirSync(cache_dir, { recursive: true, mode: 0o755 }); | ||
let url = `https://nodejs.org/dist/v${runtime_version}/${dirname}/node.lib`; | ||
await tools.download_http(url, destname); | ||
} | ||
fs.copyFileSync(destname, work_dir + '/node.lib'); | ||
} else { | ||
args.push(`-DNODE_JS_LINK_DEF=${options.api}/def/node_api.def`); | ||
} | ||
fs.copyFileSync(destname, work_dir + '/node.lib'); | ||
} | ||
@@ -152,4 +162,2 @@ | ||
args.push(`-DNODE_JS_INCLUDE_DIRS=${work_dir}/headers/include/node`); | ||
// Set platform flags | ||
@@ -161,3 +169,3 @@ switch (process.platform) { | ||
args.push(`-DNODE_JS_SOURCES=${work_dir}/win_delay_hook.c`); | ||
args.push(`-DNODE_JS_LIBRARIES=${work_dir}/node.lib`); | ||
args.push(`-DNODE_JS_LINK_LIB=${work_dir}/node.lib`); | ||
@@ -268,53 +276,24 @@ switch (arch) { | ||
async function check_prebuild() { | ||
let pkg = read_package_json(); | ||
let options = read_cnoke_options(); | ||
if (pkg.cnoke.prebuild != null) { | ||
if (options.prebuild != null) { | ||
fs.mkdirSync(build_dir, { recursive: true, mode: 0o755 }); | ||
let url = expand_path(pkg.cnoke.prebuild); | ||
let basename = path.basename(url); | ||
let archive_filename = expand_path(options.prebuild, options.directory); | ||
try { | ||
let archive_filename = null; | ||
if (url.startsWith('file:/')) { | ||
if (url.startsWith('file://localhost/')) { | ||
url = url.substr(16); | ||
} else { | ||
let offset = 6; | ||
while (offset < 9 && url[offset] == '/') | ||
offset++; | ||
url = url.substr(offset - 1); | ||
} | ||
if (process.platform == 'win32' && url.match(/^\/[a-zA-Z]+:[\\\/]/)) | ||
url = url.substr(1); | ||
if (fs.existsSync(archive_filename)) { | ||
try { | ||
console.log('>> Extracting prebuilt binaries...'); | ||
await tools.extract_targz(archive_filename, build_dir, 1); | ||
} catch (err) { | ||
console.error('Failed to find prebuilt binary for your platform, building manually'); | ||
} | ||
if (url.match(/^[a-z]+:\/\//)) { | ||
archive_filename = build_dir + '/' + basename; | ||
await tools.download_http(url, archive_filename); | ||
} else { | ||
archive_filename = url; | ||
if (!tools.path_is_absolute(archive_filename)) | ||
archive_filename = path.join(package_dir, archive_filename); | ||
if (!fs.existsSync(archive_filename)) | ||
throw new Error('Cannot find local prebuilt archive'); | ||
} | ||
console.log('>> Extracting prebuilt binaries...'); | ||
await tools.extract_targz(archive_filename, build_dir, 1); | ||
} catch (err) { | ||
console.error('Failed to find prebuilt binary for your platform, building manually'); | ||
} else { | ||
console.error('Cannot find local prebuilt archive'); | ||
} | ||
} | ||
if (pkg.cnoke.require != null) { | ||
let require_filename = expand_path(pkg.cnoke.require); | ||
if (options.require != null) { | ||
let require_filename = expand_path(options.require, options.directory); | ||
if (!tools.path_is_absolute(require_filename)) | ||
require_filename = path.join(package_dir, require_filename); | ||
if (fs.existsSync(require_filename)) { | ||
@@ -416,25 +395,32 @@ let proc = spawnSync(process.execPath, ['-e', 'require(process.argv[1])', require_filename]); | ||
function check_compatibility() { | ||
let pkg = read_package_json(); | ||
let options = read_cnoke_options(); | ||
if (pkg.cnoke.node != null && tools.cmp_version(runtime_version, pkg.cnoke.node) < 0) | ||
throw new Error(`Project ${pkg.name} requires Node.js >= ${pkg.cnoke.node}`); | ||
if (options.node != null && tools.cmp_version(runtime_version, options.node) < 0) | ||
throw new Error(`Project ${options.name} requires Node.js >= ${options.node}`); | ||
if (pkg.cnoke.napi != null) { | ||
if (options.napi != null) { | ||
let major = parseInt(runtime_version, 10); | ||
let required = tools.get_napi_version(pkg.cnoke.napi, major); | ||
let required = tools.get_napi_version(options.napi, major); | ||
if (required == null) | ||
throw new Error(`Project ${pkg.name} does not support the Node ${major}.x branch (old or missing N-API)`); | ||
throw new Error(`Project ${options.name} does not support the Node ${major}.x branch (old or missing N-API)`); | ||
if (tools.cmp_version(runtime_version, required) < 0) | ||
throw new Error(`Project ${pkg.name} requires Node >= ${required} in the Node ${major}.x branch (with N-API >= ${pkg.engines.napi})`); | ||
throw new Error(`Project ${options.name} requires Node >= ${required} in the Node ${major}.x branch (with N-API >= ${options.napi})`); | ||
} | ||
} | ||
function read_package_json() { | ||
let pkg = {}; | ||
function read_cnoke_options() { | ||
if (options != null) | ||
return options; | ||
let directory = project_dir; | ||
let pkg = null; | ||
let cnoke = null; | ||
if (package_dir != null) { | ||
try { | ||
let json = fs.readFileSync(package_dir + '/package.json', { encoding: 'utf-8' }); | ||
pkg = JSON.parse(json); | ||
directory = package_dir; | ||
} catch (err) { | ||
@@ -446,14 +432,32 @@ if (err.code != 'ENOENT') | ||
if (pkg.cnoke == null) | ||
pkg.cnoke = {}; | ||
try { | ||
let json = fs.readFileSync(project_dir + '/CNoke.json', { encoding: 'utf-8' }); | ||
return pkg; | ||
cnoke = JSON.parse(json); | ||
directory = project_dir; | ||
} catch (err) { | ||
if (err.code != 'ENOENT') | ||
throw err; | ||
} | ||
if (cnoke == null) | ||
cnoke = pkg?.cnoke ?? {}; | ||
options = { | ||
name: pkg?.name ?? path.basename(project_dir), | ||
version: pkg?.version ?? null, | ||
directory: directory, | ||
...cnoke | ||
}; | ||
return options; | ||
} | ||
function expand_path(str) { | ||
let ret = str.replace(/{{ *([a-zA-Z_][a-zA-Z_0-9]*) *}}/g, (match, p1) => { | ||
function expand_path(str, root_dir) { | ||
let expanded = str.replace(/{{ *([a-zA-Z_][a-zA-Z_0-9]*) *}}/g, (match, p1) => { | ||
switch (p1) { | ||
case 'version': { | ||
let pkg = read_package_json(); | ||
return pkg.version || ''; | ||
let options = read_cnoke_options(); | ||
return options.version || ''; | ||
} break; | ||
@@ -467,3 +471,6 @@ case 'platform': return process.platform; | ||
return ret; | ||
if (!tools.path_is_absolute(expanded)) | ||
expanded = path.join(root_dir, expanded); | ||
return expanded; | ||
} | ||
@@ -470,0 +477,0 @@ } |
@@ -31,18 +31,2 @@ // Copyright 2023 Niels Martignène <niels.martignene@protonmail.com> | ||
async function download_http(url, dest) { | ||
if (Array.isArray(url)) { | ||
let urls = url; | ||
for (let url of urls) { | ||
try { | ||
await download_http(url, dest); | ||
return; | ||
} catch (err) { | ||
if (err.code != 404) | ||
throw err; | ||
} | ||
} | ||
throw new Error('All URLs returned error 404'); | ||
} | ||
console.log('>> Downloading ' + url); | ||
@@ -259,13 +243,11 @@ | ||
let header = decode_elf_header(buf); | ||
let float_abi = (header.e_flags & 0x6) >> 1; | ||
let float_abi = (header.e_flags & 0x6); | ||
switch (float_abi) { | ||
case 0: { arch += 'sf'; } break; | ||
case 1: { arch += 'hf32'; } break; | ||
case 2: { arch += 'hf64'; } break; | ||
case 3: { arch += 'hf128'; } break; | ||
case 0: {} break; | ||
case 2: { arch += 'f'; } break; | ||
case 4: { arch += 'd'; } break; | ||
case 6: { arch += 'q'; } break; | ||
} | ||
} else if (arch == 'arm') { | ||
arch = 'arm32'; | ||
let buf = read_file_header(process.execPath, 512); | ||
@@ -272,0 +254,0 @@ let header = decode_elf_header(buf); |
@@ -37,3 +37,3 @@ # Copyright 2023 Niels Martignène <niels.martignene@protonmail.com> | ||
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus /Zc:preprocessor /W4 /wd4200 /wd4201 /wd4127 /wd4458 /wd4706 /wd4702 /wd4324") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus /Zc:preprocessor /Zc:twoPhase- /W4 /wd4200 /wd4201 /wd4127 /wd4458 /wd4706 /wd4702 /wd4324") | ||
@@ -40,0 +40,0 @@ # ASM_MASM does not (yet) work on Windows ARM64 |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 2 instances in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 2 instances in 1 package
444
8989
69795477
1
72
53