Skip to content

Commit 1924d4a

Browse files
Begin aarch64 support
1 parent 3bf1409 commit 1924d4a

File tree

8 files changed

+131
-82
lines changed

8 files changed

+131
-82
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ node_modules/
55
npm-debug.log
66
yarn-error.log
77
yarn.lock
8+
artifacts
89

910
# Emacs temp files
1011
*~
@@ -15,6 +16,7 @@ yarn.lock
1516
reports/
1617

1718
package-lock.json
19+
pnpm-lock.yaml
1820

1921
# Test generated files
2022
coverage

packages/grpc-tools/.gitignore

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CMakeFiles/
2+
cmake_install.cmake
3+
CMakeCache.txt
4+
Makefile
5+
grpc_node_plugin
6+
protoc
7+
deps/protobuf

packages/grpc-tools/CMakeLists.txt

+44-39
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,60 @@
1-
cmake_minimum_required(VERSION 3.7)
2-
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.7" CACHE STRING "Minimum OS X deployment version" FORCE)
3-
if(COMMAND cmake_policy)
4-
cmake_policy(SET CMP0003 NEW)
5-
endif(COMMAND cmake_policy)
1+
CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
2+
PROJECT("grpc-tools")
3+
4+
SET(CMAKE_OSX_DEPLOYMENT_TARGET "11.7" CACHE STRING "Minimum OS X deployment version" FORCE)
5+
6+
if(COMMAND CMAKE_POLICY)
7+
CMAKE_POLICY(SET CMP0003 NEW)
8+
ENDIF(COMMAND CMAKE_POLICY)
69

710
# MSVC runtime library flags are selected by an abstraction.
8-
if(COMMAND cmake_policy AND POLICY CMP0091)
9-
cmake_policy(SET CMP0091 NEW)
10-
endif()
11+
if(COMMAND CMAKE_POLICY AND POLICY CMP0091)
12+
CMAKE_POLICY(SET CMP0091 NEW)
13+
ENDIF()
14+
15+
SET(CMAKE_CXX_STANDARD 11)
16+
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
17+
SET(CMAKE_CXX_EXTENSIONS OFF)
1118

12-
set(CMAKE_CXX_STANDARD 11)
13-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
14-
set(CMAKE_CXX_EXTENSIONS OFF)
19+
SET(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
20+
SET(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
21+
SET(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/protobuf)
1522

16-
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
17-
set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
18-
set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/protobuf)
19-
add_subdirectory(${PROTOBUF_ROOT_DIR}/cmake deps/protobuf)
23+
ADD_SUBDIRECTORY(${PROTOBUF_ROOT_DIR}/cmake deps/protobuf)
2024

21-
set(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++")
22-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-stack-protector")
25+
SET(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++")
26+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-stack-protector")
2327

24-
add_executable(grpc_node_plugin
25-
src/node_generator.cc
26-
src/node_plugin.cc
28+
ADD_EXECUTABLE(grpc_node_plugin
29+
src/node_generator.cc
30+
src/node_plugin.cc
2731
)
2832

29-
if (MSVC)
30-
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.15)
31-
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>)
32-
else ()
33-
foreach (flag_var
34-
CMAKE_CXX_FLAGS
35-
CMAKE_CXX_FLAGS_DEBUG
36-
CMAKE_CXX_FLAGS_RELEASE
37-
CMAKE_CXX_FLAGS_MINSIZEREL
38-
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
39-
if (${flag_var} MATCHES "/MD")
40-
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
41-
endif (${flag_var} MATCHES "/MD")
42-
endforeach (flag_var)
43-
endif ()
44-
endif (MVC)
45-
46-
target_include_directories(grpc_node_plugin
33+
IF(MSVC)
34+
IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.15)
35+
SET(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>)
36+
ELSE()
37+
FOREACH(flag_var
38+
CMAKE_CXX_FLAGS
39+
CMAKE_CXX_FLAGS_DEBUG
40+
CMAKE_CXX_FLAGS_RELEASE
41+
CMAKE_CXX_FLAGS_MINSIZEREL
42+
CMAKE_CXX_FLAGS_RELWITHDEBINFO
43+
)
44+
IF(${flag_var} MATCHES "/MD")
45+
STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
46+
ENDIF(${flag_var} MATCHES "/MD")
47+
ENDFOREACH(flag_var)
48+
ENDIF()
49+
ENDIF(MSVC)
50+
51+
TARGET_INCLUDE_DIRECTORIES(grpc_node_plugin
4752
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
4853
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
4954
PRIVATE ${PROTOBUF_ROOT_DIR}/include
5055
)
5156

52-
target_link_libraries(grpc_node_plugin
57+
TARGET_LINK_LIBRARIES(grpc_node_plugin
5358
libprotoc
5459
libprotobuf
5560
)

packages/grpc-tools/build_binaries.sh

+41-35
Original file line numberDiff line numberDiff line change
@@ -17,62 +17,68 @@ set -e
1717

1818
uname -a
1919

20-
cd $(dirname $0)
20+
cd "$(dirname "$0")"
2121
base=$(pwd)
2222
protobuf_base=$base/deps/protobuf
2323

24-
tools_version=$(jq '.version' < package.json | tr -d '"')
24+
tools_version=$(jq '.version' <package.json | tr -d '"')
2525

2626
# Note: artifacts should not be output in the package directory
2727
out_dir=$base/../../artifacts/grpc-tools/v$tools_version
2828
mkdir -p "$out_dir"
2929

30-
build () {
30+
build() {
3131
cmake_flag=$*
3232

33-
rm -rf $base/build/bin
34-
rm -f $base/CMakeCache.txt
35-
rm -rf $base/CMakeFiles
36-
rm -f $protobuf_base/CMakeCache.txt
37-
rm -rf $protobuf_base/CMakeFiles
38-
cmake $cmake_flag . && cmake --build . --target clean && cmake --build . -- -j 12
39-
mkdir -p $base/build/bin
40-
cp -L $protobuf_base/protoc $base/build/bin/protoc
41-
cp $base/grpc_node_plugin $base/build/bin/
42-
file $base/build/bin/*
33+
rm -rf "$base/build/bin"
34+
rm -f "$base/CMakeCache.txt"
35+
rm -rf "$base/CMakeFiles"
36+
rm -f "$protobuf_base/CMakeCache.txt"
37+
rm -rf "$protobuf_base/CMakeFiles"
38+
39+
cmake -DCMAKE_TOOLCHAIN_FILE=linux.toolchain.cmake $cmake_flag . && cmake --build . --target clean && cmake --build . -- -j 12
40+
41+
mkdir -p "$base/build/bin"
42+
43+
cp -L "$protobuf_base/protoc" "$base/build/bin/protoc"
44+
cp "$base/grpc_node_plugin" "$base/build/bin/"
45+
46+
file "$base/build/bin"/*
4347
}
4448

4549
artifacts() {
4650
platform=$1
4751
arch=$2
4852
dir=$3
4953
case $(uname -s) in
50-
Linux)
51-
tar -czf $out_dir/$platform-$arch.tar.gz -C $(dirname $dir) $(basename $dir)
52-
;;
53-
Darwin)
54-
tar --format=gnutar -czf $out_dir/$platform-$arch.tar.gz -C $(dirname $dir) $(basename $dir)
55-
;;
54+
Linux)
55+
tar -czf "$out_dir/$platform-$arch.tar.gz" -C "$(dirname "$dir")" "$(basename "$dir")"
56+
;;
57+
Darwin)
58+
tar --format=gnutar -czf "$out_dir/$platform-$arch.tar.gz" -C "$(dirname "$dir")" "$(basename "$dir")"
59+
;;
5660
esac
5761
}
5862

5963
case $(uname -s) in
60-
Linux)
61-
build -DCMAKE_TOOLCHAIN_FILE=linux_32bit.toolchain.cmake
62-
artifacts linux ia32 $base/build/bin
63-
build -DCMAKE_TOOLCHAIN_FILE=linux_64bit.toolchain.cmake
64-
artifacts linux x64 $base/build/bin
65-
;;
66-
Darwin)
67-
build -DCMAKE_TOOLCHAIN_FILE=linux_64bit.toolchain.cmake -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
64+
Linux)
65+
build -DGRPC_TOOLS_TARGET=i686
66+
artifacts linux ia32 "$base/build/bin"
67+
build -DGRPC_TOOLS_TARGET=x86_64
68+
artifacts linux x64 "$base/build/bin"
69+
build -DGRPC_TOOLS_TARGET=aarch64
70+
artifacts linux arm64 "$base/build/bin"
71+
;;
72+
Darwin)
73+
build -DGRPC_TOOLS_TARGET=x86_64 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
6874

69-
for arch in "x64" "arm64"; do
70-
mkdir $base/build/bin/$arch
71-
for bin in protoc grpc_node_plugin; do
72-
lipo -extract x86_64 $base/build/bin/$bin -o $base/build/bin/$arch/$bin
73-
otool -l $base/build/bin/$arch/$bin | grep minos
74-
done
75-
artifacts darwin $arch $base/build/bin/$arch/
75+
for arch in "x64" "arm64"; do
76+
mkdir "$base/build/bin/$arch"
77+
for bin in protoc grpc_node_plugin; do
78+
lipo -extract x86_64 "$base/build/bin/$bin" -o "$base/build/bin/$arch/$bin"
79+
otool -l "$base/build/bin/$arch/$bin" | grep minos
7680
done
77-
;;
81+
artifacts darwin $arch "$base/build/bin/$arch/"
82+
done
83+
;;
7884
esac
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
IF(UNIX AND NOT APPLE)
2+
SET(CMAKE_COMPILER_PREFIX "")
3+
4+
IF(GRPC_TOOLS_TARGET STREQUAL "x86_64")
5+
SET(CMAKE_COMPILER_PREFIX "x86_64-linux-gnu-")
6+
7+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
8+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
9+
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m64")
10+
ENDIF()
11+
12+
IF(GRPC_TOOLS_TARGET STREQUAL "i686")
13+
SET(CMAKE_COMPILER_PREFIX "i686-linux-gnu-")
14+
15+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
16+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
17+
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32")
18+
ENDIF()
19+
20+
IF(GRPC_TOOLS_TARGET STREQUAL "aarch64")
21+
SET(CMAKE_COMPILER_PREFIX "aarch64-linux-gnu-")
22+
ENDIF()
23+
24+
SET(CMAKE_C_COMPILER "${CMAKE_COMPILER_PREFIX}gcc")
25+
SET(CMAKE_CXX_COMPILER "${CMAKE_COMPILER_PREFIX}g++")
26+
ELSE()
27+
MESSAGE(WARNING "OS is not linux, not setting variables.")
28+
ENDIF()

packages/grpc-tools/linux_32bit.toolchain.cmake

-3
This file was deleted.

packages/grpc-tools/linux_64bit.toolchain.cmake

-3
This file was deleted.

tools/release/native/Dockerfile

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1-
FROM debian:stretch
1+
FROM ubuntu:22.04
22

33
RUN apt-get update
4-
RUN apt-get install -y cmake curl build-essential python libc6-dev-i386 lib32stdc++-6-dev jq
4+
RUN apt-get install -y cmake curl build-essential \
5+
python3 libc6-dev-i386-cross libc6-dev-amd64-cross \
6+
libc6-dev-arm64-cross lib32stdc++6-amd64-cross jq \
7+
lib32stdc++6-x32-cross libstdc++6-amd64-cross \
8+
libstdc++6-arm64-cross libstdc++6-i386-cross \
9+
gcc-i686-linux-gnu g++-i686-linux-gnu \
10+
gcc-x86-64-linux-gnu g++-x86-64-linux-gnu \
11+
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
512

613
RUN mkdir /usr/local/nvm
714
ENV NVM_DIR /usr/local/nvm

0 commit comments

Comments
 (0)