Size: 7496
Comment: glext
|
Size: 8004
Comment: cmake complete
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
= Under Construction = |
|
Line 8: | Line 5: |
1. Dependencies are from Anaconda. CMake runs conda to detect environment location and uses it to find packages. | 1. Dependency binaries are pulled from Anaconda. CMake uses conda environment location to find packages. |
Line 10: | Line 7: |
{{{#!wiki comment 1. Does not specify all source files, so the files will not be added to IDE project files and will not be available for editing. This makes it inconvenient to use Visual Studio as editor. Need ''add_custom_target ... [SOURCES src1 [src2...]]'' https://cmake.org/cmake/help/v3.15/command/add_custom_target.html }}} 1. Make targets can be listed with {{{make help}}}. Some convenience targets: |
1. Make targets can be listed with {{{make help}}}. Some convenience targets are: |
Line 30: | Line 23: |
1. ''libpython'' can be linked statically or dynamically when python is built. It is important for python extensions to be aware of the type of linking in order to avoid segfaults. (Need a little more details, refs?) | 1. ''libpython'' can be linked statically or dynamically when python is built. It is important for python extensions to be aware of the type of linking in order to avoid segfaults. This can be accomplished by querying Py_ENABLE_SHARED. |
Line 32: | Line 25: |
1. opengl ??? | {{{#!highlight bash python -c "import sysconfig; print(sysconfig.get_config_var('Py_ENABLE_SHARED'))" }}} |
Line 34: | Line 29: |
1. cmake <source-dir> -DENABLE_WARNINGS=OFF | In EMAN, it is done in [[https://github.com/cryoem/eman2/blob/master/cmake/FindPython.cmake#L29-L73|cmake/FindPython.cmake]] |
Line 36: | Line 31: |
{{{#!wiki comment 1. Modern cmake, targets as much as possible, interface libs(?), anaconda, find_packages in cmake,... |
1. OpenGL detection when Anaconda's compilers are used is done using a cmake toolchain file. 1. glext.h file needed for OpenGL related module compilation is already present on Linux and Mac. On Windows, it is manually copied once into C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl. On Appveyor it is downloaded as part of env setup every time a test is run. 1. Compiler warnings are turned off by default and can be turned on by setting ENABLE_WARNINGS=ON {{{#!highlight bash cmake <source-dir> -DENABLE_WARNINGS=ON |
Line 39: | Line 39: |
1. Setting compiler and linker options by {{{include_directories, add_definitions}}} that have global affects are avoided and target-focused design employing modern cmake concepts like interface libraries are used as much as possible. = Under Construction = |
Contents
CMake
- Dependency binaries are pulled from Anaconda. CMake uses conda environment location to find packages.
Make targets can be listed with make help. Some convenience targets are:
$ make help The following are some of the valid targets for this Makefile: ... ..... ... ..... ... PythonFiles ... test-rt ... test-py-compile ... test-verbose-broken ... test-progs ... test-verbose ... ..... ... .....
libpython can be linked statically or dynamically when python is built. It is important for python extensions to be aware of the type of linking in order to avoid segfaults. This can be accomplished by querying Py_ENABLE_SHARED.
1 python -c "import sysconfig; print(sysconfig.get_config_var('Py_ENABLE_SHARED'))"
In EMAN, it is done in cmake/FindPython.cmake
- OpenGL detection when Anaconda's compilers are used is done using a cmake toolchain file.
- glext.h file needed for OpenGL related module compilation is already present on Linux and Mac. On Windows, it is manually copied once into C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl. On Appveyor it is downloaded as part of env setup every time a test is run.
- Compiler warnings are turned off by default and can be turned on by setting ENABLE_WARNINGS=ON
1 cmake <source-dir> -DENABLE_WARNINGS=ON
Setting compiler and linker options by include_directories, add_definitions that have global affects are avoided and target-focused design employing modern cmake concepts like interface libraries are used as much as possible.
Under Construction
Anaconda
Feedstocks, conda-smithy, https://anaconda.org/cryoem/
- ftgl
- fftw-mpi
- openmpi
- pydusa and pydusa-feedstock
- constructor and constructor-feedstock
- eman-deps-feedstock, eman-deps-cli
- eman-packaging-feedstock
File structure, dependencies ? ABI compat
- conda
- conda-build
- constructor
Continuous Integration
GitHub webhooks
- Test source build and conda recipe build (conda-build).
- Binary builds on local build machines.
- Manually triggered build on master and non-master.
- Cron builds.
- Release binaries manually copied from cont. builds.
JenkinsCI: Jenkinsfile, binary builds
Jenkins Setup
- Triggers
GitHub webhooks
- Cron
- Binary build trigger
- Jenkins master needs PATH prepended with $CONDA_PREFIX/bin
- Jenkins Docker image, docker-coompose or docker stack deploy
- docker-compose.yml at home dir in build machines
- plugins
- config, jcasc, config.xml, users.xml, jobs/*.xml?, gpg encrypt
- Agent nodes setup, agent nodes auto-start
- Server and agent per machine vs single server and os agents
- Master only
- Master and agent per machine
- Single master and OS agents
Linux
- systemctl
docker run -d -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts &
docker run -d -u root --name jenkins-master -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e PLUGINS_FORCE_UPGRADE=true -e TRY_UPGRADE_IF_NO_MARKER=true --restart unless-stopped cryoem/jenkins:dev
cron:
0 0 * * * bash /home/eman2/workspace/cronjobs/cleanup_harddisk.sh
$ cat Desktop/docker.txt docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins/jenkins:lts docker run -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /var/jenkins_home:/home/eman2/jenkins_home jenkins/jenkins:lts
# Working docker run -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins/jenkins:lts docker run -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home jenkins
docker run -d -u root -p 8080:8080 -p 50000:50000 --restart unless-stopped -v /home/eman2/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
sudo docker run -it -v /var/jenkins_home:/home/eman2/jenkins_home jenkins
startup: right-click ???
Mac
- plist
docker run -d --name jenkins-master -p 8080:8080 -p 50000:50000 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
Auto startup: plist https://imega.club/2015/06/01/autostart-slave-jenkins-mac/ /Users/eman/Library/LaunchAgents
slave clock sync https://blog.shameerc.com/2017/03/quick-tip-fixing-time-drift-issue-on-docker-for-mac docker run --rm --privileged alpine hwclock -s
client 0 free swap space
$ cat Desktop/docker.txt docker run -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home jenkins docker run -it -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins
# Working docker run -it -p 8080:8080 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
# Blue Ocean docker run \
- -u root \ --rm \ -d \ -p 8080:8080 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
# Latest docker run -d --name jenkins-master -p 8080:8080 -p 50000:50000 -v /Users/eman/workspace/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
FROM jenkins/jenkins:lts COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
plugins.txt: ace-editor:latest bouncycastle-api:latest branch-api:latest chef-identity:latest
Settings: tokens slaves
Windows
Move jenkins_home http://tech.nitoyon.com/en/blog/2014/02/25/jenkins-home-win/
Run as service: Open Task Manager(Ctrl+Shift+Esc), New task, Browse to agent.jnlp and run as admin does this work? This is when starting via Web Launcher doesn't work.
currently, task scheduler works need to have miniconda pn path, set it during miniconda installation, but do not(?) register python.
While installing miniconda register python and add to PATH. Then, conda init in cmd (git init cmd.exe) and git windows (git init bash). And, maybe restart???
BUG: miniconda3 conda-build=3.17.8 adds vc14 even if python2 is requested in build reqs
OPENGL: https://github.com/conda/conda-recipes/blob/master/qt5/notes.md
Distribution
Binaries on cryoem.bcm.edu
EMAN2 on anaconda.org