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
# Windows specific
*.ps1
.vs
**/*.ps1
**/*.vcxproj*
**/*.sln
**/packages.config
# Local build/utility folders
.vscode
.vs
*.vcxproj.user
*.pyc
*.pyd
**/*.pyc
**/*.pyd
**/CMakeUserPresets.json
output
packages
**/build
**/venv
**/build/
**/secrets/
**/venv/
**/pyconcept/ccl
**/egg-info
**/*egg-info
# Docker
Dockerfile
# Specific items
docker-compose.yml
rslang/src/RSParserImpl.output
rslang/src/RSParserImpl.gv
**/*.y
**/*.l

1
.gitignore vendored
View File

@ -6,6 +6,7 @@
*.pyc
*.pyd
secrets
packages
build
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 ==================
FROM cpp-builder as CCL
ARG CMAKE_BUILD_TYPE="Release"
# Choose between clang/clang++ or gcc/g++
ENV CC="gcc"
ENV CXX="g++"
ENV BUILD_HOME=/home
WORKDIR $BUILD_HOME
WORKDIR /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
- 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 - VS Code and ccl/CMakeLists.txt for other platforms.
- 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
- 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
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()
enable_testing()
include(GoogleTest)
gtest_discover_tests(ccl_Tests)

View File

@ -11,4 +11,4 @@ services:
context: ./
volumes:
- 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
##
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
PUBLIC

View File

@ -1,25 +1,31 @@
# Build script for linux distro
# Build script for Linux
set -e
packageName='pyconcept'
output='../../output/py'
output='../output/py'
pythonEnv='venv/bin/python3'
# Setup python env
python3.12 -m venv venv
$pythonEnv -m pip install -r requirements-build.txt
${pythonEnv} -m pip install -r requirements-build.txt
mkdir -p import
cp -r ../../output/include import/
cp -r ../../output/lib import/
# Import sources from ccl
mkdir -p ccl
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
$pythonEnv -m pip install $wheel
$pythonEnv -m unittest
# Test pyconcept
${pythonEnv} -m pip uninstall -y ${packageName}
${pythonEnv} -m pip install ${wheel}
${pythonEnv} -m unittest
rm -rf venv
# rm -rf venv
# rm -rf build
exit 0

View File

@ -36,7 +36,7 @@ class CMakeBuild(build_ext):
build_type = 'Debug' if debug_flag else 'Release'
cmake_generator = os.environ.get('CMAKE_GENERATOR', '')
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_BUILD_TYPE={build_type}"
]
@ -81,7 +81,7 @@ class CMakeBuild(build_ext):
build_args += [f"-j{self.parallel}"]
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', '--build', '.', *build_args], check=True)

View File

@ -64,7 +64,7 @@ class TestBinding(unittest.TestCase):
self.assertEqual(fixedSchema['items'][1]['alias'], 'S1')
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)

View File

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