mirror of
https://github.com/uNetworking/uWebSockets.js.git
synced 2026-03-28 05:01:24 -04:00
build.c: use C macros + string literal concatenation for ASAN flags (#1235)
* Initial plan * Add ASAN binary builds targeting binaries-asan branch Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> * Refactor ASAN flags in build.c to use C macros and string concatenation Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: uNetworkingAB <110806833+uNetworkingAB@users.noreply.github.com>
This commit is contained in:
37
.github/workflows/build-asan.yml
vendored
Normal file
37
.github/workflows/build-asan.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: Build ASAN
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
jobs:
|
||||
build-asan:
|
||||
runs-on: ${{ matrix.os }}
|
||||
permissions:
|
||||
contents: read
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-15, ubuntu-24.04, ubuntu-24.04-arm]
|
||||
steps:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 25
|
||||
- name: Update ASAN binaries
|
||||
run: |
|
||||
git clone --recursive https://github.com/uNetworking/uWebSockets.js.git
|
||||
cd uWebSockets.js
|
||||
cc build.c -DWITH_ASAN && ./a.out
|
||||
ls dist
|
||||
# On first run, binaries-asan doesn't exist yet; seed it from binaries so git history is preserved
|
||||
git fetch origin binaries-asan:binaries-asan 2>/dev/null || git fetch origin binaries:binaries-asan
|
||||
git checkout binaries-asan
|
||||
cp dist/*.node .
|
||||
cp dist/*.js .
|
||||
git rev-parse master > source_commit
|
||||
ls
|
||||
git checkout master docs/index.d.ts && mv docs/index.d.ts .
|
||||
git status
|
||||
git config --global user.email "alexhultman@gmail.com"
|
||||
git config --global user.name "Alex Hultman"
|
||||
git commit -a -m "[GitHub Actions] Updated ${{ matrix.os }} ASAN binaries" || true
|
||||
git push "https://unetworkingab:${{ secrets.SECRET }}@github.com/uNetworking/uWebSockets.js" binaries-asan
|
||||
28
build.c
28
build.c
@@ -17,6 +17,22 @@
|
||||
#define IS_MACOS
|
||||
#endif
|
||||
|
||||
/* ASAN vs. optimized build flags (used via C string literal concatenation).
|
||||
* OPT_FLAGS / LINK_FLAGS: inserted mid-string, so each definition starts with a space.
|
||||
* LINUX_LINK_EXTRAS: passed as a standalone argument, so no leading space.
|
||||
* MACOS_LINK_EXTRAS: appended after "-undefined dynamic_lookup", so ASAN variant starts with a space. */
|
||||
#ifdef WITH_ASAN
|
||||
#define OPT_FLAGS " -fsanitize=address -fno-omit-frame-pointer -g -O1"
|
||||
#define LINK_FLAGS " -fsanitize=address"
|
||||
#define LINUX_LINK_EXTRAS "-fsanitize=address"
|
||||
#define MACOS_LINK_EXTRAS " -fsanitize=address"
|
||||
#else
|
||||
#define OPT_FLAGS " -flto -O3"
|
||||
#define LINK_FLAGS " -flto -O3"
|
||||
#define LINUX_LINK_EXTRAS "-static-libstdc++ -static-libgcc -s"
|
||||
#define MACOS_LINK_EXTRAS ""
|
||||
#endif
|
||||
|
||||
const char *ARM = "arm";
|
||||
const char *ARM64 = "arm64";
|
||||
const char *X64 = "x64";
|
||||
@@ -113,13 +129,13 @@ void build_boringssl(const char *arch) {
|
||||
/* Build for Unix systems */
|
||||
void build(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, const char *arch) {
|
||||
|
||||
char *c_shared = "-DWIN32_LEAN_AND_MEAN -DLIBUS_USE_LIBUV -DLIBUS_USE_QUIC -I uWebSockets/uSockets/lsquic/include -I uWebSockets/uSockets/boringssl/include -pthread -DLIBUS_USE_OPENSSL -flto -O3 -c -fPIC -I uWebSockets/uSockets/src uWebSockets/uSockets/src/*.c uWebSockets/uSockets/src/eventing/*.c uWebSockets/uSockets/src/crypto/*.c";
|
||||
char *cpp_shared = "-DWIN32_LEAN_AND_MEAN -DUWS_WITH_PROXY -DLIBUS_USE_LIBUV -DLIBUS_USE_QUIC -I uWebSockets/uSockets/boringssl/include -pthread -DLIBUS_USE_OPENSSL -flto -O3 -c -fPIC -std=c++20 -I uWebSockets/uSockets/src -I uWebSockets/src src/addon.cpp uWebSockets/uSockets/src/crypto/sni_tree.cpp";
|
||||
char *c_shared = "-DWIN32_LEAN_AND_MEAN -DLIBUS_USE_LIBUV -DLIBUS_USE_QUIC -I uWebSockets/uSockets/lsquic/include -I uWebSockets/uSockets/boringssl/include -pthread -DLIBUS_USE_OPENSSL" OPT_FLAGS " -c -fPIC -I uWebSockets/uSockets/src uWebSockets/uSockets/src/*.c uWebSockets/uSockets/src/eventing/*.c uWebSockets/uSockets/src/crypto/*.c";
|
||||
char *cpp_shared = "-DWIN32_LEAN_AND_MEAN -DUWS_WITH_PROXY -DLIBUS_USE_LIBUV -DLIBUS_USE_QUIC -I uWebSockets/uSockets/boringssl/include -pthread -DLIBUS_USE_OPENSSL" OPT_FLAGS " -c -fPIC -std=c++20 -I uWebSockets/uSockets/src -I uWebSockets/src src/addon.cpp uWebSockets/uSockets/src/crypto/sni_tree.cpp";
|
||||
|
||||
for (unsigned int i = 0; i < sizeof(versions) / sizeof(struct node_version); i++) {
|
||||
run("%s %s -I targets/node-%s/include/node", compiler, c_shared, versions[i].name);
|
||||
run("%s %s -I targets/node-%s/include/node", cpp_compiler, cpp_shared, versions[i].name);
|
||||
run("%s -pthread -flto -O3 *.o uWebSockets/uSockets/boringssl/%s/libssl.a uWebSockets/uSockets/boringssl/%s/libcrypto.a uWebSockets/uSockets/lsquic/%s/src/liblsquic/liblsquic.a -std=c++20 -shared %s -o dist/uws_%s_%s_%s.node", cpp_compiler, arch, arch, arch, cpp_linker, os, arch, versions[i].abi);
|
||||
run("%s -pthread" LINK_FLAGS " *.o uWebSockets/uSockets/boringssl/%s/libssl.a uWebSockets/uSockets/boringssl/%s/libcrypto.a uWebSockets/uSockets/lsquic/%s/src/liblsquic/liblsquic.a -std=c++20 -shared %s -o dist/uws_%s_%s_%s.node", cpp_compiler, arch, arch, arch, cpp_linker, os, arch, versions[i].abi);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,14 +199,14 @@ int main() {
|
||||
/* Apple special case */
|
||||
build("clang -target x86_64-apple-macos12",
|
||||
"clang++ -stdlib=libc++ -target x86_64-apple-macos12",
|
||||
"-undefined dynamic_lookup",
|
||||
"-undefined dynamic_lookup" MACOS_LINK_EXTRAS,
|
||||
OS,
|
||||
X64);
|
||||
|
||||
/* Try and build for arm64 macOS 12 */
|
||||
build("clang -target arm64-apple-macos12",
|
||||
"clang++ -stdlib=libc++ -target arm64-apple-macos12",
|
||||
"-undefined dynamic_lookup",
|
||||
"-undefined dynamic_lookup" MACOS_LINK_EXTRAS,
|
||||
OS,
|
||||
ARM64);
|
||||
|
||||
@@ -198,7 +214,7 @@ int main() {
|
||||
/* Linux does not cross-compile but picks whatever arch the host is on (we run on both x64 and ARM64) */
|
||||
build("clang-18",
|
||||
"clang++-18",
|
||||
"-static-libstdc++ -static-libgcc -s",
|
||||
LINUX_LINK_EXTRAS,
|
||||
OS,
|
||||
arch);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user