Update On Tue May 28 20:30:13 CEST 2024

This commit is contained in:
github-action[bot]
2024-05-28 20:30:14 +02:00
parent 929efb55e1
commit 55db66563f
35 changed files with 2944 additions and 1102 deletions

1
.github/update.log vendored
View File

@@ -660,3 +660,4 @@ Update On Fri May 24 20:29:24 CEST 2024
Update On Sat May 25 20:28:13 CEST 2024 Update On Sat May 25 20:28:13 CEST 2024
Update On Sun May 26 20:29:29 CEST 2024 Update On Sun May 26 20:29:29 CEST 2024
Update On Mon May 27 20:31:35 CEST 2024 Update On Mon May 27 20:31:35 CEST 2024
Update On Tue May 28 20:30:03 CEST 2024

View File

@@ -6,5 +6,5 @@ func init() {
version := windows.RtlGetVersion() version := windows.RtlGetVersion()
WindowsMajorVersion = version.MajorVersion WindowsMajorVersion = version.MajorVersion
WindowsMinorVersion = version.MinorVersion WindowsMinorVersion = version.MinorVersion
WindowsBuildNumber = version.MinorVersion WindowsBuildNumber = version.BuildNumber
} }

View File

@@ -53,12 +53,11 @@
"@types/react": "18.3.3", "@types/react": "18.3.3",
"@types/react-dom": "18.3.0", "@types/react-dom": "18.3.0",
"@types/react-transition-group": "4.4.10", "@types/react-transition-group": "4.4.10",
"@typescript-eslint/eslint-plugin": "7.10.0", "@typescript-eslint/eslint-plugin": "7.11.0",
"@typescript-eslint/parser": "7.10.0", "@typescript-eslint/parser": "7.11.0",
"@vitejs/plugin-react": "4.3.0", "@vitejs/plugin-react": "4.3.0",
"babel-plugin-react-compiler": "0.0.0-experimental-592953e-20240517",
"sass": "1.77.2", "sass": "1.77.2",
"shiki": "1.6.0", "shiki": "1.6.1",
"vite": "5.2.11", "vite": "5.2.11",
"vite-plugin-monaco-editor": "1.1.3", "vite-plugin-monaco-editor": "1.1.3",
"vite-plugin-sass-dts": "1.3.22", "vite-plugin-sass-dts": "1.3.22",

View File

@@ -48,17 +48,7 @@ export default defineConfig(({ command }) => {
react({ react({
// jsxImportSource: "@emotion/react", // jsxImportSource: "@emotion/react",
babel: { babel: {
plugins: [ plugins: ["@emotion/babel-plugin"],
"@emotion/babel-plugin",
[
"babel-plugin-react-compiler",
{
sources: (filename) => {
return filename.indexOf("src") !== -1;
},
},
],
],
}, },
}), }),
generouted(), generouted(),

View File

@@ -87,8 +87,8 @@
"eslint-plugin-import": "2.29.1", "eslint-plugin-import": "2.29.1",
"eslint-plugin-n": "16.6.2", "eslint-plugin-n": "16.6.2",
"eslint-plugin-prettier": "5.1.3", "eslint-plugin-prettier": "5.1.3",
"eslint-plugin-promise": "6.1.1", "eslint-plugin-promise": "6.2.0",
"eslint-plugin-react": "7.34.1", "eslint-plugin-react": "7.34.2",
"lint-staged": "15.2.5", "lint-staged": "15.2.5",
"npm-run-all2": "6.2.0", "npm-run-all2": "6.2.0",
"postcss": "8.4.38", "postcss": "8.4.38",

View File

@@ -60,7 +60,7 @@ importers:
version: 9.1.0(eslint@8.57.0) version: 9.1.0(eslint@8.57.0)
eslint-config-standard: eslint-config-standard:
specifier: 17.1.0 specifier: 17.1.0
version: 17.1.0(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0) version: 17.1.0(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0)
eslint-import-resolver-alias: eslint-import-resolver-alias:
specifier: 1.1.2 specifier: 1.1.2
version: 1.1.2(eslint-plugin-import@2.29.1(eslint@8.57.0)) version: 1.1.2(eslint-plugin-import@2.29.1(eslint@8.57.0))
@@ -77,11 +77,11 @@ importers:
specifier: 5.1.3 specifier: 5.1.3
version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5)
eslint-plugin-promise: eslint-plugin-promise:
specifier: 6.1.1 specifier: 6.2.0
version: 6.1.1(eslint@8.57.0) version: 6.2.0(eslint@8.57.0)
eslint-plugin-react: eslint-plugin-react:
specifier: 7.34.1 specifier: 7.34.2
version: 7.34.1(eslint@8.57.0) version: 7.34.2(eslint@8.57.0)
lint-staged: lint-staged:
specifier: 15.2.5 specifier: 15.2.5
version: 15.2.5 version: 15.2.5
@@ -289,23 +289,20 @@ importers:
specifier: 4.4.10 specifier: 4.4.10
version: 4.4.10 version: 4.4.10
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: 7.10.0 specifier: 7.11.0
version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) version: 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: 7.10.0 specifier: 7.11.0
version: 7.10.0(eslint@8.57.0)(typescript@5.4.5) version: 7.11.0(eslint@8.57.0)(typescript@5.4.5)
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: 4.3.0 specifier: 4.3.0
version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)) version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
babel-plugin-react-compiler:
specifier: 0.0.0-experimental-592953e-20240517
version: 0.0.0-experimental-592953e-20240517
sass: sass:
specifier: 1.77.2 specifier: 1.77.2
version: 1.77.2 version: 1.77.2
shiki: shiki:
specifier: 1.6.0 specifier: 1.6.1
version: 1.6.0 version: 1.6.1
vite: vite:
specifier: 5.2.11 specifier: 5.2.11
version: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0) version: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
@@ -433,9 +430,6 @@ packages:
resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@babel/generator@7.2.0':
resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==}
'@babel/generator@7.24.5': '@babel/generator@7.24.5':
resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@@ -1048,10 +1042,6 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@jest/types@24.9.0':
resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==}
engines: {node: '>= 6'}
'@jridgewell/gen-mapping@0.3.5': '@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
@@ -1365,8 +1355,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@shikijs/core@1.6.0': '@shikijs/core@1.6.1':
resolution: {integrity: sha512-NIEAi5U5R7BLkbW1pG/ZKu3eb1lzc3/+jD0lFsuxMT7zjaf9bbNwdNyMr7zh/Zl8EXQtQ+MYBAt5G+JLu+5DlA==} resolution: {integrity: sha512-CqYyepN4SnBopaoXYwng4NO8riB5ask/LTCkhOFq+GNGtr2X+aKeD767eYdqYukeixEUvv4bXdyTYVaogj7KBw==}
'@sindresorhus/is@4.6.0': '@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
@@ -1561,15 +1551,6 @@ packages:
'@types/http-cache-semantics@4.0.4': '@types/http-cache-semantics@4.0.4':
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
'@types/istanbul-lib-report@3.0.3':
resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
'@types/istanbul-reports@1.1.2':
resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==}
'@types/js-cookie@3.0.6': '@types/js-cookie@3.0.6':
resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
@@ -1627,17 +1608,11 @@ packages:
'@types/unist@3.0.2': '@types/unist@3.0.2':
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
'@types/yargs@13.0.12':
resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==}
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
'@typescript-eslint/eslint-plugin@7.10.0': '@typescript-eslint/eslint-plugin@7.11.0':
resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==} resolution: {integrity: sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^7.0.0 '@typescript-eslint/parser': ^7.0.0
@@ -1647,8 +1622,8 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/parser@7.10.0': '@typescript-eslint/parser@7.11.0':
resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==} resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
@@ -1657,12 +1632,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@7.10.0': '@typescript-eslint/scope-manager@7.11.0':
resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==} resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/type-utils@7.10.0': '@typescript-eslint/type-utils@7.11.0':
resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==} resolution: {integrity: sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
@@ -1671,12 +1646,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@7.10.0': '@typescript-eslint/types@7.11.0':
resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==} resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.10.0': '@typescript-eslint/typescript-estree@7.11.0':
resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==} resolution: {integrity: sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@@ -1684,14 +1659,14 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@7.10.0': '@typescript-eslint/utils@7.11.0':
resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==} resolution: {integrity: sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.10.0': '@typescript-eslint/visitor-keys@7.11.0':
resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==} resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0': '@ungap/structured-clone@1.2.0':
@@ -1754,10 +1729,6 @@ packages:
resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
engines: {node: '>=4'} engines: {node: '>=4'}
ansi-regex@4.1.1:
resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
engines: {node: '>=6'}
ansi-regex@5.0.1: ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1860,9 +1831,6 @@ packages:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'} engines: {node: '>=10', npm: '>=6'}
babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517:
resolution: {integrity: sha512-OjG1SVaeQZaJrqkMFJatg8W/MTow8Ak5rx2SI0ETQBO1XvOk/XZGMbltNCPdFJLKghBYoBjC+Y3Ap/Xr7B01mA==}
bail@2.0.2: bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -2537,14 +2505,14 @@ packages:
eslint-config-prettier: eslint-config-prettier:
optional: true optional: true
eslint-plugin-promise@6.1.1: eslint-plugin-promise@6.2.0:
resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} resolution: {integrity: sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
eslint-plugin-react@7.34.1: eslint-plugin-react@7.34.2:
resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
@@ -3026,9 +2994,6 @@ packages:
intersection-observer@0.12.2: intersection-observer@0.12.2:
resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
ip-address@9.0.5: ip-address@9.0.5:
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
engines: {node: '>= 12'} engines: {node: '>= 12'}
@@ -4061,10 +4026,6 @@ packages:
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
pretty-format@24.9.0:
resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==}
engines: {node: '>= 6'}
progress@2.0.3: progress@2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
@@ -4396,8 +4357,8 @@ packages:
shell-quote@1.8.1: shell-quote@1.8.1:
resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
shiki@1.6.0: shiki@1.6.1:
resolution: {integrity: sha512-P31ROeXcVgW/k3Z+vUUErcxoTah7ZRaimctOpzGuqAntqnnSmx1HOsvnbAB8Z2qfXPRhw61yptAzCsuKOhTHwQ==} resolution: {integrity: sha512-1Pu/A1rtsG6HZvQm4W0NExQ45e02og+rPog7PDaFDiMumZgOYnZIu4JtGQeAIfMwdbKSjJQoCUr79vDLKUUxWA==}
side-channel@1.0.6: side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
@@ -4683,10 +4644,6 @@ packages:
trim-lines@3.0.1: trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
trim-right@1.0.1:
resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==}
engines: {node: '>=0.10.0'}
trough@2.2.0: trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
@@ -5082,15 +5039,6 @@ packages:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'} engines: {node: '>=12.20'}
zod-validation-error@2.1.0:
resolution: {integrity: sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
zod: ^3.18.0
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
zwitch@2.0.4: zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -5144,14 +5092,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@babel/generator@7.2.0':
dependencies:
'@babel/types': 7.24.5
jsesc: 2.5.2
lodash: 4.17.21
source-map: 0.5.7
trim-right: 1.0.1
'@babel/generator@7.24.5': '@babel/generator@7.24.5':
dependencies: dependencies:
'@babel/types': 7.24.5 '@babel/types': 7.24.5
@@ -5724,12 +5664,6 @@ snapshots:
wrap-ansi: 8.1.0 wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0 wrap-ansi-cjs: wrap-ansi@7.0.0
'@jest/types@24.9.0':
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 1.1.2
'@types/yargs': 13.0.12
'@jridgewell/gen-mapping@0.3.5': '@jridgewell/gen-mapping@0.3.5':
dependencies: dependencies:
'@jridgewell/set-array': 1.2.1 '@jridgewell/set-array': 1.2.1
@@ -6014,7 +5948,7 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.17.2': '@rollup/rollup-win32-x64-msvc@4.17.2':
optional: true optional: true
'@shikijs/core@1.6.0': {} '@shikijs/core@1.6.1': {}
'@sindresorhus/is@4.6.0': {} '@sindresorhus/is@4.6.0': {}
@@ -6202,17 +6136,6 @@ snapshots:
'@types/http-cache-semantics@4.0.4': {} '@types/http-cache-semantics@4.0.4': {}
'@types/istanbul-lib-coverage@2.0.6': {}
'@types/istanbul-lib-report@3.0.3':
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports@1.1.2':
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-lib-report': 3.0.3
'@types/js-cookie@3.0.6': {} '@types/js-cookie@3.0.6': {}
'@types/json5@0.0.29': {} '@types/json5@0.0.29': {}
@@ -6271,25 +6194,19 @@ snapshots:
'@types/unist@3.0.2': {} '@types/unist@3.0.2': {}
'@types/yargs-parser@21.0.3': {}
'@types/yargs@13.0.12':
dependencies:
'@types/yargs-parser': 21.0.3
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 20.12.12 '@types/node': 20.12.12
optional: true optional: true
'@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.10.0 '@typescript-eslint/scope-manager': 7.11.0
'@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0 '@typescript-eslint/visitor-keys': 7.11.0
eslint: 8.57.0 eslint: 8.57.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.1 ignore: 5.3.1
@@ -6300,12 +6217,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 7.10.0 '@typescript-eslint/scope-manager': 7.11.0
'@typescript-eslint/types': 7.10.0 '@typescript-eslint/types': 7.11.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0 '@typescript-eslint/visitor-keys': 7.11.0
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
optionalDependencies: optionalDependencies:
@@ -6313,15 +6230,15 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@7.10.0': '@typescript-eslint/scope-manager@7.11.0':
dependencies: dependencies:
'@typescript-eslint/types': 7.10.0 '@typescript-eslint/types': 7.11.0
'@typescript-eslint/visitor-keys': 7.10.0 '@typescript-eslint/visitor-keys': 7.11.0
'@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/type-utils@7.11.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5) ts-api-utils: 1.3.0(typescript@5.4.5)
@@ -6330,12 +6247,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@7.10.0': {} '@typescript-eslint/types@7.11.0': {}
'@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)': '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/types': 7.10.0 '@typescript-eslint/types': 7.11.0
'@typescript-eslint/visitor-keys': 7.10.0 '@typescript-eslint/visitor-keys': 7.11.0
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
@@ -6347,20 +6264,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)': '@typescript-eslint/utils@7.11.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.10.0 '@typescript-eslint/scope-manager': 7.11.0
'@typescript-eslint/types': 7.10.0 '@typescript-eslint/types': 7.11.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5)
eslint: 8.57.0 eslint: 8.57.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@7.10.0': '@typescript-eslint/visitor-keys@7.11.0':
dependencies: dependencies:
'@typescript-eslint/types': 7.10.0 '@typescript-eslint/types': 7.11.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {} '@ungap/structured-clone@1.2.0': {}
@@ -6441,8 +6358,6 @@ snapshots:
ansi-regex@3.0.1: {} ansi-regex@3.0.1: {}
ansi-regex@4.1.1: {}
ansi-regex@5.0.1: {} ansi-regex@5.0.1: {}
ansi-regex@6.0.1: {} ansi-regex@6.0.1: {}
@@ -6580,16 +6495,6 @@ snapshots:
cosmiconfig: 7.1.0 cosmiconfig: 7.1.0
resolve: 1.22.8 resolve: 1.22.8
babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517:
dependencies:
'@babel/generator': 7.2.0
'@babel/types': 7.24.5
chalk: 4.1.2
invariant: 2.2.4
pretty-format: 24.9.0
zod: 3.23.8
zod-validation-error: 2.1.0(zod@3.23.8)
bail@2.0.2: {} bail@2.0.2: {}
balanced-match@1.0.2: {} balanced-match@1.0.2: {}
@@ -7268,12 +7173,12 @@ snapshots:
dependencies: dependencies:
eslint: 8.57.0 eslint: 8.57.0
eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0): eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0):
dependencies: dependencies:
eslint: 8.57.0 eslint: 8.57.0
eslint-plugin-import: 2.29.1(eslint@8.57.0) eslint-plugin-import: 2.29.1(eslint@8.57.0)
eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0)
eslint-plugin-promise: 6.1.1(eslint@8.57.0) eslint-plugin-promise: 6.2.0(eslint@8.57.0)
eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(eslint@8.57.0)): eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(eslint@8.57.0)):
dependencies: dependencies:
@@ -7356,11 +7261,11 @@ snapshots:
optionalDependencies: optionalDependencies:
eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-config-prettier: 9.1.0(eslint@8.57.0)
eslint-plugin-promise@6.1.1(eslint@8.57.0): eslint-plugin-promise@6.2.0(eslint@8.57.0):
dependencies: dependencies:
eslint: 8.57.0 eslint: 8.57.0
eslint-plugin-react@7.34.1(eslint@8.57.0): eslint-plugin-react@7.34.2(eslint@8.57.0):
dependencies: dependencies:
array-includes: 3.1.8 array-includes: 3.1.8
array.prototype.findlast: 1.2.5 array.prototype.findlast: 1.2.5
@@ -7952,10 +7857,6 @@ snapshots:
intersection-observer@0.12.2: {} intersection-observer@0.12.2: {}
invariant@2.2.4:
dependencies:
loose-envify: 1.4.0
ip-address@9.0.5: ip-address@9.0.5:
dependencies: dependencies:
jsbn: 1.1.0 jsbn: 1.1.0
@@ -9007,13 +8908,6 @@ snapshots:
prettier@3.2.5: {} prettier@3.2.5: {}
pretty-format@24.9.0:
dependencies:
'@jest/types': 24.9.0
ansi-regex: 4.1.1
ansi-styles: 3.2.1
react-is: 16.13.1
progress@2.0.3: {} progress@2.0.3: {}
prop-types@15.8.1: prop-types@15.8.1:
@@ -9380,9 +9274,9 @@ snapshots:
shell-quote@1.8.1: {} shell-quote@1.8.1: {}
shiki@1.6.0: shiki@1.6.1:
dependencies: dependencies:
'@shikijs/core': 1.6.0 '@shikijs/core': 1.6.1
side-channel@1.0.6: side-channel@1.0.6:
dependencies: dependencies:
@@ -9760,8 +9654,6 @@ snapshots:
trim-lines@3.0.1: {} trim-lines@3.0.1: {}
trim-right@1.0.1: {}
trough@2.2.0: {} trough@2.2.0: {}
ts-api-utils@1.3.0(typescript@5.4.5): ts-api-utils@1.3.0(typescript@5.4.5):
@@ -10197,10 +10089,4 @@ snapshots:
yocto-queue@1.0.0: {} yocto-queue@1.0.0: {}
zod-validation-error@2.1.0(zod@3.23.8):
dependencies:
zod: 3.23.8
zod@3.23.8: {}
zwitch@2.0.4: {} zwitch@2.0.4: {}

7
clash-verge-rev/.babelrc Normal file
View File

@@ -0,0 +1,7 @@
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
]
}

View File

@@ -38,7 +38,6 @@
"meta-json-schema": "1.18.5-alpha", "meta-json-schema": "1.18.5-alpha",
"monaco-editor": "^0.47.0", "monaco-editor": "^0.47.0",
"monaco-yaml": "^5.1.1", "monaco-yaml": "^5.1.1",
"types-pac": "^1.0.2",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@@ -51,10 +50,15 @@
"react-virtuoso": "^4.7.10", "react-virtuoso": "^4.7.10",
"recoil": "^0.7.7", "recoil": "^0.7.7",
"swr": "^1.3.0", "swr": "^1.3.0",
"tar": "^6.2.1" "tar": "^6.2.1",
"types-pac": "^1.0.2"
}, },
"devDependencies": { "devDependencies": {
"@actions/github": "^5.1.1", "@actions/github": "^5.1.1",
"@babel/preset-env": "^7.24.6",
"@babel/preset-react": "^7.24.6",
"@babel/preset-typescript": "^7.24.6",
"@rollup/plugin-babel": "^6.0.4",
"@tauri-apps/cli": "^1.5.13", "@tauri-apps/cli": "^1.5.13",
"@types/fs-extra": "^9.0.13", "@types/fs-extra": "^9.0.13",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
@@ -62,7 +66,7 @@
"@types/react": "^18.3.1", "@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@types/react-transition-group": "^4.4.10", "@types/react-transition-group": "^4.4.10",
"@vitejs/plugin-react": "^4.2.1", "@vitejs/plugin-react": "^4.3.0",
"adm-zip": "^0.5.12", "adm-zip": "^0.5.12",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"fs-extra": "^11.2.0", "fs-extra": "^11.2.0",

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,26 @@ import { defineConfig } from "vite";
import path from "path"; import path from "path";
import svgr from "vite-plugin-svgr"; import svgr from "vite-plugin-svgr";
import react from "@vitejs/plugin-react"; import react from "@vitejs/plugin-react";
import { babel } from "@rollup/plugin-babel";
import monacoEditor from "vite-plugin-monaco-editor"; import monacoEditor from "vite-plugin-monaco-editor";
// https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
root: "src", root: "src",
server: { port: 3000 }, server: { port: 3000 },
plugins: [ plugins: [
svgr(), svgr(),
react(), react(),
{
apply: "build", // apply only for build, not for serve
...babel({
babelHelpers: "bundled",
extensions: [".js", ".jsx", ".ts", ".tsx"],
targets: {
edge: "109", // last version to support Windows 7
safari: "13", // macOS 10.15 Catalina
},
}),
},
monacoEditor({ monacoEditor({
languageWorkers: ["editorWorkerService", "typescript", "css"], languageWorkers: ["editorWorkerService", "typescript", "css"],
customWorkers: [ customWorkers: [

View File

@@ -0,0 +1,153 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "mt7621.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
/ {
compatible = "openfi,5pro", "mediatek,mt7621-soc";
model = "OpenFi 5Pro";
aliases {
led-boot = &led_system_blue;
led-failsafe = &led_system_blue;
led-running = &led_system_blue;
led-upgrade = &led_system_blue;
};
chosen {
bootargs = "console=ttyS0,115200";
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
};
leds {
compatible = "gpio-leds";
led_system_blue: led-0 {
label = "blue:system";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
};
led_internet_blue: led-1 {
label = "blue:internet";
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
};
led_wifi_blue: led-2 {
label = "blue:wifi";
color = <LED_COLOR_ID_BLUE>;
linux,default-trigger = "phy0tpt";
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
};
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <45000000>;
broken-flash-reset;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "bootloader";
reg = <0x0 0x30000>;
read-only;
};
partition@30000 {
label = "config";
reg = <0x30000 0x10000>;
read-only;
};
factory: partition@40000 {
label = "factory";
reg = <0x40000 0x10000>;
read-only;
};
partition@50000 {
compatible = "denx,uimage";
label = "firmware";
reg = <0x50000 0x3f00000>;
};
};
};
};
&pcie {
status = "okay";
};
&pcie0 {
mt76@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x0>;
ieee80211-freq-limit = <2400000 2500000>;
};
};
&pcie1 {
wifi1: mt76@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x8000>;
ieee80211-freq-limit = <5000000 6000000>;
};
};
&gmac0 {
mtd-mac-address = <&factory 0xe000>;
};
&switch0 {
ports {
port@0 {
status = "okay";
label = "wan";
mtd-mac-address = <&factory 0xe006>;
};
port@1 {
status = "okay";
label = "lan";
};
};
};
&state_default {
gpio {
groups = "wdt", "i2c", "jtag";
function = "gpio";
};
};

View File

@@ -1401,6 +1401,15 @@ define Device/netis_wf2881
endef endef
TARGET_DEVICES += netis_wf2881 TARGET_DEVICES += netis_wf2881
define Device/openfi_5pro
$(Device/dsa-migration)
IMAGE_SIZE := 63448k
DEVICE_VENDOR := OpenFi
DEVICE_MODEL := 5Pro
DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615e kmod-mt7663-firmware-ap kmod-usb3
endef
TARGET_DEVICES += openfi_5pro
define Device/oraybox_x3a define Device/oraybox_x3a
$(Device/dsa-migration) $(Device/dsa-migration)
$(Device/uimage-lzma-loader) $(Device/uimage-lzma-loader)

View File

@@ -30,6 +30,7 @@ ramips_setup_interfaces()
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan" ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
;; ;;
asiarf,ap7621-001|\ asiarf,ap7621-001|\
openfi,5pro|\
winstars,ws-wn583a6) winstars,ws-wn583a6)
ucidef_set_interfaces_lan_wan "lan" "wan" ucidef_set_interfaces_lan_wan "lan" "wan"
;; ;;

View File

@@ -6,5 +6,5 @@ func init() {
version := windows.RtlGetVersion() version := windows.RtlGetVersion()
WindowsMajorVersion = version.MajorVersion WindowsMajorVersion = version.MajorVersion
WindowsMinorVersion = version.MinorVersion WindowsMinorVersion = version.MinorVersion
WindowsBuildNumber = version.MinorVersion WindowsBuildNumber = version.BuildNumber
} }

View File

@@ -6,7 +6,7 @@ icon: material/alert-decagram
* Add tailing comma support in JSON configuration * Add tailing comma support in JSON configuration
* Add simple auto redirect for Android **1** * Add simple auto redirect for Android **1**
* Add bittorrent sniffer **2** * Add BitTorrent sniffer **2**
**1**: **1**:
@@ -20,8 +20,6 @@ See [Redirect](/configuration/inbound/redirect/).
**2**: **2**:
It doesn't exactly work right now. Do not use it for anything other than blocking bittorrent traffics.
See [Protocol Sniff](/configuration/route/sniff/). See [Protocol Sniff](/configuration/route/sniff/).
### 1.9.0 ### 1.9.0

View File

@@ -2,7 +2,7 @@
icon: material/new-box icon: material/new-box
--- ---
!!! quote "Changes in sing-box 1.9.0" !!! quote "Changes in sing-box 1.10.0"
:material-plus: [auto_redirect](#auto_redirect) :material-plus: [auto_redirect](#auto_redirect)

View File

@@ -9,6 +9,7 @@ import (
"github.com/sagernet/sing-box" "github.com/sagernet/sing-box"
"github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/common/process" "github.com/sagernet/sing-box/common/process"
"github.com/sagernet/sing-box/experimental/libbox/platform"
"github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/option"
"github.com/sagernet/sing-tun" "github.com/sagernet/sing-tun"
"github.com/sagernet/sing/common/control" "github.com/sagernet/sing/common/control"
@@ -97,6 +98,14 @@ func (s *platformInterfaceStub) FindProcessInfo(ctx context.Context, network str
return nil, os.ErrInvalid return nil, os.ErrInvalid
} }
func (s *platformInterfaceStub) PerAppProxyList() ([]uint32, error) {
return nil, os.ErrInvalid
}
func (s *platformInterfaceStub) PerAppProxyMode() int32 {
return platform.PerAppProxyModeDisabled
}
type interfaceMonitorStub struct{} type interfaceMonitorStub struct{}
func (s *interfaceMonitorStub) Start() error { func (s *interfaceMonitorStub) Start() error {

View File

@@ -22,6 +22,8 @@ type PlatformInterface interface {
IncludeAllNetworks() bool IncludeAllNetworks() bool
ReadWIFIState() *WIFIState ReadWIFIState() *WIFIState
ClearDNSCache() ClearDNSCache()
PerAppProxyList() (IntegerIterator, error)
PerAppProxyMode() int32
} }
type TunInterface interface { type TunInterface interface {
@@ -54,6 +56,11 @@ type NetworkInterfaceIterator interface {
HasNext() bool HasNext() bool
} }
type IntegerIterator interface {
Next() int32
HasNext() bool
}
type OnDemandRule interface { type OnDemandRule interface {
Target() int32 Target() int32
DNSSearchDomainMatch() StringIterator DNSSearchDomainMatch() StringIterator

View File

@@ -11,6 +11,12 @@ import (
"github.com/sagernet/sing/common/logger" "github.com/sagernet/sing/common/logger"
) )
const (
PerAppProxyModeDisabled int32 = iota
PerAppProxyModeExclude
PerAppProxyModeInclude
)
type Interface interface { type Interface interface {
Initialize(ctx context.Context, router adapter.Router) error Initialize(ctx context.Context, router adapter.Router) error
UsePlatformAutoDetectInterfaceControl() bool UsePlatformAutoDetectInterfaceControl() bool
@@ -24,5 +30,7 @@ type Interface interface {
IncludeAllNetworks() bool IncludeAllNetworks() bool
ClearDNSCache() ClearDNSCache()
ReadWIFIState() adapter.WIFIState ReadWIFIState() adapter.WIFIState
PerAppProxyList() ([]uint32, error)
PerAppProxyMode() int32
process.Searcher process.Searcher
} }

View File

@@ -229,6 +229,18 @@ func (w *platformInterfaceWrapper) ReadWIFIState() adapter.WIFIState {
return (adapter.WIFIState)(*wifiState) return (adapter.WIFIState)(*wifiState)
} }
func (w *platformInterfaceWrapper) PerAppProxyList() ([]uint32, error) {
uidIterator, err := w.iif.PerAppProxyList()
if err != nil {
return nil, err
}
return common.Map(iteratorToArray[int32](uidIterator), func(it int32) uint32 { return uint32(it) }), nil
}
func (w *platformInterfaceWrapper) PerAppProxyMode() int32 {
return w.iif.PerAppProxyMode()
}
func (w *platformInterfaceWrapper) DisableColors() bool { func (w *platformInterfaceWrapper) DisableColors() bool {
return runtime.GOOS != "android" return runtime.GOOS != "android"
} }

View File

@@ -19,7 +19,7 @@ func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, o
case C.TypeTun: case C.TypeTun:
return NewTun(ctx, router, logger, options.Tag, options.TunOptions, platformInterface) return NewTun(ctx, router, logger, options.Tag, options.TunOptions, platformInterface)
case C.TypeRedirect: case C.TypeRedirect:
return NewRedirect(ctx, router, logger, options.Tag, options.RedirectOptions) return NewRedirect(ctx, router, logger, options.Tag, options.RedirectOptions, platformInterface)
case C.TypeTProxy: case C.TypeTProxy:
return NewTProxy(ctx, router, logger, options.Tag, options.TProxyOptions), nil return NewTProxy(ctx, router, logger, options.Tag, options.TProxyOptions), nil
case C.TypeDirect: case C.TypeDirect:

View File

@@ -7,11 +7,13 @@ import (
"net/netip" "net/netip"
"os" "os"
"os/exec" "os/exec"
"sort"
"strings" "strings"
"github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/common/redir" "github.com/sagernet/sing-box/common/redir"
C "github.com/sagernet/sing-box/constant" C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/experimental/libbox/platform"
"github.com/sagernet/sing-box/log" "github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/option"
"github.com/sagernet/sing/common" "github.com/sagernet/sing/common"
@@ -24,12 +26,13 @@ import (
type Redirect struct { type Redirect struct {
myInboundAdapter myInboundAdapter
autoRedirect option.AutoRedirectOptions platformInterface platform.Interface
needSu bool autoRedirect option.AutoRedirectOptions
suPath string needSu bool
suPath string
} }
func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.RedirectInboundOptions) (*Redirect, error) { func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.RedirectInboundOptions, platformInterface platform.Interface) (*Redirect, error) {
redirect := &Redirect{ redirect := &Redirect{
myInboundAdapter: myInboundAdapter{ myInboundAdapter: myInboundAdapter{
protocol: C.TypeRedirect, protocol: C.TypeRedirect,
@@ -40,7 +43,8 @@ func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextL
tag: tag, tag: tag,
listenOptions: options.ListenOptions, listenOptions: options.ListenOptions,
}, },
autoRedirect: common.PtrValueOrDefault(options.AutoRedirect), platformInterface: platformInterface,
autoRedirect: common.PtrValueOrDefault(options.AutoRedirect),
} }
if redirect.autoRedirect.Enabled { if redirect.autoRedirect.Enabled {
if !C.IsAndroid { if !C.IsAndroid {
@@ -101,21 +105,73 @@ func (r *Redirect) Close() error {
} }
func (r *Redirect) setupRedirect() error { func (r *Redirect) setupRedirect() error {
myUid := os.Getuid() tableName := "sing-box"
tcpPort := M.AddrPortFromNet(r.tcpListener.Addr()).Port() rules := `
interfaceRules := common.FlatMap(r.router.(adapter.Router).InterfaceFinder().Interfaces(), func(it control.Interface) []string {
return common.Map(common.Filter(it.Addresses, func(it netip.Prefix) bool { return it.Addr().Is4() }), func(it netip.Prefix) string {
return "iptables -t nat -A sing-box -p tcp -j RETURN -d " + it.String()
})
})
return r.runAndroidShell(`
set -e -o pipefail set -e -o pipefail
iptables -t nat -N sing-box iptables -t nat -N sing-box
` + strings.Join(interfaceRules, "\n") + ` `
iptables -t nat -A sing-box -j RETURN -m owner --uid-owner ` + F.ToString(myUid) + ` rules += strings.Join(common.FlatMap(r.router.(adapter.Router).InterfaceFinder().Interfaces(), func(it control.Interface) []string {
iptables -t nat -A sing-box -p tcp -j REDIRECT --to-ports ` + F.ToString(tcpPort) + ` return common.Map(common.Filter(it.Addresses, func(it netip.Prefix) bool { return it.Addr().Is4() }), func(it netip.Prefix) string {
iptables -t nat -A OUTPUT -p tcp -j sing-box return "iptables -t nat -A " + tableName + " -p tcp -j RETURN -d " + it.String()
`) })
}), "\n")
var (
myUid = uint32(os.Getuid())
perAppProxyList []uint32
perAppProxyMap = make(map[uint32]bool)
perAppProxyMode int32
err error
)
if r.platformInterface != nil {
perAppProxyMode = r.platformInterface.PerAppProxyMode()
if perAppProxyMode != platform.PerAppProxyModeDisabled {
perAppProxyList, err = r.platformInterface.PerAppProxyList()
if err != nil {
return E.Cause(err, "read per app proxy configuration")
}
}
for _, proxyUID := range perAppProxyList {
perAppProxyMap[proxyUID] = true
}
}
excludeUser := func(userID uint32) {
if perAppProxyMode != platform.PerAppProxyModeInclude {
perAppProxyMap[userID] = false
} else {
delete(perAppProxyMap, userID)
}
}
excludeUser(myUid)
if myUid != 0 && myUid != 2000 {
excludeUser(0)
}
perAppProxyList = perAppProxyList[:0]
for uid := range perAppProxyMap {
perAppProxyList = append(perAppProxyList, uid)
}
sort.SliceStable(perAppProxyList, func(i, j int) bool {
return perAppProxyList[i] < perAppProxyList[j]
})
redirectPortStr := F.ToString(M.AddrPortFromNet(r.tcpListener.Addr()).Port())
if perAppProxyMode != platform.PerAppProxyModeInclude {
rules += "\n" + strings.Join(common.Map(perAppProxyList, func(it uint32) string {
return "iptables -t nat -A " + tableName + " -j RETURN -m owner --uid-owner " + F.ToString(it)
}), "\n")
rules += "\niptables -t nat -A " + tableName + " -p tcp -j REDIRECT --to-ports " + redirectPortStr
} else {
rules += "\n" + strings.Join(common.Map(perAppProxyList, func(it uint32) string {
return "iptables -t nat -A " + tableName + " -p tcp -j REDIRECT --to-ports " + redirectPortStr + " -m owner --uid-owner " + F.ToString(it)
}), "\n")
}
rules += "\niptables -t nat -A OUTPUT -p tcp -j " + tableName
for _, ruleLine := range strings.Split(rules, "\n") {
ruleLine = strings.TrimSpace(ruleLine)
if ruleLine == "" {
continue
}
r.logger.Debug("# ", ruleLine)
}
return r.runAndroidShell(rules)
} }
func (r *Redirect) cleanupRedirect() { func (r *Redirect) cleanupRedirect() {

View File

@@ -1,3 +1,7 @@
<!--
SPDX-FileCopyrightText: 2024 suyu Emulator Project
SPDX-License-Identifier: GPL-3.0-or-later
-->
# Migrating from yuzu # Migrating from yuzu
When coming from yuzu, the migration is as easy as renaming some directories. When coming from yuzu, the migration is as easy as renaming some directories.

View File

@@ -60,4 +60,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 3e6393519555a41d4672846cccbb38ef2c16f21f PODFILE CHECKSUM: 3e6393519555a41d4672846cccbb38ef2c16f21f
COCOAPODS: 1.12.1 COCOAPODS: 1.15.2

View File

@@ -3,7 +3,7 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 51; objectVersion = 54;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
@@ -756,7 +756,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
@@ -815,7 +815,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
SDKROOT = macosx; SDKROOT = macosx;
@@ -833,12 +833,13 @@
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 4.1.0; CURRENT_PROJECT_VERSION = 4.1.0;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = RJYEH6TCJD; DEVELOPMENT_TEAM = "";
ENABLE_ONLY_ACTIVE_RESOURCES = YES; ENABLE_ONLY_ACTIVE_RESOURCES = YES;
INFOPLIST_FILE = V2rayU/Info.plist; INFOPLIST_FILE = V2rayU/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = V2rayU; INFOPLIST_KEY_CFBundleDisplayName = V2rayU;
@@ -846,7 +847,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.1.0; MARKETING_VERSION = 4.1.0;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU; PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU;
@@ -855,7 +856,7 @@
SKIP_INSTALL = NO; SKIP_INSTALL = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Common/V2rayU-Bridging-header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Common/V2rayU-Bridging-header.h";
SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.2; SWIFT_VERSION = 5.0;
}; };
name = Debug; name = Debug;
}; };
@@ -866,12 +867,13 @@
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 4.1.0; CURRENT_PROJECT_VERSION = 4.1.0;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = RJYEH6TCJD; DEVELOPMENT_TEAM = "";
ENABLE_ONLY_ACTIVE_RESOURCES = YES; ENABLE_ONLY_ACTIVE_RESOURCES = YES;
INFOPLIST_FILE = V2rayU/Info.plist; INFOPLIST_FILE = V2rayU/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = V2rayU; INFOPLIST_KEY_CFBundleDisplayName = V2rayU;
@@ -879,7 +881,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.1.0; MARKETING_VERSION = 4.1.0;
ONLY_ACTIVE_ARCH = NO; ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU; PRODUCT_BUNDLE_IDENTIFIER = net.yanue.V2rayU;
@@ -888,7 +890,7 @@
SKIP_INSTALL = NO; SKIP_INSTALL = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Common/V2rayU-Bridging-header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Common/V2rayU-Bridging-header.h";
SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.2; SWIFT_VERSION = 5.0;
}; };
name = Release; name = Release;
}; };
@@ -899,9 +901,9 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = RJYEH6TCJD; DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
}; };
@@ -914,9 +916,9 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = RJYEH6TCJD; DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14; MACOSX_DEPLOYMENT_TARGET = 10.15;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
}; };

View File

@@ -18,9 +18,7 @@ let second: Double = 1000000
let pingURL = URL(string: "http://www.gstatic.com/generate_204")! let pingURL = URL(string: "http://www.gstatic.com/generate_204")!
class PingSpeed: NSObject { class PingSpeed: NSObject {
let lock = NSLock()
let semaphore = DispatchSemaphore(value: 30) // work pool let semaphore = DispatchSemaphore(value: 30) // work pool
var group = DispatchGroup()
func pingAll() { func pingAll() {
NSLog("ping start") NSLog("ping start")
@@ -28,6 +26,7 @@ class PingSpeed: NSObject {
NSLog("ping inPing") NSLog("ping inPing")
return return
} }
// make sure core file // make sure core file
V2rayLaunch.checkV2rayCore() V2rayLaunch.checkV2rayCore()
// in ping // in ping
@@ -51,26 +50,47 @@ class PingSpeed: NSObject {
DispatchQueue.main.async { DispatchQueue.main.async {
menuController.setStatusMenuTip(pingTip: pingTip) menuController.setStatusMenuTip(pingTip: pingTip)
} }
let thread = Thread{ Task {
self.runTask(items: itemList) do {
} try await pingTaskGroup(items: itemList)
thread.start() } catch let error {
} NSLog("pingTaskGroup error: \(error)")
func runTask(items: [V2rayItem]) {
self.group = DispatchGroup()
let pingQueue = DispatchQueue(label: "pingQueue", qos: .background, attributes: .concurrent)
for item in items {
self.group.enter() // DispatchGroup
pingQueue.async {
// ,
self.semaphore.wait()
// run ping by async queue
self.pingEachServer(item: item)
} }
} }
self.group.wait() // }
print("All tasks finished")
func pingTaskGroup(items: [V2rayItem]) async throws {
await withThrowingTaskGroup(of: Int.self) { group in
for item in items {
group.addTask {
do {
await self.semaphore.wait()
defer {
self.semaphore.signal()
}
try await self.pingEachServer(item: item)
} catch let error {
NSLog("pingEachServer error: \(error)")
}
return 1
}
}
}
print("pingTaskGroup end")
self.pingEnd()
}
func pingEachServer(item: V2rayItem) async throws {
NSLog("ping \(item.name) - \(item.remark)")
if !item.isValid {
return
}
// ping
let t = PingServer(item: item)
try await t.doPing()
}
func pingEnd() {
inPing = false inPing = false
let langStr = Locale.current.languageCode let langStr = Locale.current.languageCode
var pingTip: String = "" var pingTip: String = ""
@@ -79,33 +99,14 @@ class PingSpeed: NSObject {
} else { } else {
pingTip = "Ping" pingTip = "Ping"
} }
print("pingTaskGroup pingEnd", pingTip)
DispatchQueue.main.async { DispatchQueue.main.async {
menuController.setStatusMenuTip(pingTip: pingTip) menuController.setStatusMenuTip(pingTip: pingTip)
}
DispatchQueue.main.async {
menuController.showServers() menuController.showServers()
} }
// kill // kill
killAllPing() killAllPing()
} }
func pingEachServer(item: V2rayItem) {
NSLog("ping \(item.name) - \(item.remark)")
if !item.isValid {
// refresh servers
ping.pingEnd(item: item)
return
}
// ping
PingServer(item: item).doPing()
}
func pingEnd(item: V2rayItem) {
lock.lock()
self.semaphore.signal() //
self.group.leave() // DispatchGroup
lock.unlock()
}
} }
class PingServer: NSObject, URLSessionDataDelegate { class PingServer: NSObject, URLSessionDataDelegate {
@@ -120,7 +121,7 @@ class PingServer: NSObject, URLSessionDataDelegate {
super.init() // can actually be omitted in this example because will happen automatically. super.init() // can actually be omitted in this example because will happen automatically.
} }
func doPing() { func doPing() async throws {
let (_, _bindPort) = getUsablePort(port: uint16(Int.random(in: 9000 ... 36500))) let (_, _bindPort) = getUsablePort(port: uint16(Int.random(in: 9000 ... 36500)))
NSLog("doPing: \(item.name)-\(item.remark) - \(_bindPort)") NSLog("doPing: \(item.name)-\(item.remark) - \(_bindPort)")
@@ -154,10 +155,13 @@ class PingServer: NSObject, URLSessionDataDelegate {
// sleep for wait v2ray process instanse // sleep for wait v2ray process instanse
usleep(useconds_t(2 * second)) usleep(useconds_t(2 * second))
// url request
let session = URLSession(configuration: getProxyUrlSessionConfigure(httpProxyPort: bindPort), delegate: self, delegateQueue: nil) let session = URLSession(configuration: getProxyUrlSessionConfigure(httpProxyPort: bindPort), delegate: self, delegateQueue: nil)
let task = session.dataTask(with: URLRequest(url: pingURL)) do {
task.resume() let (_,_) = try await session.data(for: URLRequest(url: pingURL))
} catch let error {
// failed to write file bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding
NSLog("session request fail: \(error)")
}
} }
func createV2rayJsonFileForPing() { func createV2rayJsonFileForPing() {
@@ -226,9 +230,6 @@ class PingServer: NSObject, URLSessionDataDelegate {
} catch let error { } catch let error {
print("remove ping config error: \(error)") print("remove ping config error: \(error)")
} }
// refresh servers
ping.pingEnd(item: item)
} }
} }
@@ -241,17 +242,34 @@ class PingCurrent: NSObject, URLSessionDataDelegate {
super.init() // can actually be omitted in this example because will happen automatically. super.init() // can actually be omitted in this example because will happen automatically.
} }
func doPing() { func doPing() {
Task {
do {
try await _doPing()
pingCurrentEnd()
} catch let error {
NSLog("doPing error: \(error)")
}
}
}
func _doPing() async throws {
inPingCurrent = true inPingCurrent = true
usleep(useconds_t(1 * second))
NSLog("PingCurrent start: try=\(tryPing),item=\(item.remark)") NSLog("PingCurrent start: try=\(tryPing),item=\(item.remark)")
// set URLSessionDataDelegate // set URLSessionDataDelegate
let config = getProxyUrlSessionConfigure() let config = getProxyUrlSessionConfigure()
config.timeoutIntervalForRequest = 3 config.timeoutIntervalForRequest = 3
// url request // url request
let session = URLSession(configuration: config, delegate: self, delegateQueue: nil) let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
let task = session.dataTask(with: URLRequest(url: pingURL))
task.resume()
tryPing += 1 tryPing += 1
do {
let (data, response) = try await session.data(for: URLRequest(url: pingURL))
print("doPing: ", data, response)
} catch let error {
// failed to write file bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding
NSLog("save json file fail: \(error)")
}
} }
// MARK: - URLSessionDataDelegate // MARK: - URLSessionDataDelegate
@@ -272,7 +290,6 @@ class PingCurrent: NSObject, URLSessionDataDelegate {
} }
// save // save
item.store() item.store()
pingCurrentEnd()
} }
func pingCurrentEnd() { func pingCurrentEnd() {

View File

@@ -235,10 +235,9 @@ class V2raySubItem: NSObject, NSCoding {
let NOTIFY_UPDATE_SubSync = Notification.Name(rawValue: "NOTIFY_UPDATE_SubSync") let NOTIFY_UPDATE_SubSync = Notification.Name(rawValue: "NOTIFY_UPDATE_SubSync")
class V2raySubSync: NSObject { class V2raySubSync: NSObject {
let lock = NSLock()
var V2raySubSyncing = false var V2raySubSyncing = false
var group = DispatchGroup() let semaphore = DispatchSemaphore(value: 2) // work pool
static var shared = V2raySubSync() static var shared = V2raySubSync()
// Initialization // Initialization
override init() { override init() {
@@ -255,27 +254,42 @@ class V2raySubSync: NSObject {
self.V2raySubSyncing = true self.V2raySubSyncing = true
NSLog("V2raySubSync start") NSLog("V2raySubSync start")
let thread = Thread { V2raySubscription.loadConfig()
V2raySubscription.loadConfig()
let list = V2raySubscription.list() let list = V2raySubscription.list()
if list.count == 0 { if list.count == 0 {
self.logTip(title: "fail: ", uri: "", informativeText: " please add Subscription Url") self.logTip(title: "fail: ", uri: "", informativeText: " please add Subscription Url")
}
// sync queue with DispatchGroup
Task {
do {
try await self.syncTaskGroup(items: list)
} catch let error {
NSLog("pingTaskGroup error: \(error)")
} }
// sync queue with DispatchGroup }
self.group = DispatchGroup() }
let subQueue = DispatchQueue(label: "subQueue", qos: .background)
for item in list { func syncTaskGroup(items: [V2raySubItem]) async throws {
subQueue.sync { await withThrowingTaskGroup(of: Int.self) { group in
self.group.enter() for item in items {
self.dlFromUrl(url: item.url, subscribe: item.name) group.addTask {
do {
await self.semaphore.wait()
defer {
self.semaphore.signal()
}
try await self.dlFromUrl(url: item.url, subscribe: item.name)
} catch let error {
NSLog("syncTaskGroup error: \(error)")
}
return 1
} }
} }
self.group.wait()
NSLog("V2raySubSync end")
self.refreshMenu()
} }
thread.start() print("syncTaskGroup end")
self.refreshMenu()
} }
func refreshMenu() { func refreshMenu() {
@@ -293,40 +307,27 @@ class V2raySubSync: NSObject {
} }
} }
func importEnd(url: String, subscribe: String) { public func dlFromUrl(url: String, subscribe: String) async throws {
self.group.leave()
}
public func dlFromUrl(url: String, subscribe: String) {
logTip(title: "loading from : ", uri: "", informativeText: url + "\n\n") logTip(title: "loading from : ", uri: "", informativeText: url + "\n\n")
guard let reqUrl = URL(string: url) else { guard let reqUrl = URL(string: url) else {
logTip(title: "loading from : ", uri: "", informativeText: "url is not valid: " + url + "\n\n") logTip(title: "loading from : ", uri: "", informativeText: "url is not valid: " + url + "\n\n")
self.importEnd(url: url, subscribe: subscribe)
return return
} }
// url request with proxy // url request with proxy
let session = URLSession(configuration: getProxyUrlSessionConfigure()) let session = URLSession(configuration: getProxyUrlSessionConfigure())
let task = session.dataTask(with: URLRequest(url: reqUrl)){(data: Data?, response: URLResponse?, error: Error?) in do {
defer { let (data, _) = try await session.data(for: URLRequest(url: reqUrl))
self.importEnd(url: url, subscribe: subscribe) if let outputStr = String(data: data, encoding: String.Encoding.utf8) {
} self.handle(base64Str: outputStr, subscribe: subscribe, url: url)
if error != nil {
self.logTip(title: "loading fail: ", uri: url, informativeText: "error: \(String(describing: error))")
} else { } else {
if data != nil { self.logTip(title: "loading fail: ", uri: url, informativeText: "data is nil")
if let outputStr = String(data: data!, encoding: String.Encoding.utf8) {
self.handle(base64Str: outputStr, subscribe: subscribe, url: url)
} else {
self.logTip(title: "loading fail: ", uri: url, informativeText: "data is nil")
}
} else {
self.logTip(title: "loading fail: ", uri: url, informativeText: "data is nil")
}
} }
} catch let error {
// failed to write file bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding
NSLog("save json file fail: \(error)")
} }
task.resume()
} }
func handle(base64Str: String, subscribe: String, url: String) { func handle(base64Str: String, subscribe: String, url: String) {

View File

@@ -23,7 +23,7 @@ ADDITION = go build -o w$(NAME).exe -trimpath -ldflags "-H windowsgui $(LDFLAGS)
else else
OUTPUT = $(NAME) OUTPUT = $(NAME)
endif endif
ifeq ($(shell echo "$(GOARCH)" | grep -Pq "(mips|mipsle)" && echo true),true) # ifeq ($(shell echo "$(GOARCH)" | grep -Eq "(mips|mipsle)" && echo true),true) #
ADDITION = GOMIPS=softfloat go build -o $(NAME)_softfloat -trimpath -ldflags "$(LDFLAGS)" -v $(MAIN) ADDITION = GOMIPS=softfloat go build -o $(NAME)_softfloat -trimpath -ldflags "$(LDFLAGS)" -v $(MAIN)
endif endif
.PHONY: clean .PHONY: clean

View File

@@ -413,38 +413,78 @@ endif()
## Export build compilation database if possible ## Export build compilation database if possible
set(CMAKE_EXPORT_COMPILE_COMMANDS 1) set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
include(CMakeDependentOption)
option(CLI "Build with cli." ON) option(CLI "Build with cli." ON)
option(SERVER "Build with server." ON) option(SERVER "Build with server." ON)
option(GUI "Build against GUI." OFF) option(GUI "Build against GUI." OFF)
option(BUILD_TESTS "Build with test." OFF)
cmake_dependent_option(USE_GTK4
"Build with gtk4 (GUI)" ON
"GUI AND NOT WIN32 AND NOT APPLE AND NOT OHOS AND NOT ANDROID" OFF)
option(BUILD_BENCHMARKS "Build with benchmark." OFF) option(BUILD_BENCHMARKS "Build with benchmark." OFF)
option(BUILD_SHARED_LIBS "Build with shared libraries." OFF)
option(BUILD_TESTS "Build with test." OFF)
option(OPTIMIZED_PROTOC "Force protobuf compiler to be built with optimization" OFF) option(OPTIMIZED_PROTOC "Force protobuf compiler to be built with optimization" OFF)
option(USE_TCMALLOC "Build with tcmalloc (linux only)" OFF)
option(USE_TCMALLOC "Build with tcmalloc" OFF)
cmake_dependent_option(
USE_SYSTEM_TCMALLOC "Build with system or vendored tcmalloc" OFF
USE_TCMALLOC OFF)
option(USE_LIBCXX "Build with libc++" ON) option(USE_LIBCXX "Build with libc++" ON)
option(USE_NGHTTP2 "Build with libnghttp2" ON) option(USE_NGHTTP2 "Build with libnghttp2" ON)
option(USE_MOLD "Build with mold linker" OFF) cmake_dependent_option(
option(USE_LLD "Build with lld linker" OFF) USE_SYSTEM_NGHTTP2 "Build with system or vendored libnghttp2" OFF
option(USE_GOLD "Build with gold linker" OFF) USE_NGHTTP2 OFF)
option(USE_ICF "Build with ICF" OFF) option(USE_ICF "Build with ICF" OFF)
option(USE_LTO "Build with LTO" OFF) option(USE_LTO "Build with LTO" OFF)
option(USE_CURL "Build with libcurl (test only)" ON) option(USE_CURL "Build with libcurl (test only)" ON)
option(USE_CARES "Build with c-ares" ON) option(USE_CARES "Build with c-ares" ON)
option(BUILD_SHARED_LIBS "Build with shared libraries." OFF) cmake_dependent_option(
USE_SYSTEM_CARES "Build with system or vendored c-ares" OFF
USE_CARES OFF)
option(USE_BUILTIN_CA_BUNDLE_CRT "Build with embedded ca-bundle.crt support" ON) option(USE_BUILTIN_CA_BUNDLE_CRT "Build with embedded ca-bundle.crt support" ON)
option(USE_MBEDTLS "Build with mbedtls support" ON) option(USE_MBEDTLS "Build with mbedtls support" ON)
option(USE_BALSA_HTTP_PARSER "Build with balsa http parser" ON) cmake_dependent_option(
option(USE_LEVELDB "Build with leveldb" OFF) USE_SYSTEM_MBEDTLS "Build with system or vendored mbedtls" OFF
option(USE_SQLITE "Build with sqlite" OFF) USE_MBEDTLS OFF)
option(USE_OLD_SYSTEMD_SERVICE "Install with old systemd service files" OFF)
option(USE_QUICHE "Build with quiche support" ON) option(USE_QUICHE "Build with quiche support" ON)
cmake_dependent_option(
USE_BALSA_HTTP_PARSER "Build with balsa http parser" ON
USE_QUICHE OFF)
cmake_dependent_option(
USE_SYSTEM_HTTP_PARSER "Build with system or vendored http parser" OFF
"NOT USE_BALSA_HTTP_PARSER" OFF)
option(USE_LEVELDB "Build with leveldb" OFF)
option(USE_SQLITE "Build with sqlite" OFF)
cmake_dependent_option(
USE_SYSTEM_SQLITE "Build with system or vendored sqlite" OFF
USE_SQLITE OFF)
option(USE_OLD_SYSTEMD_SERVICE "Install with old systemd service files" OFF)
option(USE_IOURING "Build with io uring support" OFF) option(USE_IOURING "Build with io uring support" OFF)
option(USE_SYSTEM_ZLIB "Build with system or vendered zlib" OFF)
option(USE_SYSTEM_JSON "Build with system or vendered json library" OFF)
option(ENABLE_FORTIFY "Enable build with Fortify Source (linux only)" OFF) option(ENABLE_FORTIFY "Enable build with Fortify Source (linux only)" OFF)
option(ENABLE_LTO "Enable build with LTO" ON) option(ENABLE_LTO "Enable build with LTO" ON)
option(ENABLE_LLD "Enable build with LLD" ON) option(ENABLE_LLD "Enable build with LLD" ON)
option(ENABLE_GOLD "Enable build with GOLD" ON) option(ENABLE_GOLD "Enable build with GOLD" ON)
option(USE_GTK4 "Build with gtk4 if possible (GUI)" ON) option(USE_MOLD "Build with mold linker" OFF)
option(USE_LLD "Build with lld linker" OFF)
option(USE_GOLD "Build with gold linker" OFF)
# Dynamic users are supported from version 235 # Dynamic users are supported from version 235
# see https://0pointer.net/blog/dynamic-users-with-systemd.html # see https://0pointer.net/blog/dynamic-users-with-systemd.html
@@ -507,7 +547,7 @@ if (CMAKE_CROSSCOMPILING)
list(APPEND YASS_APP_FEATURES "crosscompile") list(APPEND YASS_APP_FEATURES "crosscompile")
endif() endif()
if (${CMAKE_BUILD_TYPE} MATCHES Release OR ${CMAKE_BUILD_TYPE} MATCHES MinSizeRel OR ${CMAKE_BUILD_TYPE} MATCHES RelWithDebInfo) if (upper_CMAKE_BUILD_TYPE MATCHES "RELEASE|MINSIZEREL|RELWITHDEBINFO")
message(STATUS "Release Build: ${CMAKE_BUILD_TYPE}") message(STATUS "Release Build: ${CMAKE_BUILD_TYPE}")
set(IS_RELEASE_BUILD ON) set(IS_RELEASE_BUILD ON)
else() else()
@@ -546,6 +586,19 @@ if (ENABLE_LTO AND IS_RELEASE_BUILD)
endif() endif()
endif() endif()
if (NOT MSVC)
if (USE_MOLD)
add_link_options(-fuse-ld=mold -Wl,--gdb-index)
list(APPEND YASS_APP_FEATURES "linker mold")
elseif (USE_LLD)
add_link_options(-fuse-ld=lld)
list(APPEND YASS_APP_FEATURES "linker lld")
elseif (USE_GOLD)
add_link_options(-fuse-ld=gold)
list(APPEND YASS_APP_FEATURES "linker gold")
endif()
endif()
if (COMPILER_MSVC AND USE_LIBCXX) if (COMPILER_MSVC AND USE_LIBCXX)
message(SEND_ERROR "Microsoft Visual C++ Compiler with libc++ support is not supported, please disabling it with -DUSE_LIBCXX=off") message(SEND_ERROR "Microsoft Visual C++ Compiler with libc++ support is not supported, please disabling it with -DUSE_LIBCXX=off")
endif() endif()
@@ -720,7 +773,7 @@ if(MSAN)
if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64") if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=memory") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=memory")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=memory") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=memory")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /fsanitize=memory") add_link_options(/fsanitize=memory)
else() else()
message(FATAL_ERROR "Cannot enable MSAN unless using Clang or Vistual Studio 2019 version 16.9") message(FATAL_ERROR "Cannot enable MSAN unless using Clang or Vistual Studio 2019 version 16.9")
endif() endif()
@@ -728,7 +781,7 @@ if(MSAN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer") set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer") add_link_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer)
endif() endif()
add_definitions(-DMEMORY_SANITIZER) add_definitions(-DMEMORY_SANITIZER)
list(APPEND YASS_APP_FEATURES "msan") list(APPEND YASS_APP_FEATURES "msan")
@@ -741,14 +794,14 @@ if(ASAN)
if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64") if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /fsanitize=address") add_link_options(/fsanitize=address)
else() else()
message(FATAL_ERROR "Cannot enable ASAN unless using Clang or Vistual Studio 2019 version 16.9") message(FATAL_ERROR "Cannot enable ASAN unless using Clang or Vistual Studio 2019 version 16.9")
endif() endif()
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer") add_link_options(-fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer)
endif() endif()
add_definitions(-DADDRESS_SANITIZER) add_definitions(-DADDRESS_SANITIZER)
list(APPEND YASS_APP_FEATURES "asan") list(APPEND YASS_APP_FEATURES "asan")
@@ -775,14 +828,14 @@ if(TSAN)
if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64") if (MSVC AND NOT MSVC_C_ARCHITECTURE_ID STREQUAL "arm64")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=thread") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=thread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=thread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=thread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /fsanitize=thread") add_link_options(/fsanitize=thread)
else() else()
message(FATAL_ERROR "Cannot enable TSAN unless using Clang or Vistual Studio 2019 version 16.9") message(FATAL_ERROR "Cannot enable TSAN unless using Clang or Vistual Studio 2019 version 16.9")
endif() endif()
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread") add_link_options(-fsanitize=thread)
endif() endif()
add_definitions(-DTHREAD_SANITIZER) add_definitions(-DTHREAD_SANITIZER)
list(APPEND YASS_APP_FEATURES "tsan") list(APPEND YASS_APP_FEATURES "tsan")
@@ -801,7 +854,7 @@ if(UBSAN)
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") add_link_options(-fsanitize=undefined)
endif() endif()
add_definitions(-DUNDEFINED_SANITIZER) add_definitions(-DUNDEFINED_SANITIZER)
list(APPEND YASS_APP_FEATURES "ubsan") list(APPEND YASS_APP_FEATURES "ubsan")
@@ -829,8 +882,7 @@ endif()
if (NOT MSAN AND NOT ASAN AND NOT TSAN AND NOT UBSAN) if (NOT MSAN AND NOT ASAN AND NOT TSAN AND NOT UBSAN)
if (NOT APPLE AND NOT MSVC AND NOT MINGW) if (NOT APPLE AND NOT MSVC AND NOT MINGW)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs -Wl,--as-needed") add_link_options(-Wl,-z,defs -Wl,--as-needed)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,defs -Wl,--as-needed")
endif() endif()
endif() endif()
@@ -862,16 +914,13 @@ if (NOT MSVC)
endif() endif()
if (APPLE) if (APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip") add_link_options(-Wl,-dead_strip)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-dead_strip")
else() else()
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections") add_link_options(-Wl,--gc-sections)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
endif() endif()
if (APPLE AND NOT USE_MOLD) if (APPLE AND NOT USE_MOLD)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,-no_data_in_code_info -Wl,-no_function_starts") add_link_options(-Wl,-no_data_in_code_info -Wl,-no_function_starts)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,-no_data_in_code_info -Wl,-no_function_starts")
endif() endif()
if (APPLE AND COMPILER_CLANG) if (APPLE AND COMPILER_CLANG)
@@ -948,8 +997,7 @@ if (NOT MSVC)
# directly there, not through the compiler driver. # directly there, not through the compiler driver.
# We don't link on goma, so this change is just for cleaner # We don't link on goma, so this change is just for cleaner
# internal linker invocations, for people who work on the build. # internal linker invocations, for people who work on the build.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -no-canonical-prefixes") add_link_options(-no-canonical-prefixes)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-canonical-prefixes")
endif() endif()
else() else()
# Enable function-level linking. # Enable function-level linking.
@@ -998,17 +1046,14 @@ else()
## Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions ## Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions
if (NOT MSVC_CRT_LINKAGE STREQUAL "static" AND NOT COMPILER_CLANG) if (NOT MSVC_CRT_LINKAGE STREQUAL "static" AND NOT COMPILER_CLANG)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /GL")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GL")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") add_link_options(/LTCG)
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")
endif() endif()
# lld's uac manifest is outdated and incompatible with windows xp # lld's uac manifest is outdated and incompatible with windows xp
if (USE_LLD) if (USE_LLD)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFESTUAC:NO") add_link_options(/MANIFESTUAC:NO)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFESTUAC:NO")
endif() endif()
## not omit stack frame pointer ## not omit stack frame pointer
@@ -1050,8 +1095,7 @@ else()
if (USE_LLD) if (USE_LLD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gcodeview-ghash") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gcodeview-ghash")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gcodeview-ghash") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gcodeview-ghash")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:GHASH") add_link_options(/DEBUG:GHASH)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG:GHASH")
endif() endif()
else() else()
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
@@ -1059,18 +1103,16 @@ else()
endif() endif()
# Tell linker to include symbol data # Tell linker to include symbol data
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG") add_link_options(/DEBUG)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
## Remove unreferenced data ## Remove unreferenced data
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /INCREMENTAL:NO /FIXED:NO") if (USE_ICF)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /INCREMENTAL:NO /FIXED:NO") add_link_options(/OPT:REF /OPT:ICF /INCREMENTAL:NO /FIXED:NO)
list(APPEND YASS_APP_FEATURES "ldflags icf")
list(APPEND YASS_APP_FEATURES "ldflags icf") endif()
# Tell linker to include FIXUP information symbol data # Tell linker to include FIXUP information symbol data
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /PROFILE") add_link_options(/PROFILE)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /PROFILE")
# Use constructor homing for debug info. This option reduces debug info # Use constructor homing for debug info. This option reduces debug info
# by emitting class type info only when constructors are emitted # by emitting class type info only when constructors are emitted
@@ -1082,18 +1124,18 @@ else()
if (USE_LLD) if (USE_LLD)
# Use a fake fixed base directory for paths in the pdb to make the pdb # Use a fake fixed base directory for paths in the pdb to make the pdb
# output fully deterministic and independent of the build directory. # output fully deterministic and independent of the build directory.
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /PDBSourcePath:o:\\fake\\prefix") # verified via llvm-pdbutil pdb2yaml -modules -module-files -subsections=lines,fc yass.pdb|grep Module
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /PDBSourcePath:o:\\fake\\prefix") # see https://reviews.llvm.org/D53021 and https://reviews.llvm.org/D48882
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /PDBSourcePath:o:\\fake\\prefix") if (upper_CMAKE_BUILD_TYPE MATCHES "RELEASE|MINSIZEREL")
set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /PDBSourcePath:o:\\fake\\prefix") add_link_options(/PDBSourcePath:o:\\fake\\prefix)
endif()
# Absolutize source file paths for PDB. Pass the real build directory # Absolutize source file paths for PDB. Pass the real build directory
# if the pdb contains source-level debug information and if linker # if the pdb contains source-level debug information and if linker
# reproducibility is not critical. # reproducibility is not critical.
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /PDBSourcePath:${CMAKE_CURRENT_BINARY_DIR}") if (upper_CMAKE_BUILD_TYPE MATCHES "DEBUG|RELWITHDEBINFO")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /PDBSourcePath:${CMAKE_CURRENT_BINARY_DIR}") add_link_options(/PDBSourcePath:${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /PDBSourcePath:${CMAKE_CURRENT_BINARY_DIR}") endif()
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /PDBSourcePath:${CMAKE_CURRENT_BINARY_DIR}")
endif() endif()
# Tells the compiler not to use absolute paths when passing the default # Tells the compiler not to use absolute paths when passing the default
@@ -1107,61 +1149,48 @@ endif()
## adopt Thin LTO ## adopt Thin LTO
if (LTO AND COMPILER_CLANG AND USE_MOLD) if (LTO AND COMPILER_CLANG AND USE_MOLD)
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-flto=thin>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
# TODO(lgrey): Enable unit splitting for Mac when supported. # TODO(lgrey): Enable unit splitting for Mac when supported.
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fsplit-lto-unit") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fsplit-lto-unit>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fsplit-lto-unit")
endif() endif()
if (NOT MSVC) if (NOT MSVC)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_link_options(-flto=thin)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
# In ThinLTO builds, we run at most one link process at a time, # In ThinLTO builds, we run at most one link process at a time,
# and let it use all cores. # and let it use all cores.
# TODO(thakis): Check if '=0' (that is, number of cores, instead # TODO(thakis): Check if '=0' (that is, number of cores, instead
# of "all" which means number of hardware threads) is faster. # of "all" which means number of hardware threads) is faster.
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=all") add_link_options(-Wl,--thinlto-jobs=all)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=all")
else() else()
include(ProcessorCount) include(ProcessorCount)
ProcessorCount(CPU_NUMBER) ProcessorCount(CPU_NUMBER)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=${CPU_NUMBER}") add_link_options(-Wl,--thinlto-jobs=${CPU_NUMBER})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=${CPU_NUMBER}")
endif() endif()
endif() endif()
if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE)) if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE))
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fwhole-program-vtables>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
if (NOT MSVC) if (NOT MSVC)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_link_options(-fwhole-program-vtables)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
endif() endif()
endif() endif()
endif() endif()
## adopt Thin LTO ## adopt Thin LTO
if (LTO AND COMPILER_CLANG AND USE_LLD) if (LTO AND COMPILER_CLANG AND USE_LLD)
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-flto=thin>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
if (NOT APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) if (NOT APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
# TODO(lgrey): Enable unit splitting for Mac when supported. # TODO(lgrey): Enable unit splitting for Mac when supported.
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fsplit-lto-unit") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fsplit-lto-unit>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fsplit-lto-unit")
endif() endif()
# Limit the size of the ThinLTO cache to the lesser of 10% of # Limit the size of the ThinLTO cache to the lesser of 10% of
# available disk space, 40GB and 100000 files. # available disk space, 40GB and 100000 files.
if (MSVC) set(cache_policy "cache_size=10%:cache_size_bytes=40g")
set(cache_policy "cache_size=10%:cache_size_bytes=40g")
else()
set(cache_policy "cache_size=10\\%:cache_size_bytes=40g")
endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
set(cache_policy "${cache_policy}:cache_size_files=100000") set(cache_policy "${cache_policy}:cache_size_files=100000")
@@ -1173,102 +1202,79 @@ if (LTO AND COMPILER_CLANG AND USE_LLD)
if (MSVC) if (MSVC)
# When using lld-link, the -flto option need only be added to the compile step # When using lld-link, the -flto option need only be added to the compile step
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} /opt:lldltojobs=all -mllvm:-import-instr-limit=${import_instr_limit} /lldltocache:thinlto-cache /lldltocachepolicy:${cache_policy}") add_link_options(/opt:lldltojobs=all -mllvm:-import-instr-limit=${import_instr_limit} /lldltocache:thinlto-cache /lldltocachepolicy:${cache_policy})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} /opt:lldltojobs=all -mllvm:-import-instr-limit=${import_instr_limit} /lldltocache:thinlto-cache /lldltocachepolicy:${cache_policy}")
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -mllvm:-disable-auto-upgrade-debug-info") add_link_options(-mllvm:-disable-auto-upgrade-debug-info)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -mllvm:-disable-auto-upgrade-debug-info")
endif() endif()
elseif (NOT MINGW) elseif (NOT MINGW)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_link_options(-flto=thin)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
# In ThinLTO builds, we run at most one link process at a time, # In ThinLTO builds, we run at most one link process at a time,
# and let it use all cores. # and let it use all cores.
# TODO(thakis): Check if '=0' (that is, number of cores, instead # TODO(thakis): Check if '=0' (that is, number of cores, instead
# of "all" which means number of hardware threads) is faster. # of "all" which means number of hardware threads) is faster.
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=all") add_link_options(-Wl,--thinlto-jobs=all)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=all")
else() else()
include(ProcessorCount) include(ProcessorCount)
ProcessorCount(CPU_NUMBER) ProcessorCount(CPU_NUMBER)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=${CPU_NUMBER}") add_link_options(-Wl,--thinlto-jobs=${CPU_NUMBER})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-jobs=${CPU_NUMBER}")
endif() endif()
if (APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) if (APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
if (YASS_TARGET_IS_CROSSCOMPILE_HOST) if (YASS_TARGET_IS_CROSSCOMPILE_HOST)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-cache_path_lto,${CMAKE_CURRENT_BINARY_DIR}/../thinlto-cache") add_link_options(-Wl,-cache_path_lto,${CMAKE_CURRENT_BINARY_DIR}/../thinlto-cache)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-cache_path_lto,${CMAKE_CURRENT_BINARY_DIR}/../thinlto-cache")
else() else()
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-cache_path_lto,thinlto-cache") add_link_options(-Wl,-cache_path_lto,thinlto-cache)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-cache_path_lto,thinlto-cache")
endif() endif()
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wcrl,object_path_lto") add_link_options(-Wcrl,object_path_lto)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wcrl,object_path_lto") add_link_options(-Wl,--thinlto-cache-policy=${cache_policy})
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-policy=${cache_policy}")
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-policy=${cache_policy}")
elseif (NOT APPLE) elseif (NOT APPLE)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-dir=thinlto-cache") add_link_options(-Wl,--thinlto-cache-dir=thinlto-cache)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-dir=thinlto-cache") add_link_options(-Wl,--thinlto-cache-policy,${cache_policy})
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-policy,${cache_policy}")
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,--thinlto-cache-policy,${cache_policy}")
endif() endif()
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-import-instr-limit=${import_instr_limit}") add_link_options(-Wl,-mllvm,-import-instr-limit=${import_instr_limit})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-import-instr-limit=${import_instr_limit}")
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 17.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-disable-auto-upgrade-debug-info") add_link_options(-Wl,-mllvm,-disable-auto-upgrade-debug-info)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-disable-auto-upgrade-debug-info")
endif() endif()
endif() endif()
if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE)) if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE))
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fwhole-program-vtables>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
if (NOT MSVC) if (NOT MSVC)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_link_options(-fwhole-program-vtables)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
endif() endif()
endif() endif()
endif() endif()
## adopt Thin LTO ## adopt Thin LTO
if (LTO AND COMPILER_CLANG AND USE_GOLD) if (LTO AND COMPILER_CLANG AND USE_GOLD)
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-flto=thin>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
# Limit the size of the ThinLTO cache to the lesser of 10% of # Limit the size of the ThinLTO cache to the lesser of 10% of
# available disk space, 40GB and 100000 files. # available disk space, 40GB and 100000 files.
set(cache_policy "cache_size=10\\%:cache_size_bytes=40g:cache_size_files=100000") set(cache_policy "cache_size=10%:cache_size_bytes=40g:cache_size_files=100000")
# TODO(gbiv): We ideally shouldn't need to specify this; ThinLTO # TODO(gbiv): We ideally shouldn't need to specify this; ThinLTO
# should be able to better manage binary size increases on its own. # should be able to better manage binary size increases on its own.
set(import_instr_limit 5) set(import_instr_limit 5)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin") add_link_options(-flto=thin)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=thin")
# In ThinLTO builds, we run at most one link process at a time, # In ThinLTO builds, we run at most one link process at a time,
# and let it use all cores. # and let it use all cores.
# TODO(thakis): Check if '=0' (that is, number of cores, instead # TODO(thakis): Check if '=0' (that is, number of cores, instead
# of "all" which means number of hardware threads) is faster. # of "all" which means number of hardware threads) is faster.
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,jobs=all") add_link_options(-Wl,-plugin-opt,jobs=all)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,jobs=all")
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,cache-dir=thinlto-cache") add_link_options(-Wl,-plugin-opt,cache-dir=thinlto-cache)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,cache-dir=thinlto-cache")
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,cache-policy=${cache_policy}") add_link_options(-Wl,-plugin-opt,cache-policy=${cache_policy})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-plugin-opt,cache-policy=${cache_policy}")
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-import-instr-limit=${import_instr_limit}") add_link_options(-Wl,-mllvm,-import-instr-limit=${import_instr_limit})
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wl,-mllvm,-import-instr-limit=${import_instr_limit}")
if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE)) if (NOT ANDROID AND NOT OHOS AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR APPLE))
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fwhole-program-vtables>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
if (NOT MSVC) if (NOT MSVC)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables") add_link_options(-fwhole-program-vtables)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -fwhole-program-vtables")
endif() endif()
endif() endif()
endif() endif()
@@ -1277,27 +1283,21 @@ endif()
## old gcc has regression on c++17 mode ## old gcc has regression on c++17 mode
## https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81004 ## https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81004
if (LTO AND COMPILER_GCC) if (LTO AND COMPILER_GCC)
set(CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=auto") add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-flto=auto>)
set(CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_CXX_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=auto") add_link_options(-flto=auto)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=auto")
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -flto=auto")
# gcc is known to fails at combining -std=c++14 and -std=c++17 objects (fixed in gcc 8.4) # gcc is known to fails at combining -std=c++14 and -std=c++17 objects (fixed in gcc 8.4)
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89358 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89358
# and another https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84044 (fixed in gcc 9.1) # and another https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84044 (fixed in gcc 9.1)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.1) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.1)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-error=odr") add_link_options(-Wno-error=odr)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-error=odr")
endif() endif()
# silence lto warning on old gcc, fixed in latest gcc # silence lto warning on old gcc, fixed in latest gcc
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-error=odr") add_link_options(-Wno-error=odr)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-error=odr")
elseif (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0) elseif (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-lto-type-mismatch") add_link_options(-Wno-lto-type-mismatch)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-lto-type-mismatch")
else() else()
set(CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_SHARED_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-lto-type-mismatch -Wno-odr -Wno-error=uninitialized") add_link_options(-Wno-lto-type-mismatch -Wno-odr -Wno-error=uninitialized)
set(CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE} "${CMAKE_EXE_LINKER_FLAGS_${upper_CMAKE_BUILD_TYPE}} -Wno-lto-type-mismatch -Wno-odr -Wno-error=uninitialized")
endif() endif()
endif() endif()
@@ -1365,26 +1365,12 @@ if (NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
endif() endif()
if (USE_MOLD)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=mold")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=mold")
list(APPEND YASS_APP_FEATURES "linker mold")
endif()
if (USE_LLD)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
list(APPEND YASS_APP_FEATURES "linker lld")
endif()
# Linker warnings. # Linker warnings.
if (FALSE) if (FALSE)
if (NOT APPLE) if (NOT APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--fatal-warnings") add_link_options(-Wl,--fatal-warnings)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--fatal-warnings")
else () else ()
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-fatal_warnings") add_link_options(-Wl,-fatal_warnings)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-fatal_warnings")
endif() endif()
endif() endif()
endif() endif()
@@ -1395,14 +1381,11 @@ if (UNIX AND NOT APPLE)
# Explicitly pass --build-id to ld. Compilers used to always pass this # Explicitly pass --build-id to ld. Compilers used to always pass this
# implicitly but don't any more (in particular clang when built without # implicitly but don't any more (in particular clang when built without
# ENABLE_LINKER_BUILD_ID=ON). # ENABLE_LINKER_BUILD_ID=ON).
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -Wl,--build-id=sha1") if (IS_RELEASE_BUILD)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,--build-id=sha1") add_link_options(-Wl,--build-id=sha1)
set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} -Wl,--build-id=sha1") else()
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -Wl,--build-id=sha1") add_link_options(-Wl,--build-id)
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} -Wl,--build-id=sha1") endif()
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -Wl,--build-id=sha1")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -Wl,--build-id")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -Wl,--build-id")
# _FILE_OFFSET_BITS=64 should not be set on Android in order to maintain # _FILE_OFFSET_BITS=64 should not be set on Android in order to maintain
# the behavior of the Android NDK from earlier versions. # the behavior of the Android NDK from earlier versions.
@@ -1432,11 +1415,8 @@ if ((UNIX AND NOT APPLE) OR ANDROID OR OHOS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe")
endif() endif()
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro") add_link_options(-Wl,-z,noexecstack -Wl,-z,relro)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack -Wl,-z,relro") add_link_options(-Wl,-z,now)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,now")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,now")
endif() endif()
# Linux-specific compiler flags setup. # Linux-specific compiler flags setup.
@@ -1446,13 +1426,9 @@ if ((UNIX AND NOT APPLE) AND USE_LLD)
# Reduce the page size from 65536 in order to reduce binary size slightly # Reduce the page size from 65536 in order to reduce binary size slightly
# by shrinking the alignment gap between segments. This also causes all # by shrinking the alignment gap between segments. This also causes all
# segments to be mapped adjacently, which breakpad relies on. # segments to be mapped adjacently, which breakpad relies on.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=4096") add_link_options(-Wl,-z,max-page-size=4096)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,max-page-size=4096")
endif() endif()
elseif (USE_GOLD) elseif (USE_GOLD)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
list(APPEND YASS_APP_FEATURES "linker gold")
if (NOT ANDROID AND NOT OHOS) if (NOT ANDROID AND NOT OHOS)
# On Android, this isn't needed. gcc in the NDK knows to look next to # On Android, this isn't needed. gcc in the NDK knows to look next to
# it with -fuse-ld=gold, and clang gets a --gcc-toolchain flag passed # it with -fuse-ld=gold, and clang gets a --gcc-toolchain flag passed
@@ -1465,8 +1441,7 @@ elseif (USE_GOLD)
# linker might not be gold, but isn't used much anyway. # linker might not be gold, but isn't used much anyway.
# FIXME crashing on aarch64 build machine # FIXME crashing on aarch64 build machine
if (FALSE) if (FALSE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--threads -Wl,--thread-count=4") add_link_options(-Wl,--threads -Wl,--thread-count=4)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--threads -Wl,--thread-count=4")
endif() endif()
endif() endif()
@@ -1480,8 +1455,7 @@ if (USE_ICF AND (NOT APPLE OR COMPILER_CLANG) AND NOT MSVC)
# Gold doesn't respect section alignment and breaks gcc builds with icf # Gold doesn't respect section alignment and breaks gcc builds with icf
# https://sourceware.org/bugzilla/show_bug.cgi?id=17704 # https://sourceware.org/bugzilla/show_bug.cgi?id=17704
# Landed upstream Fri, 21 Oct 2016 - is in 2.28, such as CentOS 7 # Landed upstream Fri, 21 Oct 2016 - is in 2.28, such as CentOS 7
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--icf=all") add_link_options(-Wl,--icf=all)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--icf=all")
list(APPEND YASS_APP_FEATURES "ldflags icf") list(APPEND YASS_APP_FEATURES "ldflags icf")
endif() endif()
@@ -1524,19 +1498,16 @@ if (USE_LLD)
if (MSVC) if (MSVC)
# On Windows, we call the linker directly, instead of calling it through # On Windows, we call the linker directly, instead of calling it through
# the driver. # the driver.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --color-diagnostics") add_link_options(--color-diagnostics)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --color-diagnostics")
elseif (NOT MINGW) elseif (NOT MINGW)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--color-diagnostics") add_link_options(-Wl,--color-diagnostics)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--color-diagnostics")
endif() endif()
endif() endif()
# Enable text section splitting only on linux when using lld for now. Other # Enable text section splitting only on linux when using lld for now. Other
# platforms can be added later if needed. # platforms can be added later if needed.
if ((UNIX AND NOT APPLE) AND USE_LLD) if ((UNIX AND NOT APPLE) AND USE_LLD)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,keep-text-section-prefix") add_link_options(-Wl,-z,keep-text-section-prefix)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,keep-text-section-prefix")
endif() endif()
if (COMPILER_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0) if (COMPILER_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
@@ -1546,11 +1517,9 @@ if (COMPILER_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -instcombine-lower-dbg-declare=0") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -instcombine-lower-dbg-declare=0")
if (USE_LLD) if (USE_LLD)
if (MSVC) if (MSVC)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -mllvm:-instcombine-lower-dbg-declare=0") add_link_options(-mllvm:-instcombine-lower-dbg-declare=0)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mllvm:-instcombine-lower-dbg-declare=0")
else() else()
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-mllvm,-instcombine-lower-dbg-declare=0") add_link_options(-Wl,-mllvm,-instcombine-lower-dbg-declare=0)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-mllvm,-instcombine-lower-dbg-declare=0")
endif() endif()
endif() endif()
@@ -1601,15 +1570,13 @@ endif()
# Pass flag to LLD so Android builds can allow debuggerd to properly symbolize # Pass flag to LLD so Android builds can allow debuggerd to properly symbolize
# stack crashes (http://crbug.com/919499). # stack crashes (http://crbug.com/919499).
if (USE_LLD AND ANDROID) if (USE_LLD AND ANDROID)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-rosegment") add_link_options(-Wl,--no-rosegment)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-rosegment")
endif() endif()
# TODO(crbug.com/1374347): Cleanup undefined symbol errors caught by # TODO(crbug.com/1374347): Cleanup undefined symbol errors caught by
# --no-undefined-version. # --no-undefined-version.
if (USE_LLD AND NOT WIN32 AND NOT APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0) if (USE_LLD AND NOT WIN32 AND NOT APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--undefined-version") add_link_options(-Wl,--undefined-version)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--undefined-version")
endif() endif()
# Apple: pass --strict-auto-link to ld64.lld # Apple: pass --strict-auto-link to ld64.lld
@@ -1620,8 +1587,7 @@ endif()
# After https://reviews.llvm.org/D140491, this will only happen if the link fails, # After https://reviews.llvm.org/D140491, this will only happen if the link fails,
# matching ld64. Passing `--strict-auto-link` restores the old behavior. # matching ld64. Passing `--strict-auto-link` restores the old behavior.
if (USE_LLD AND APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0) if (USE_LLD AND APPLE AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--strict-auto-link") add_link_options(-Wl,--strict-auto-link)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--strict-auto-link")
endif() endif()
# LLD does call-graph-sorted binary layout by default when profile data is # LLD does call-graph-sorted binary layout by default when profile data is
@@ -1630,13 +1596,11 @@ endif()
# beneficial. # beneficial.
if (USE_LLD) if (USE_LLD)
if (MSVC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) if (MSVC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /call-graph-profile-sort:no") add_link_options(/call-graph-profile-sort:no)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /call-graph-profile-sort:no")
elseif (NOT APPLE AND NOT MINGW AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) elseif (NOT APPLE AND NOT MINGW AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
# TODO(thakis): Once LLD's Mach-O port basically works, implement call # TODO(thakis): Once LLD's Mach-O port basically works, implement call
# graph profile sorting for it, add an opt-out flag, and pass it here. # graph profile sorting for it, add an opt-out flag, and pass it here.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-call-graph-profile-sort") add_link_options(-Wl,--no-call-graph-profile-sort)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-call-graph-profile-sort")
endif() endif()
endif() endif()
@@ -1758,13 +1722,11 @@ if (WIN32)
# set linker option for x86 # set linker option for x86
if (MSVC_PROCESSOR_ARCHITECTURE STREQUAL "x86") if (MSVC_PROCESSOR_ARCHITECTURE STREQUAL "x86")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH /largeaddressaware") add_link_options(/SAFESEH /largeaddressaware)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH /largeaddressaware")
endif() endif()
if (MSVC) if (MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DYNAMICBASE /NXCOMPAT") add_link_options(/DYNAMICBASE /NXCOMPAT)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE /NXCOMPAT")
endif() endif()
if (MSVC AND ALLOW_XP) if (MSVC AND ALLOW_XP)
@@ -1837,21 +1799,18 @@ if (ANDROID)
# Don't allow visible symbols from libraries that contain # Don't allow visible symbols from libraries that contain
# assembly code with symbols that aren't hidden properly. # assembly code with symbols that aren't hidden properly.
# http://crbug.com/448386 # http://crbug.com/448386
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs=libvpx_assembly_arm.a") add_link_options(-Wl,--exclude-libs=libvpx_assembly_arm.a)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--exclude-libs=libvpx_assembly_arm.a")
# Reduce the page size from 65536 in order to reduce binary size slightly # Reduce the page size from 65536 in order to reduce binary size slightly
# by shrinking the alignment gap between segments. This also causes all # by shrinking the alignment gap between segments. This also causes all
# segments to be mapped adjacently, which breakpad relies on. # segments to be mapped adjacently, which breakpad relies on.
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm64.*") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm64.*")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=4096") add_link_options(-Wl,-z,max-page-size=4096)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,max-page-size=4096")
endif() endif()
# Instead of using an unwind lib from the toolchain, # Instead of using an unwind lib from the toolchain,
# buildtools/third_party/libunwind will be built and used directly. # buildtools/third_party/libunwind will be built and used directly.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --unwindlib=none") add_link_options(--unwindlib=none)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --unwindlib=none")
list(APPEND YASS_APP_FEATURES "libunwind") list(APPEND YASS_APP_FEATURES "libunwind")
@@ -2035,8 +1994,7 @@ int main() {
include_directories(third_party/lss) include_directories(third_party/lss)
endif() endif()
if (APPLE AND COMPILER_CLANG) if (APPLE AND COMPILER_CLANG)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Foundation -framework SystemConfiguration") link_libraries("-framework Foundation" "-framework SystemConfiguration")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Foundation -framework SystemConfiguration")
endif() endif()
endif() endif()
@@ -2444,12 +2402,10 @@ elseif (USE_TCMALLOC)
# patching manually, see tcmalloc's README_windows.txt # patching manually, see tcmalloc's README_windows.txt
if (MSVC) if (MSVC)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /INCLUDE:\"__tcmalloc\"") add_link_options(/INCLUDE:__tcmalloc)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCLUDE:\"__tcmalloc\"")
endif() endif()
if (MINGW) if (MINGW)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-u__tcmalloc") add_link_options(-Wl,-u__tcmalloc)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-u__tcmalloc")
endif() endif()
endif() endif()
@@ -2507,7 +2463,7 @@ if (MSVC AND MSVC_CRT_LINKAGE STREQUAL "dynamic" AND NOT ALLOW_XP AND ${CMAKE_BU
file(COPY "${_CRASHPAD_BINARY_PREFIX}/crashpad_handler.exe" DESTINATION ${CMAKE_BINARY_DIR}) file(COPY "${_CRASHPAD_BINARY_PREFIX}/crashpad_handler.exe" DESTINATION ${CMAKE_BINARY_DIR})
install(FILES "${_CRASHPAD_BINARY_PREFIX}/crashpad_handler.exe" DESTINATION bin) install(FILES "${_CRASHPAD_BINARY_PREFIX}/crashpad_handler.exe" DESTINATION ${CMAKE_INSTALL_BINDIR})
endif() endif()
if (IOS) if (IOS)
@@ -3345,7 +3301,28 @@ endif()
# sqlite3 Library # sqlite3 Library
# ***************************************************************************************** # *****************************************************************************************
if (USE_SQLITE) if (USE_SYSTEM_SQLITE)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(SQLITE sqlite3)
endif()
if(NOT SQLITE_FOUND)
message(STATUS "System sqlite3 not found, using bundled one")
set(USE_SYSTEM_SQLITE FALSE)
endif()
endif()
if (USE_SYSTEM_SQLITE AND USE_SQLITE)
message(STATUS "Compiling with system sqlite3 library")
list(APPEND YASS_APP_FEATURES "system sqlite3 library")
set(SUPPORT_DEFINITIONS
HAVE_SQLITE
${SUPPORT_DEFINITIONS}
)
include_directories(${SQLITE_INCLUDE_DIRS})
link_directories(${SQLITE_LIBRARY_DIRS})
link_libraries(${SQLITE_LIBRARIES})
elseif (USE_SQLITE)
message(STATUS "Compiling with bundled sqlite3 library") message(STATUS "Compiling with bundled sqlite3 library")
add_subdirectory(third_party/sqlite) add_subdirectory(third_party/sqlite)
list(APPEND YASS_APP_FEATURES "sqlite3") list(APPEND YASS_APP_FEATURES "sqlite3")
@@ -3522,8 +3499,7 @@ if (COMPILER_GCC OR COMPILER_CLANG)
# this may happens # this may happens
if (COMPILER_CLANG) if (COMPILER_CLANG)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wno-unused-command-line-argument") add_link_options(-Wno-unused-command-line-argument)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wno-unused-command-line-argument")
endif() endif()
if (COMPILER_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0) if (COMPILER_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
@@ -3969,8 +3945,8 @@ if (CLI)
) )
if (NOT CMAKE_SKIP_INSTALL_RULES AND NOT WIN32 AND NOT IOS) if (NOT CMAKE_SKIP_INSTALL_RULES AND NOT WIN32 AND NOT IOS)
install(TARGETS yass_cli RUNTIME DESTINATION bin) install(TARGETS yass_cli RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES doc/yass_cli.1 DESTINATION share/man/man1) install(FILES doc/yass_cli.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
# TODO add freebsd rc files # TODO add freebsd rc files
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID AND NOT OHOS) if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID AND NOT OHOS)
install(FILES yass.json.sample RENAME config.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/yass) install(FILES yass.json.sample RENAME config.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/yass)
@@ -4020,8 +3996,8 @@ if (SERVER)
) )
if (NOT CMAKE_SKIP_INSTALL_RULES AND NOT WIN32 AND NOT IOS) if (NOT CMAKE_SKIP_INSTALL_RULES AND NOT WIN32 AND NOT IOS)
install(TARGETS yass_server RUNTIME DESTINATION bin) install(TARGETS yass_server RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES doc/yass_server.1 DESTINATION share/man/man1) install(FILES doc/yass_server.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID AND NOT OHOS) if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ANDROID AND NOT OHOS)
install(FILES yass-server.json.sample RENAME server.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/yass) install(FILES yass-server.json.sample RENAME server.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/yass)
install(FILES yass-server${SYSTEMD_SERVICE_SUFFIX}.service RENAME yass-server.service DESTINATION lib/systemd/system) install(FILES yass-server${SYSTEMD_SERVICE_SUFFIX}.service RENAME yass-server.service DESTINATION lib/systemd/system)
@@ -4624,7 +4600,7 @@ if (GUI)
if (NOT CMAKE_SKIP_INSTALL_RULES) if (NOT CMAKE_SKIP_INSTALL_RULES)
# installable, except on macOS when marked as MACOSX_BUNDLE # installable, except on macOS when marked as MACOSX_BUNDLE
if (NOT APPLE) if (NOT APPLE)
install(TARGETS ${APP_NAME} RUNTIME DESTINATION bin) install(TARGETS ${APP_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif() endif()
if (GUI_FLAVOUR STREQUAL "gtk3" OR GUI_FLAVOUR STREQUAL "gtk4") if (GUI_FLAVOUR STREQUAL "gtk3" OR GUI_FLAVOUR STREQUAL "gtk4")

View File

@@ -630,3 +630,4 @@ TuxCoder
voidful voidful
vtexier vtexier
WyohKnott WyohKnott
trueauracoral

View File

@@ -4,6 +4,17 @@
# To create a release, dispatch the https://github.com/yt-dlp/yt-dlp/actions/workflows/release.yml workflow on master # To create a release, dispatch the https://github.com/yt-dlp/yt-dlp/actions/workflows/release.yml workflow on master
--> -->
### 2024.05.27
#### Extractor changes
- [Fix parsing of base URL in SMIL manifest](https://github.com/yt-dlp/yt-dlp/commit/26603d0b34898818992bee4598e0607c07059511) ([#9225](https://github.com/yt-dlp/yt-dlp/issues/9225)) by [seproDev](https://github.com/seproDev)
- **peertube**: [Support livestreams](https://github.com/yt-dlp/yt-dlp/commit/12b248ce60be1aa1362edd839d915bba70dbee4b) ([#10044](https://github.com/yt-dlp/yt-dlp/issues/10044)) by [bashonly](https://github.com/bashonly), [trueauracoral](https://github.com/trueauracoral)
- **piksel**: [Update domain](https://github.com/yt-dlp/yt-dlp/commit/ae2194e1dd4a99d32eb3cab7c48a0ff03101ef3b) ([#9223](https://github.com/yt-dlp/yt-dlp/issues/9223)) by [seproDev](https://github.com/seproDev)
- **tiktok**: user: [Fix extraction loop](https://github.com/yt-dlp/yt-dlp/commit/c53c2e40fde8f2e15c7c62f8ca1a5d9e90ddc079) ([#10035](https://github.com/yt-dlp/yt-dlp/issues/10035)) by [bashonly](https://github.com/bashonly)
#### Misc. changes
- **cleanup**: Miscellaneous: [5e3e19c](https://github.com/yt-dlp/yt-dlp/commit/5e3e19c93c52830da98d9d1ed84ea7a559efefbd) by [bashonly](https://github.com/bashonly)
### 2024.05.26 ### 2024.05.26
#### Core changes #### Core changes

View File

@@ -401,6 +401,9 @@ If you fork the project on GitHub, you can run your fork's [build workflow](.git
--impersonate CLIENT[:OS] Client to impersonate for requests. E.g. --impersonate CLIENT[:OS] Client to impersonate for requests. E.g.
chrome, chrome-110, chrome:windows-10. Pass chrome, chrome-110, chrome:windows-10. Pass
--impersonate="" to impersonate any client. --impersonate="" to impersonate any client.
Note that forcing impersonation for all
requests may have a detrimental impact on
download speed and stability
--list-impersonate-targets List available clients to impersonate. --list-impersonate-targets List available clients to impersonate.
-4, --force-ipv4 Make all connections via IPv4 -4, --force-ipv4 Make all connections via IPv4
-6, --force-ipv6 Make all connections via IPv6 -6, --force-ipv6 Make all connections via IPv6

View File

@@ -1470,11 +1470,15 @@ class PeerTubeIE(InfoExtractor):
title = video['name'] title = video['name']
formats = [] formats, is_live = [], False
files = video.get('files') or [] files = video.get('files') or []
for playlist in (video.get('streamingPlaylists') or []): for playlist in (video.get('streamingPlaylists') or []):
if not isinstance(playlist, dict): if not isinstance(playlist, dict):
continue continue
if playlist_url := url_or_none(playlist.get('playlistUrl')):
is_live = True
formats.extend(self._extract_m3u8_formats(
playlist_url, video_id, fatal=False, live=True))
playlist_files = playlist.get('files') playlist_files = playlist.get('files')
if not (playlist_files and isinstance(playlist_files, list)): if not (playlist_files and isinstance(playlist_files, list)):
continue continue
@@ -1498,6 +1502,7 @@ class PeerTubeIE(InfoExtractor):
f['vcodec'] = 'none' f['vcodec'] = 'none'
else: else:
f['fps'] = int_or_none(file_.get('fps')) f['fps'] = int_or_none(file_.get('fps'))
is_live = False
formats.append(f) formats.append(f)
description = video.get('description') description = video.get('description')
@@ -1555,6 +1560,7 @@ class PeerTubeIE(InfoExtractor):
'categories': categories, 'categories': categories,
'formats': formats, 'formats': formats,
'subtitles': subtitles, 'subtitles': subtitles,
'is_live': is_live,
'webpage_url': webpage_url, 'webpage_url': webpage_url,
} }

View File

@@ -520,7 +520,8 @@ def create_parser():
metavar='CLIENT[:OS]', dest='impersonate', default=None, metavar='CLIENT[:OS]', dest='impersonate', default=None,
help=( help=(
'Client to impersonate for requests. E.g. chrome, chrome-110, chrome:windows-10. ' 'Client to impersonate for requests. E.g. chrome, chrome-110, chrome:windows-10. '
'Pass --impersonate="" to impersonate any client.'), 'Pass --impersonate="" to impersonate any client. Note that forcing impersonation '
'for all requests may have a detrimental impact on download speed and stability'),
) )
network.add_option( network.add_option(
'--list-impersonate-targets', '--list-impersonate-targets',

View File

@@ -1,8 +1,8 @@
# Autogenerated by devscripts/update-version.py # Autogenerated by devscripts/update-version.py
__version__ = '2024.05.26' __version__ = '2024.05.27'
RELEASE_GIT_HEAD = 'ae2af1104f80caf2f47544763a33db2c17a3e1de' RELEASE_GIT_HEAD = '12b248ce60be1aa1362edd839d915bba70dbee4b'
VARIANT = None VARIANT = None
@@ -12,4 +12,4 @@ CHANNEL = 'stable'
ORIGIN = 'yt-dlp/yt-dlp' ORIGIN = 'yt-dlp/yt-dlp'
_pkg_version = '2024.05.26' _pkg_version = '2024.05.27'