Setup Linux build for pyconcept and ConceptCoreLibrary

This commit is contained in:
IRBorisov 2024-04-17 21:10:07 +03:00
parent 793109829b
commit f1272c50d3
15 changed files with 84 additions and 139 deletions

View File

@ -4,26 +4,35 @@
.github .github
# Windows specific # Windows specific
*.ps1 .vs
**/*.ps1
**/*.vcxproj*
**/*.sln
**/packages.config
# Local build/utility folders # Local build/utility folders
.vscode .vscode
.vs **/*.pyc
*.vcxproj.user **/*.pyd
*.pyc
*.pyd
**/CMakeUserPresets.json **/CMakeUserPresets.json
output output
packages packages
**/build **/build/
**/venv **/secrets/
**/venv/
**/pyconcept/ccl **/pyconcept/ccl
**/egg-info **/*egg-info
# Docker
Dockerfile
# Specific items # Specific items
docker-compose.yml docker-compose.yml
rslang/src/RSParserImpl.output rslang/src/RSParserImpl.output
rslang/src/RSParserImpl.gv rslang/src/RSParserImpl.gv
**/*.y
**/*.l

1
.gitignore vendored
View File

@ -6,6 +6,7 @@
*.pyc *.pyc
*.pyd *.pyd
secrets
packages packages
build build
output output

27
BuildAll.sh Normal file
View File

@ -0,0 +1,27 @@
#
# Build script for linux distro
#
set -e # Exit immediately if a command exits with a non-zero status.
set -u # Treat unset variables as an error when substituting.
export CMAKE_BUILD_TYPE="Release"
# Choose between clang/clang++ or gcc/g++
export CC="gcc"
export CXX="g++"
# Build CCL
cd /home/ccl
conan profile detect --force
conan install . --build=missing
cmake --preset conan-release
cmake --build --preset conan-release
ctest --test-dir build/Release --output-on-failure
cmake --install build/Release --prefix /home/output
# Build pyconcept
cd /home/pyconcept
sh scripts/Build.sh
echo 'Done'
exit 0

View File

@ -89,15 +89,10 @@ RUN apt-get autoclean -y && \
# ====================== END OF CPP-Python environment ================== # ====================== END OF CPP-Python environment ==================
FROM cpp-builder as CCL FROM cpp-builder as CCL
ARG CMAKE_BUILD_TYPE="Release"
# Choose between clang/clang++ or gcc/g++ WORKDIR /home
ENV CC="gcc"
ENV CXX="g++"
ENV BUILD_HOME=/home
WORKDIR $BUILD_HOME
COPY . /home COPY . /home
ENTRYPOINT ["sh", "/home/entrypoint.sh"] RUN sed -i 's/\r$//g' /home/BuildAll.sh && \
chmod +x /home/BuildAll.sh

View File

@ -10,7 +10,7 @@ C++ library for manipulating concepts in formal language of advanced set theory
## 📦 Project build ## 📦 Project build
- ccl + coredll + pyconcept - Dockerfile to setup Clang / GCC build for Ubuntu development. - ccl + coredll + pyconcept - Dockerfile to setup Clang / GCC build for Ubuntu development (see BuildAll.sh).
- ccl + coredll local dev - Visual Studio Solution for Windows development - 'CCL_full.sln'. - ccl + coredll local dev - Visual Studio Solution for Windows development - 'CCL_full.sln'.
- ccl - VS Code and ccl/CMakeLists.txt for other platforms. - ccl - VS Code and ccl/CMakeLists.txt for other platforms.
- pyconcept - python setup.py OR pyconcept/scripts - pyconcept - python setup.py OR pyconcept/scripts
@ -20,6 +20,13 @@ After changing grammar / syntax you can rebuild lexers and parser using 'scripts
- parser requires [Bison](https://www.gnu.org/software/bison/) installed - parser requires [Bison](https://www.gnu.org/software/bison/) installed
- lexer requires [Re-flex](https://github.com/Genivia/RE-flex) - lexer requires [Re-flex](https://github.com/Genivia/RE-flex)
To run terminal after building docker container use command
```
docker run --rm -it --entrypoint /bin/bash concept-core-builder
```
## 💝 Acknowledgements ## 💝 Acknowledgements
This project is based on multiple projects and works listed below. If you notice any problems with licensing or missing acknowledgements please inform repository maintainer. This project is based on multiple projects and works listed below. If you notice any problems with licensing or missing acknowledgements please inform repository maintainer.

2
TODO.txt Normal file
View File

@ -0,0 +1,2 @@
- wrap ConceptCoreLibrary in conan package for pyconcept consumption
- setup github actions to build and (maybe) publish pyconcept package

View File

@ -29,5 +29,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
) )
endif() endif()
enable_testing()
include(GoogleTest) include(GoogleTest)
gtest_discover_tests(ccl_Tests) gtest_discover_tests(ccl_Tests)

View File

@ -11,4 +11,4 @@ services:
context: ./ context: ./
volumes: volumes:
- concept_volume:/home/output - concept_volume:/home/output
command: sh /home/entrypoint.sh command: /bin/sh BuildAll.sh

View File

@ -1,91 +0,0 @@
#
# Build script for linux distro
#
set -e # Exit immediately if a command exits with a non-zero status.
set -u # Treat unset variables as an error when substituting.
# Set-Location $PSScriptRoot
# & conan profile detect --force
# & conan install .
# & cmake --preset conan-default
# # & cmake --preset conan-default -DCC_BuildTests=False
# & cmake --build --preset conan-release
# & ctest --test-dir build --output-on-failure
# & cmake --install build --prefix ../output
echo 'Done'
exit 0
# packageName='pyconcept'
# output='../../output/py'
# pythonEnv='venv/bin/python3'
# python3.12 -m venv venv
# $pythonEnv -m pip install -r requirements-build.txt
# mkdir -p import
# cp -r ../../output/include import/
# cp -r ../../output/lib import/
# $pythonEnv -m build --no-isolation --wheel --outdir=$output/$packageName
# wheel=$(find $output/$packageName -name '*.whl')
# $pythonEnv -m pip uninstall -y $packageName
# $pythonEnv -m pip install $wheel
# $pythonEnv -m unittest
# rm -rf venv
# COPY cclCommons /home/cclCommons
# WORKDIR /home/cclCommons/build
# RUN cmake ../ && \
# cmake --build . && \
# ctest --output-on-failure && \
# cmake --install . --prefix /home/output
# WORKDIR /home
# COPY rslang /home/rslang
# WORKDIR /home/rslang/build
# RUN cmake ../ && \
# cmake --build . && \
# ctest --output-on-failure && \
# cmake --install . --prefix /home/output
# WORKDIR /home
# COPY cclLang /home/cclLang
# WORKDIR /home/cclLang/build
# RUN cmake ../ && \
# cmake --build . && \
# ctest --output-on-failure && \
# cmake --install . --prefix /home/output
# WORKDIR /home
# COPY cclGraph /home/cclGraph
# WORKDIR /home/cclGraph/build
# RUN cmake ../ && \
# cmake --build . && \
# ctest --output-on-failure && \
# cmake --install . --prefix /home/output
# WORKDIR /home
# COPY core /home/core
# WORKDIR /home/core/build
# RUN cmake ../ && \
# cmake --build . && \
# ctest --output-on-failure && \
# cmake --install . --prefix /home/output
# WORKDIR /home
# # Build python library
# COPY examples/pyconcept /home/examples/pyconcept
# WORKDIR /home/examples/pyconcept
# RUN script/Build.sh
# WORKDIR /home

View File

@ -26,18 +26,6 @@ find_package(pybind11 REQUIRED)
## Project Setup ## Project Setup
## ##
pybind11_add_module(pyconcept MODULE src/pyconcept.cpp) pybind11_add_module(pyconcept MODULE src/pyconcept.cpp)
# add_library(pyconcept)
# set_target_properties(pyconcept PROPERTIES
# OUTPUT_NAME pyconcept
# DEBUG_POSTFIX d
# POSITION_INDEPENDENT_CODE ON
# )
# target_sources(pyconcept
# PRIVATE
# src/pyconcept.cpp
# )
target_include_directories(pyconcept target_include_directories(pyconcept
PUBLIC PUBLIC

View File

@ -1,25 +1,31 @@
# Build script for linux distro # Build script for Linux
set -e set -e
packageName='pyconcept' packageName='pyconcept'
output='../../output/py' output='../output/py'
pythonEnv='venv/bin/python3' pythonEnv='venv/bin/python3'
# Setup python env
python3.12 -m venv venv python3.12 -m venv venv
$pythonEnv -m pip install -r requirements-build.txt ${pythonEnv} -m pip install -r requirements-build.txt
mkdir -p import # Import sources from ccl
cp -r ../../output/include import/ mkdir -p ccl
cp -r ../../output/lib import/ cd ../ccl
cp -r `ls -A | grep -v 'build'` "../pyconcept/ccl"
cd ../pyconcept
$pythonEnv -m build --no-isolation --wheel --outdir=$output/$packageName # Build pyconcept
${pythonEnv} -m build --no-isolation --wheel --outdir=${output}/${packageName}
wheel=$(find $output/$packageName -name '*.whl') wheel=$(find ${output}/${packageName} -name '*.whl')
$pythonEnv -m pip uninstall -y $packageName # Test pyconcept
$pythonEnv -m pip install $wheel ${pythonEnv} -m pip uninstall -y ${packageName}
$pythonEnv -m unittest ${pythonEnv} -m pip install ${wheel}
${pythonEnv} -m unittest
rm -rf venv # rm -rf venv
# rm -rf build
exit 0 exit 0

View File

@ -36,7 +36,7 @@ class CMakeBuild(build_ext):
build_type = 'Debug' if debug_flag else 'Release' build_type = 'Debug' if debug_flag else 'Release'
cmake_generator = os.environ.get('CMAKE_GENERATOR', '') cmake_generator = os.environ.get('CMAKE_GENERATOR', '')
cmake_args = [ cmake_args = [
'--preset conan-default', '--preset conan-release' if self.compiler.compiler_type != 'msvc' else '--preset conan-default',
f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={output_folder}{os.sep}", f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={output_folder}{os.sep}",
f"-DCMAKE_BUILD_TYPE={build_type}" f"-DCMAKE_BUILD_TYPE={build_type}"
] ]
@ -81,7 +81,7 @@ class CMakeBuild(build_ext):
build_args += [f"-j{self.parallel}"] build_args += [f"-j{self.parallel}"]
subprocess.run(['conan', 'profile', 'detect', '--force'], check=True) subprocess.run(['conan', 'profile', 'detect', '--force'], check=True)
subprocess.run(['conan', 'install', '.'], check=True) subprocess.run(['conan', 'install', '.', '--build=missing'], check=True)
subprocess.run(['cmake', target.source_dir, *cmake_args], check=True) subprocess.run(['cmake', target.source_dir, *cmake_args], check=True)
subprocess.run(['cmake', '--build', '.', *build_args], check=True) subprocess.run(['cmake', '--build', '.', *build_args], check=True)

View File

@ -64,7 +64,7 @@ class TestBinding(unittest.TestCase):
self.assertEqual(fixedSchema['items'][1]['alias'], 'S1') self.assertEqual(fixedSchema['items'][1]['alias'], 'S1')
def _get_default_schema(self) -> str: def _get_default_schema(self) -> str:
file_path = os.getcwd() + r'/tests/data/КС начальник-подчиненный.trs' file_path = os.getcwd() + r'/tests/data/Schema1.trs'
return _read_trs(file_path) return _read_trs(file_path)

View File

@ -3,7 +3,7 @@
Set-Location $PSScriptRoot Set-Location $PSScriptRoot
& conan profile detect --force & conan profile detect --force
& conan install . & conan install . --build=missing
& cmake --preset conan-default & cmake --preset conan-default
# & cmake --preset conan-default -DCC_BuildTests=False # & cmake --preset conan-default -DCC_BuildTests=False