Build against BoringSSL
This commit is contained in:
parent
8e3b9d2498
commit
a7869567ff
1
.github/workflows/c-cpp.yml
vendored
1
.github/workflows/c-cpp.yml
vendored
@ -9,6 +9,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
- uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
- uses: ilammy/setup-nasm@v1.2.1
|
||||||
- name: Update binaries
|
- name: Update binaries
|
||||||
run: |
|
run: |
|
||||||
$ErrorActionPreference = 'SilentlyContinue'
|
$ErrorActionPreference = 'SilentlyContinue'
|
||||||
|
78
build.c
78
build.c
@ -17,9 +17,12 @@
|
|||||||
#define IS_MACOS
|
#define IS_MACOS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *ARM64 = "arm64";
|
||||||
|
const char *X64 = "x64";
|
||||||
|
|
||||||
/* System, but with string replace */
|
/* System, but with string replace */
|
||||||
int run(const char *cmd, ...) {
|
int run(const char *cmd, ...) {
|
||||||
char buf[512];
|
char buf[2048];
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, cmd);
|
va_start(args, cmd);
|
||||||
vsprintf(buf, cmd, args);
|
vsprintf(buf, cmd, args);
|
||||||
@ -53,15 +56,39 @@ void prepare() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Build boringssl */
|
||||||
|
void build_boringssl(const char *arch) {
|
||||||
|
|
||||||
|
#ifdef IS_MACOS
|
||||||
|
/* Build for x64 (the host) */
|
||||||
|
run("cd uWebSockets/uSockets/boringssl && mkdir -p x64 && cd x64 && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 .. && make crypto ssl");
|
||||||
|
|
||||||
|
/* Build for arm64 (cross compile) */
|
||||||
|
run("cd uWebSockets/uSockets/boringssl && mkdir -p arm64 && cd arm64 && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64 .. && make crypto ssl");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IS_LINUX
|
||||||
|
/* Build for x64 or arm64 (depending on the host) */
|
||||||
|
run("cd uWebSockets/uSockets/boringssl && mkdir -p %s && cd %s && cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release .. && make crypto ssl", arch, arch);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
/* Build for x64 (the host) */
|
||||||
|
run("cd uWebSockets/uSockets/boringssl && mkdir -p x64 && cd x64 && cmake -DCMAKE_BUILD_TYPE=Release -GNinja .. && ninja crypto ssl");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* Build for Unix systems */
|
/* Build for Unix systems */
|
||||||
void build(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, char *arch) {
|
void build(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, const char *arch) {
|
||||||
char *c_shared = "-DLIBUS_USE_LIBUV -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 = "-DUWS_WITH_PROXY -DLIBUS_USE_LIBUV -DLIBUS_USE_OPENSSL -flto -O3 -c -fPIC -std=c++17 -I uWebSockets/uSockets/src -I uWebSockets/src src/addon.cpp uWebSockets/uSockets/src/crypto/sni_tree.cpp";
|
char *c_shared = "-DLIBUS_USE_LIBUV -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 = "-DUWS_WITH_PROXY -DLIBUS_USE_LIBUV -I uWebSockets/uSockets/boringssl/include -pthread -DLIBUS_USE_OPENSSL -flto -O3 -c -fPIC -std=c++17 -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++) {
|
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", compiler, c_shared, versions[i].name);
|
||||||
run("%s %s -I targets/node-%s/include/node", cpp_compiler, cpp_shared, versions[i].name);
|
run("%s %s -I targets/node-%s/include/node", cpp_compiler, cpp_shared, versions[i].name);
|
||||||
run("%s %s %s -o dist/uws_%s_%s_%s.node", cpp_compiler, "-flto -O3 *.o -std=c++17 -shared", cpp_linker, os, arch, versions[i].abi);
|
run("%s -pthread -flto -O3 *.o uWebSockets/uSockets/boringssl/%s/ssl/libssl.a uWebSockets/uSockets/boringssl/%s/crypto/libcrypto.a -std=c++17 -shared %s -o dist/uws_%s_%s_%s.node", cpp_compiler, arch, arch, cpp_linker, os, arch, versions[i].abi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,12 +101,13 @@ void copy_files() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Special case for windows */
|
/* Special case for windows */
|
||||||
void build_windows(char *arch) {
|
void build_windows(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, const char *arch) {
|
||||||
|
|
||||||
/* For all versions */
|
/* For all versions */
|
||||||
for (unsigned int i = 0; i < sizeof(versions) / sizeof(struct node_version); i++) {
|
for (unsigned int i = 0; i < sizeof(versions) / sizeof(struct node_version); i++) {
|
||||||
run("cl /W3 /D \"UWS_WITH_PROXY\" /D \"LIBUS_USE_LIBUV\" /D \"LIBUS_USE_OPENSSL\" /std:c++17 /I uWebSockets/uSockets/src uWebSockets/uSockets/src/*.c uWebSockets/uSockets/src/crypto/sni_tree.cpp "
|
run("cl /MD /W3 /D WIN32_LEAN_AND_MEAN /D \"UWS_WITH_PROXY\" /D \"LIBUS_USE_LIBUV\" /I uWebSockets/uSockets/boringssl/include /D \"LIBUS_USE_OPENSSL\" /std:c++17 /I uWebSockets/uSockets/src uWebSockets/uSockets/src/*.c uWebSockets/uSockets/src/crypto/sni_tree.cpp "
|
||||||
"uWebSockets/uSockets/src/eventing/*.c uWebSockets/uSockets/src/crypto/*.c /I targets/node-%s/include/node /I uWebSockets/src /EHsc "
|
"uWebSockets/uSockets/src/eventing/*.c uWebSockets/uSockets/src/crypto/*.c /I targets/node-%s/include/node /I uWebSockets/src /EHsc "
|
||||||
"/Ox /LD /Fedist/uws_win32_%s_%s.node src/addon.cpp targets/node-%s/node.lib",
|
"/Ox /LD /Fedist/uws_win32_%s_%s.node src/addon.cpp advapi32.lib uWebSockets/uSockets/boringssl/x64/ssl/ssl.lib uWebSockets/uSockets/boringssl/x64/crypto/crypto.lib targets/node-%s/node.lib",
|
||||||
versions[i].name, arch, versions[i].abi, versions[i].name);
|
versions[i].name, arch, versions[i].abi, versions[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,35 +116,53 @@ int main() {
|
|||||||
printf("[Preparing]\n");
|
printf("[Preparing]\n");
|
||||||
prepare();
|
prepare();
|
||||||
printf("\n[Building]\n");
|
printf("\n[Building]\n");
|
||||||
|
|
||||||
|
const char *arch = X64;
|
||||||
|
#ifdef __aarch64__
|
||||||
|
arch = ARM64;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Build for x64 and/or arm64 */
|
||||||
|
build_boringssl(arch);
|
||||||
|
|
||||||
#ifdef IS_WINDOWS
|
#ifdef IS_WINDOWS
|
||||||
build_windows("x64");
|
/* We can use clang, but we currently do use cl.exe still */
|
||||||
|
build_windows("clang",
|
||||||
|
"clang++",
|
||||||
|
"",
|
||||||
|
OS,
|
||||||
|
X64);
|
||||||
#else
|
#else
|
||||||
#ifdef IS_MACOS
|
#ifdef IS_MACOS
|
||||||
|
|
||||||
/* Apple special case */
|
/* Apple special case */
|
||||||
build("clang -mmacosx-version-min=10.14",
|
build("clang -mmacosx-version-min=10.14",
|
||||||
"clang++ -stdlib=libc++ -mmacosx-version-min=10.14",
|
"clang++ -stdlib=libc++ -mmacosx-version-min=10.14",
|
||||||
"-undefined dynamic_lookup",
|
"-undefined dynamic_lookup",
|
||||||
OS,
|
OS,
|
||||||
"x64");
|
X64);
|
||||||
|
|
||||||
/* Try and build for arm64 macOS 11 */
|
/* Try and build for arm64 macOS 11 */
|
||||||
build("clang -target arm64-apple-macos11",
|
build("clang -target arm64-apple-macos11",
|
||||||
"clang++ -stdlib=libc++ -target arm64-apple-macos11",
|
"clang++ -stdlib=libc++ -target arm64-apple-macos11",
|
||||||
"-undefined dynamic_lookup",
|
"-undefined dynamic_lookup",
|
||||||
OS,
|
OS,
|
||||||
"arm64");
|
ARM64);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* Linux */
|
/* Linux does not cross-compile but picks whatever arch the host is on */
|
||||||
build("clang",
|
build("clang",
|
||||||
"clang++",
|
"clang++",
|
||||||
"-static-libstdc++ -static-libgcc -s",
|
"-static-libstdc++ -static-libgcc -s",
|
||||||
OS,
|
OS,
|
||||||
"x64");
|
arch);
|
||||||
|
|
||||||
/* If linux we also want arm64 */
|
/* If linux we also want arm64 */
|
||||||
build("aarch64-linux-gnu-gcc", "aarch64-linux-gnu-g++", "-static-libstdc++ -static-libgcc -s", OS, "arm64");
|
/*build("aarch64-linux-gnu-gcc",
|
||||||
|
"aarch64-linux-gnu-g++",
|
||||||
|
"-static-libstdc++ -static-libgcc -s",
|
||||||
|
OS,
|
||||||
|
ARM64);*/
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 92a9b3f9923768b0367d3ee53779ec16cbf0d45d
|
Subproject commit 80cd18781b34cb7012ae52640d9ccbf0e8e8bb6c
|
Loading…
Reference in New Issue
Block a user