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
|
||||
steps:
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
- uses: ilammy/setup-nasm@v1.2.1
|
||||
- name: Update binaries
|
||||
run: |
|
||||
$ErrorActionPreference = 'SilentlyContinue'
|
||||
|
78
build.c
78
build.c
@ -17,9 +17,12 @@
|
||||
#define IS_MACOS
|
||||
#endif
|
||||
|
||||
const char *ARM64 = "arm64";
|
||||
const char *X64 = "x64";
|
||||
|
||||
/* System, but with string replace */
|
||||
int run(const char *cmd, ...) {
|
||||
char buf[512];
|
||||
char buf[2048];
|
||||
va_list args;
|
||||
va_start(args, cmd);
|
||||
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 */
|
||||
void build(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, 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";
|
||||
void build(char *compiler, char *cpp_compiler, char *cpp_linker, char *os, const char *arch) {
|
||||
|
||||
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++) {
|
||||
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 %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 */
|
||||
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 (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 "
|
||||
"/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);
|
||||
}
|
||||
}
|
||||
@ -88,35 +116,53 @@ int main() {
|
||||
printf("[Preparing]\n");
|
||||
prepare();
|
||||
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
|
||||
build_windows("x64");
|
||||
/* We can use clang, but we currently do use cl.exe still */
|
||||
build_windows("clang",
|
||||
"clang++",
|
||||
"",
|
||||
OS,
|
||||
X64);
|
||||
#else
|
||||
#ifdef IS_MACOS
|
||||
|
||||
/* Apple special case */
|
||||
build("clang -mmacosx-version-min=10.14",
|
||||
"clang++ -stdlib=libc++ -mmacosx-version-min=10.14",
|
||||
"-undefined dynamic_lookup",
|
||||
OS,
|
||||
"x64");
|
||||
X64);
|
||||
|
||||
/* Try and build for arm64 macOS 11 */
|
||||
build("clang -target arm64-apple-macos11",
|
||||
/* Try and build for arm64 macOS 11 */
|
||||
build("clang -target arm64-apple-macos11",
|
||||
"clang++ -stdlib=libc++ -target arm64-apple-macos11",
|
||||
"-undefined dynamic_lookup",
|
||||
OS,
|
||||
"arm64");
|
||||
ARM64);
|
||||
|
||||
#else
|
||||
/* Linux */
|
||||
/* Linux does not cross-compile but picks whatever arch the host is on */
|
||||
build("clang",
|
||||
"clang++",
|
||||
"-static-libstdc++ -static-libgcc -s",
|
||||
OS,
|
||||
"x64");
|
||||
arch);
|
||||
|
||||
/* 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
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 92a9b3f9923768b0367d3ee53779ec16cbf0d45d
|
||||
Subproject commit 80cd18781b34cb7012ae52640d9ccbf0e8e8bb6c
|
Loading…
Reference in New Issue
Block a user