From 92d83161841bb69047ba4ad0c4e217012d8afab3 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Tue, 4 May 2021 11:16:56 +0200 Subject: [PATCH] alpine build works --- docker-compose.override.yml | 1 - login_server/CMakeLists.txt.lib | 116 +++++++++++++----- login_server/Dockerfile.alpine-debug | 13 +- .../Dockerfile.dependencies-alpine | 6 + login_server/scripts/build_debug.sh | 17 +-- 5 files changed, 98 insertions(+), 55 deletions(-) diff --git a/docker-compose.override.yml b/docker-compose.override.yml index a95b3dde1..20ee4dfd3 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -102,4 +102,3 @@ services: volumes: frontend_node_modules: login_build_alpine: - diff --git a/login_server/CMakeLists.txt.lib b/login_server/CMakeLists.txt.lib index 89640db06..5c0d5310c 100644 --- a/login_server/CMakeLists.txt.lib +++ b/login_server/CMakeLists.txt.lib @@ -18,25 +18,92 @@ endif() include_directories( "dependencies" "dependencies/tinf/src" - "dependencies/mariadb-connector-c/include" - "dependencies/mariadb-connector-c/build/include" "dependencies/spirit-po/include" - "dependencies/grpc/include" - "dependencies/grpc/third_party/protobuf/src" - "dependencies/grpc/third_party/googletest/googletest/include" - "dependencies/poco/Crypto/include" - "dependencies/poco/Data/include" - "dependencies/poco/Util/include" - "dependencies/poco/Foundation/include" - "dependencies/poco/JSON/include" - "dependencies/poco/Net/include" - "dependencies/poco/NetSSL_OpenSSL/include" - "src/cpp/proto" + "/usr/local/include/mariadb" + "build" + "build/proto" ) +############################## config and add grpc ################################### +find_package(Protobuf REQUIRED) +include_directories(${Protobuf_INCLUDE_DIRS}) + +FIND_PACKAGE(gRPC CONFIG REQUIRED) +find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) + +set(PROTOC_LIB_PATH "/usr/local/lib") +find_library(PROTOBUF_LIB protobufd PATHS ${PROTOC_LIB_PATH} REQUIRED) +find_library(PROTOBUF_LITE_LIB protobuf-lited PATHS ${PROTOC_LIB_PATH} REQUIRED) +find_library(PROTOC_LIB protocd PATHS ${PROTOC_LIB_PATH} REQUIRED) + +set(DEPENDENCIES_GRPC_LIB_PATH "pre_build/dependencies/grpc/lib") +find_library(GRPC_PP_REFLECTION grpc++_reflection PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) +find_library(GRPC_PP grpc++ PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) +find_library(GRPC_GPR gpr PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) +#find_library(GRPC_GRPC grpc PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) +#set(GRPC_LIBS ${GRPC_PP_REFLECTION} ${GRPC_PP} ${GRPC_GPR}) +set(PROTOBUF_LIBS ${PROTOBUF_LIB} ${PROTOBUF_LITE_LIB} ${PROTOC_LIB}) +############################## parse proto files ################################### + +FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/proto GRADIDO_PROTO_MODEL_PATH) +FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/proto/hedera/hedera-protobuf/src/main/proto HEDERA_PROTO_MODEL_PATH) +FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build/proto PROTOBINDING_PATH) +file(MAKE_DIRECTORY ${PROTOBINDING_PATH}) +file(MAKE_DIRECTORY ${PROTOBINDING_PATH}/gradido) +file(MAKE_DIRECTORY ${PROTOBINDING_PATH}/hedera) + +FILE(GLOB DATAMODEL_GRADIDO_PROTOS "${GRADIDO_PROTO_MODEL_PATH}/gradido/*.proto") +FILE(GLOB DATAMODEL_HEDERA_PROTOS "${HEDERA_PROTO_MODEL_PATH}/*.proto") + +FOREACH(proto ${DATAMODEL_GRADIDO_PROTOS}) + FILE(TO_NATIVE_PATH ${proto} proto_native) + get_filename_component(proto_parsed ${proto} NAME_WLE) + FILE(TO_NATIVE_PATH ${PROTOBINDING_PATH}/gradido/${proto_parsed}.pb.h proto_parsed_native) + + IF(${proto_native} IS_NEWER_THAN ${proto_parsed_native}) + EXECUTE_PROCESS( + COMMAND + ${PROTOBUF_PROTOC_EXECUTABLE} + --proto_path=${GRADIDO_PROTO_MODEL_PATH} + --cpp_out=${PROTOBINDING_PATH} + ${proto_native} + RESULT_VARIABLE rv + ) + # Optional, but that can show the user if something have gone wrong with the proto generation + IF(${rv}) + MESSAGE("Generation of data model returned ${rv} for proto ${proto_native}") + ENDIF() + ENDIF() + +ENDFOREACH(proto) + +FOREACH(proto ${DATAMODEL_HEDERA_PROTOS}) + FILE(TO_NATIVE_PATH ${proto} proto_native) + get_filename_component(proto_parsed ${proto} NAME_WLE) + FILE(TO_NATIVE_PATH ${PROTOBINDING_PATH}/hedera/${proto_parsed}.pb.h proto_parsed_native) + IF(${proto_native} IS_NEWER_THAN ${proto_parsed_native}) + EXECUTE_PROCESS( + COMMAND + ${PROTOBUF_PROTOC_EXECUTABLE} + --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN} + --proto_path=${HEDERA_PROTO_MODEL_PATH} + --proto_path=${GOOGLE_PROTOBUF_INCLUDES} + --cpp_out=${PROTOBINDING_PATH}/hedera + --grpc_out ${PROTOBINDING_PATH}/hedera + ${proto_native} + RESULT_VARIABLE rv + ) + # Optional, but that can show the user if something have gone wrong with the proto generation + IF(${rv}) + MESSAGE("Generation of data model returned ${rv} for proto ${proto_native}") + ENDIF() + ENDIF() +ENDFOREACH(proto) + +############################## include src files ################################### #set(MYSQL_INCLUDE_DIR "dependencies/mariadb-connector-c/include") FILE(GLOB CONTROLLER "src/cpp/controller/*.cpp" "src/cpp/controller/*.h") @@ -54,8 +121,8 @@ FILE(GLOB MODEL_GRADIDO "src/cpp/model/gradido/*.h" "src/cpp/model/gradido/*.cpp FILE(GLOB CRYPTO "src/cpp/Crypto/*.h" "src/cpp/Crypto/*.cpp") FILE(GLOB MAIN "src/cpp/*.cpp" "src/cpp/*.c" "src/cpp/*.h") FILE(GLOB MYSQL "src/cpp/MySQL/*.cpp" "src/cpp/MySQL/*.h" "src/cpp/MySQL/Poco/*.h") -FILE(GLOB PROTO_GRADIDO "src/cpp/proto/gradido/*.cc" "src/cpp/proto/gradido/*.h") -FILE(GLOB PROTO_HEDERA "src/cpp/proto/hedera/*.cc" "src/cpp/proto/hedera/*.h") +FILE(GLOB PROTO_GRADIDO "${PROTOBINDING_PATH}/gradido/*.cc" "${PROTOBINDING_PATH}/gradido/*.h") +FILE(GLOB PROTO_HEDERA "${PROTOBINDING_PATH}/hedera/*.cc" "${PROTOBINDING_PATH}/hedera/*.h") # used only for test project FILE(GLOB TEST "src/cpp/test/*.cpp" "src/cpp/test/*.h") @@ -103,12 +170,11 @@ endif() add_executable(Gradido_LoginServer ${LOCAL_SRCS}) -############################## config and add mariadb ################################### - -find_library(MYSQL_LIBRARIES mariadbd PATHS "pre_build/dependencies/mariadb-connector-c/libmariadb/lib" REQUIRED) - +############################## find mariadb ################################### +find_library(MYSQL_LIBRARIES mariadb PATHS "/usr/local/lib/mariadb" REQUIRED) ############################## config and add poco ################################### -set(BUILD_LIB_PATH "pre_build/lib") +set(BUILD_LIB_PATH "(/usr/local/lib") + find_library(POCO_FOUNDATION_LIB PocoFoundationd PATHS ${BUILD_LIB_PATH} REQUIRED) find_library(POCO_UTIL_LIB PocoUtild PATHS ${BUILD_LIB_PATH} REQUIRED) find_library(POCO_NET_SSL_LIB PocoNetSSLd PATHS ${BUILD_LIB_PATH} REQUIRED) @@ -118,16 +184,8 @@ find_library(POCO_NET_LIB PocoNetd PATHS ${BUILD_LIB_PATH} REQUIRED) set(POCO_LIBS ${POCO_FOUNDATION_LIB} ${POCO_UTIL_LIB} ${POCO_NET_SSL_LIB} ${POCO_DATA_LIB} ${POCO_JSON_LIB} ${POCO_NET_LIB}) -############################## config and add grpc ################################### - -find_library(PROTOBUF_LIB protobufd PATHS "pre_build/dependencies/grpc/third_party/protobuf/lib" REQUIRED) -set(DEPENDENCIES_GRPC_LIB_PATH "pre_build/dependencies/grpc/lib") -find_library(GRPC_PP_REFLECTION grpc++_reflectiond PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) -find_library(GRPC_PP grpc++d PATHS ${DEPENDENCIES_GRPC_LIB_PATH} REQUIRED) - -set(GRPC_LIBS, ${GRPC_PP_REFLECTION} ${GRPC_PP} ${PROTOBUF_LIB}) ############################## build login server ################################### -target_link_libraries(Gradido_LoginServer ${GRPC_LIBS} ${POCO_LIBS} ${MYSQL_LIBRARIES} sodium) +target_link_libraries(Gradido_LoginServer gRPC::grpc++ ${PROTOBUF_LIBS} ${MYSQL_LIBRARIES} ${POCO_LIBS} sodium pthread) diff --git a/login_server/Dockerfile.alpine-debug b/login_server/Dockerfile.alpine-debug index 3ca2b5da3..948d434d1 100644 --- a/login_server/Dockerfile.alpine-debug +++ b/login_server/Dockerfile.alpine-debug @@ -1,4 +1,4 @@ -FROM gradido/login_dependencies:alpine-stage2.1 as login_server_alpine_debug +FROM gradido/login_dependencies:alpine-debug-1 as login_server_alpine_debug ENV DOCKER_WORKDIR="/code" @@ -8,14 +8,7 @@ EXPOSE 1201 WORKDIR ${DOCKER_WORKDIR} COPY ./CMakeLists.txt.lib ./CMakeLists.txt -RUN ls -la ${DOCKER_WORKDIR}/pre_build && \ - ls -la ${DOCKER_WORKDIR}/pre_build/lib && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies/grpc/third_party/protobuf/lib && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies/grpc/lib && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies/mariadb-connector-c/ && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies/mariadb-connector-c/libmariadb && \ - ls -la ${DOCKER_WORKDIR}/pre_build/dependencies/mariadb-connector-c/libmariadb/lib +COPY ./scripts ./scripts -CMD cp -r ${DOCKER_WORKDIR}/pre_build/bin ${DOCKER_WORKDIR}/build/bin; cd scripts; ./prepare_build.sh; ./build_debug.sh; cd ..; ./build/bin/Gradido_LoginServer +CMD cd scripts; ./build_debug.sh; cd ..; ./build/bin/Gradido_LoginServer diff --git a/login_server/Dockerfiles/Dockerfile.dependencies-alpine b/login_server/Dockerfiles/Dockerfile.dependencies-alpine index ef4d74dd6..a2cc3225c 100644 --- a/login_server/Dockerfiles/Dockerfile.dependencies-alpine +++ b/login_server/Dockerfiles/Dockerfile.dependencies-alpine @@ -26,6 +26,12 @@ RUN git clone https://github.com/grpc/grpc.git --branch=v1.37.0 --recursive -j4 cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE .. && make -j$(nproc) && \ make install +# abseil don't install themself correctly +RUN cp -r grpc/third_party/abseil-cpp/absl /usr/local/include/ + +# protobuf libs missing after make install +RUN cp grpc/build/third_party/protobuf/*.a /usr/local/lib/ + ######### BUILD poco ############## FROM alpine-gxx-cmake as alpine-gxx-poco diff --git a/login_server/scripts/build_debug.sh b/login_server/scripts/build_debug.sh index 9f6158da8..84356018e 100755 --- a/login_server/scripts/build_debug.sh +++ b/login_server/scripts/build_debug.sh @@ -1,25 +1,12 @@ #!/bin/sh -cd ../build -cmake -DCMAKE_BUILD_TYPE=Debug .. -if [ ! -f "./bin/protoc" ] ; then - make -j$(nproc) protoc - cp ./dependencies/grpc/third_party/protobuf/bin/* ./bin/ -fi -if [ ! -f "./bin/grpc_cpp_plugin" ] ; then - make -j$(nproc) grpc_cpp_plugin - cp ./dependencies/grpc/bin/grpc_cpp_plugin ./bin/grpc_cpp_plugin -fi cd ../scripts -if [ ! -d "./src/cpp/proto/hedera" ] ; then - chmod +x unix_parse_proto.sh - ./unix_parse_proto.sh -fi + chmod +x compile_pot.sh ./compile_pot.sh cd ../build cmake -DCMAKE_BUILD_TYPE=Debug .. -make -j$(nproc) Gradido_LoginServer PageCompiler +make -j$(nproc) Gradido_LoginServer chmod +x ./bin/Gradido_LoginServer