Skip to content

Commit

Permalink
ci: Move java dependent build steps
Browse files Browse the repository at this point in the history
  • Loading branch information
slavek-kucera authored Jan 20, 2023
1 parent 48ed148 commit f160a17
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 78 deletions.
68 changes: 46 additions & 22 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,39 @@ jobs:
if: github.event_name == 'pull_request' && github.base_ref == 'master' && github.head_ref != 'release-next'
run: exit 1

generate_grammar:
name: Generate grammar
runs-on: ubuntu-22.04
needs: [formal-checks]
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
id: cache
with:
path: build/generated_parser
key: ${{ hashFiles('**/CMakeLists.txt', 'cmake/**', 'parser_library/src/parsing/grammar/**') }}
- name: Set up JDK 11
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/setup-java@v3
with:
java-version: 11
distribution: 'temurin'
- name: Generate grammar
if: steps.cache.outputs.cache-hit != 'true'
run: |
mkdir build && cd build
cmake -DBUILD_VSIX=Off -DBUILD_TESTING=Off ../
cmake --build . --target generate_grammar
- name: Upload generated files
uses: actions/upload-artifact@v3
with:
name: grammar
path: build/generated_parser/hlasmparser_*.*

sanitizer-builds:
name: Build with sanitizers
runs-on: ubuntu-22.04
needs: [formal-checks]
needs: [generate_grammar]
strategy:
matrix:
include:
Expand All @@ -60,19 +89,17 @@ jobs:

steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
- name: Download generated files
uses: actions/download-artifact@v3
with:
java-version: 11
distribution: 'temurin'
name: grammar
path: build/generated_parser
- name: Requirements install
run: |
sudo apt-get update
sudo apt-get install ninja-build
- name: Make build directory
run: mkdir build
- name: Configure
run: cmake -G Ninja -DBUILD_VSIX=Off -DCMAKE_C_COMPILER=clang-14 -DCMAKE_CXX_COMPILER=clang++-14 -DCMAKE_CXX_FLAGS="-fsanitize=${{ matrix.flags }}" -DWITH_LIBCXX=Off ../
run: cmake -G Ninja -DBUILD_VSIX=Off -DCMAKE_C_COMPILER=clang-14 -DCMAKE_CXX_COMPILER=clang++-14 -DCMAKE_CXX_FLAGS="-fsanitize=${{ matrix.flags }}" -DWITH_LIBCXX=Off -DUSE_PRE_GENERATED_GRAMMAR="generated_parser" ../
working-directory: build
- name: Build
run: cmake --build .
Expand All @@ -87,52 +114,49 @@ jobs:
build-matrix:
name: Build
runs-on: ${{ matrix.os }}
needs: [formal-checks]
needs: [generate_grammar]
strategy:
matrix:
include:
- os: ubuntu-22.04
native: linux
container: alpine:3.16
prereq: apk update && apk add --no-cache linux-headers git g++ cmake util-linux-dev npm ninja pkgconfig openjdk11 maven
config: cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static" -DBUILD_VSIX=Off ../
prereq: apk update && apk add --no-cache linux-headers git g++ cmake ninja
config: cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-static" -DBUILD_VSIX=Off -DUSE_PRE_GENERATED_GRAMMAR="generated_parser" ../
dbg-strip: objcopy --only-keep-debug language_server language_server.dbg && objcopy --strip-unneeded language_server && objcopy --add-gnu-debuglink=language_server.dbg language_server
dbg-pattern: build/bin/language_server.dbg
- os: ubuntu-22.04
native: wasm
container: emscripten/emsdk:3.1.13
prereq: sudo apt-get update && sudo apt-get install -y ninja-build maven
prereq: sudo apt-get update && sudo apt-get install -y ninja-build
config: >
emcmake cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DDISCOVER_TESTS=Off
-DWITH_LIBCXX=Off -DWITH_STATIC_CRT=Off -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -fexceptions"
-DWITH_LIBCXX=Off -DWITH_STATIC_CRT=Off -DCMAKE_CXX_FLAGS="-s USE_PTHREADS=1 -fexceptions" -DUSE_PRE_GENERATED_GRAMMAR="generated_parser"
-DCMAKE_EXE_LINKER_FLAGS="-s PTHREAD_POOL_SIZE=8 -s TOTAL_MEMORY=268435456 -s PROXY_TO_PTHREAD=1 -s NODERAWFS=1 -s EXIT_RUNTIME=1 --bind"
-DCMAKE_CROSSCOMPILING_EMULATOR="node;--experimental-wasm-threads;--experimental-wasm-bulk-memory"
-Dgtest_disable_pthreads=On -DBUILD_VSIX=Off ../
test-runner: node --experimental-wasm-threads --experimental-wasm-bulk-memory
artifacts-ext: .*
- os: windows-2022
native: win32
config: cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_VSIX=Off ../
config: cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_VSIX=Off -DUSE_PRE_GENERATED_GRAMMAR="generated_parser" ../
build-extra: --parallel --config Release
artifacts-ext: .exe
- os: macos-12
native: darwin
prereq: brew install ninja
config: cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$(brew --prefix llvm@14)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@14)/bin/clang++ -DLLVM_PATH=$(brew --prefix llvm@14) -DBUILD_VSIX=Off ../
config: cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$(brew --prefix llvm@14)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@14)/bin/clang++ -DLLVM_PATH=$(brew --prefix llvm@14) -DBUILD_VSIX=Off -DUSE_PRE_GENERATED_GRAMMAR="generated_parser" ../
container: ${{ matrix.container }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
if: ${{ !matrix.container }}
uses: actions/setup-java@v3
- name: Download generated files
uses: actions/download-artifact@v3
with:
java-version: 11
distribution: 'temurin'
name: grammar
path: build/generated_parser
- name: Requirements install
if: ${{ matrix.prereq }}
run: ${{ matrix.prereq }}
- name: Make build directory
run: mkdir build
- name: Configure
run: ${{ matrix.config }}
working-directory: build
Expand Down
9 changes: 2 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with:
option(WITH_STATIC_CRT "(Visual C++) Enable to statically link CRT, which avoids requiring users to install the redistribution package.
To disable with: -DWITH_STATIC_CRT=Off" On)
option(DISCOVER_TESTS "Enables CTest by executing tests and discovering test cases. To disable with: -DDISCOVER_TESTS=Off" On)
option(FS_PATH "Provide path to libc++fs for installation on MacOS" "")
option(BUILD_VSIX "When disabled, the VS Code client is not built and it is not packaged into vsix." On)
option(BUILD_FUZZER "Enable building of the fuzzer. Tested with clang and libstdc++ (enable with -DWITH_LIBCXX=Off)" Off)

set(USE_PRE_GENERATED_GRAMMAR "" CACHE PATH "Directory with pre-generated grammar files")

if(BUILD_SHARED_LIBS AND WITH_STATIC_CRT AND MSVC)
message(WARNING "Building shared libraries with static CRT!")
endif()
Expand All @@ -72,12 +73,6 @@ if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(WITH_LIBCXX Off)
endif()

#Check whether npm is installed and in path
find_program(NPM_RETURN npm)
if(NPM_RETURN MATCHES "NPM_RETURN-NOTFOUND")
message(FATAL_ERROR "Cannot find npm. Are you sure npm is installed and in the path?" )
endif()

LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake )

include(compiler_flags)
Expand Down
10 changes: 8 additions & 2 deletions clients/vscode-hlasmplugin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,17 @@ if(BUILD_SHARED_LIBS)
endif()
endif()

#Check whether npm is installed and in path
find_program(NPM_RETURN npm)
if(NPM_RETURN MATCHES "NPM_RETURN-NOTFOUND")
message(FATAL_ERROR "Cannot find npm. Are you sure npm is installed and in the path?" )
endif()

add_custom_command(
OUTPUT
${CHECK_CI}
COMMAND
${CALL} npm --unsafe-perm ci
${CALL} ${NPM_RETURN} --unsafe-perm ci
#the --unsafe-perm is needed when user with root rights runs the build on linux
COMMAND
${CMAKE_COMMAND} -E touch ${CHECK_CI}
Expand All @@ -73,7 +79,7 @@ add_custom_command(
OUTPUT
${CHECK_BUILD}
COMMAND
${CALL} npm --unsafe-perm run compile
${CALL} ${NPM_RETURN} --unsafe-perm run compile
#the --unsafe-perm is needed when user with root rights runs the build on linux
COMMAND
${CMAKE_COMMAND} -E make_directory ${BIN_FOLDER}
Expand Down
47 changes: 24 additions & 23 deletions cmake/external_antlr4cpp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,10 @@ PROJECT(antlr4cpp_fetcher CXX)
INCLUDE(FetchContent)
FIND_PACKAGE(Git REQUIRED)

# only JRE required
FIND_PACKAGE(Java 11 COMPONENTS Runtime REQUIRED)

if(APPLE)
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
endif()

#Check whether maven is installed and in path
find_program(MVN_RETURN mvn)
if(MVN_RETURN MATCHES "MVN_RETURN-NOTFOUND")
message(FATAL_ERROR "Cannot find mvn. Are you sure maven is installed and in the path?" )
endif()

# external repository
# GIT_REPOSITORY https://github.com/antlr/antlr4.git
set(ANTLR4CPP_EXTERNAL_REPO "https://github.com/antlr/antlr4.git")
Expand Down Expand Up @@ -66,21 +57,31 @@ if(NOT antlr4cpp_POPULATED)
set(ANTLR_JAR_LOCATION
${antlr4cpp_SOURCE_DIR}/tool/target/antlr4-${ANTLR4CPP_EXTERNAL_TAG}-complete.jar)

add_custom_command(
OUTPUT
${ANTLR_JAR_LOCATION}
COMMAND
mvn -DskipTests install
COMMENT
"Building ANTLR jar..."
WORKING_DIRECTORY
${antlr4cpp_SOURCE_DIR}/tool/
VERBATIM
)
if(NOT USE_PRE_GENERATED_GRAMMAR)
# only JRE required
FIND_PACKAGE(Java 11 COMPONENTS Runtime REQUIRED)
#Check whether maven is installed and in path
find_program(MVN_RETURN mvn)
if(MVN_RETURN MATCHES "MVN_RETURN-NOTFOUND")
message(FATAL_ERROR "Cannot find mvn. Are you sure maven is installed and in the path?" )
endif()

add_custom_command(
OUTPUT
${ANTLR_JAR_LOCATION}
COMMAND
mvn -DskipTests install
COMMENT
"Building ANTLR jar..."
WORKING_DIRECTORY
${antlr4cpp_SOURCE_DIR}/tool/
VERBATIM
)

add_custom_target(antlr4jar
DEPENDS
${ANTLR_JAR_LOCATION})
add_custom_target(antlr4jar
DEPENDS
${ANTLR_JAR_LOCATION})
endif()
endif()

if(BUILD_SHARED_LIBS)
Expand Down
13 changes: 9 additions & 4 deletions parser_library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ include(GenerateExportHeader)
include(GoogleTest)
project(parser_library)

set(GENERATED_FOLDER ${CMAKE_BINARY_DIR}/generated_parser/)
set(GENERATED_FOLDER ${CMAKE_BINARY_DIR}/generated_sources/)
if(NOT USE_PRE_GENERATED_GRAMMAR)
set(GENERATED_GRAMMER_FOLDER ${CMAKE_BINARY_DIR}/generated_parser/)
else()
set(GENERATED_GRAMMER_FOLDER ${USE_PRE_GENERATED_GRAMMAR})
endif()

add_library(parser_library)

Expand All @@ -26,15 +31,15 @@ if(NOT BUILD_SHARED_LIBS)
endif()

generate_export_header(parser_library
EXPORT_FILE_NAME ${GENERATED_FOLDER}/export/parser_library_export.h)
EXPORT_FILE_NAME ${GENERATED_FOLDER}/parser_library_export.h)

target_sources(parser_library PUBLIC ${GENERATED_FOLDER}/export/parser_library_export.h)
target_sources(parser_library PUBLIC ${GENERATED_FOLDER}/parser_library_export.h)

target_include_directories(parser_library PUBLIC
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
${GENERATED_GRAMMER_FOLDER}
${GENERATED_FOLDER}
${GENERATED_FOLDER}/export
)

target_link_libraries(parser_library parser_library_generated)
Expand Down
47 changes: 27 additions & 20 deletions parser_library/src/parsing/grammar/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,49 @@
#generated grammar source files

set(GENERATED_SRC_CPP
${GENERATED_FOLDER}/hlasmparser_singleline.cpp
${GENERATED_FOLDER}/hlasmparser_multiline.cpp
${GENERATED_GRAMMER_FOLDER}/hlasmparser_singleline.cpp
${GENERATED_GRAMMER_FOLDER}/hlasmparser_multiline.cpp
)

set(GENERATED_SRC
${GENERATED_SRC_CPP}
${GENERATED_FOLDER}/hlasmparser_singleline.h
${GENERATED_FOLDER}/hlasmparser_multiline.h
${GENERATED_GRAMMER_FOLDER}/hlasmparser_singleline.h
${GENERATED_GRAMMER_FOLDER}/hlasmparser_multiline.h
)

file(GLOB GRAMMAR_SRC
"*.g4"
)
if(NOT USE_PRE_GENERATED_GRAMMAR)
file(GLOB GRAMMAR_SRC
"*.g4"
)

add_custom_command(OUTPUT ${GENERATED_SRC}
COMMAND
${CMAKE_COMMAND} -E make_directory ${GENERATED_FOLDER}
COMMAND
"${Java_JAVA_EXECUTABLE}" -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -lib ${PROJECT_SOURCE_DIR}/src/parsing/grammar/ -o ${GENERATED_FOLDER}/ -package hlasm_plugin::parser_library::parsing hlasmparser_singleline.g4
COMMAND
"${Java_JAVA_EXECUTABLE}" -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -lib ${PROJECT_SOURCE_DIR}/src/parsing/grammar/ -o ${GENERATED_FOLDER}/ -package hlasm_plugin::parser_library::parsing hlasmparser_multiline.g4
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/parsing/grammar/"
DEPENDS antlr4jar ${GRAMMAR_SRC} lex.tokens
)
add_custom_command(OUTPUT ${GENERATED_SRC}
COMMAND
${CMAKE_COMMAND} -E make_directory ${GENERATED_GRAMMER_FOLDER}
COMMAND
"${Java_JAVA_EXECUTABLE}" -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -lib ${PROJECT_SOURCE_DIR}/src/parsing/grammar/ -o ${GENERATED_GRAMMER_FOLDER}/ -package hlasm_plugin::parser_library::parsing hlasmparser_singleline.g4
COMMAND
"${Java_JAVA_EXECUTABLE}" -jar ${ANTLR_JAR_LOCATION} -Werror -Dlanguage=Cpp -lib ${PROJECT_SOURCE_DIR}/src/parsing/grammar/ -o ${GENERATED_GRAMMER_FOLDER}/ -package hlasm_plugin::parser_library::parsing hlasmparser_multiline.g4
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/parsing/grammar/"
DEPENDS antlr4jar ${GRAMMAR_SRC} lex.tokens
)

add_custom_target(generate_grammar
DEPENDS
${GENERATED_SRC}
)
endif()

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set_source_files_properties(${GENERATED_FOLDER}/hlasmparser_singleline.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter")
set_source_files_properties(${GENERATED_FOLDER}/hlasmparser_multiline.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter")
set_source_files_properties(${GENERATED_GRAMMER_FOLDER}/hlasmparser_singleline.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter")
set_source_files_properties(${GENERATED_GRAMMER_FOLDER}/hlasmparser_multiline.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter")
endif()

add_library(parser_library_generated OBJECT "${GENERATED_SRC}")

target_include_directories(parser_library_generated PRIVATE
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
${GENERATED_GRAMMER_FOLDER}
${GENERATED_FOLDER}
${GENERATED_FOLDER}/export
)
target_link_libraries(parser_library_generated ${ANTLR4_RUNTIME})

0 comments on commit f160a17

Please sign in to comment.