2017-11-16 compiler meeting notes
Scheduled time: 9 AM central. Meeting link: https://anaconda.webex.com/anaconda-en/j.php?MTID=m11b5ddad66325da22bbe58d7d1c02809
Adopting Anaconda compilers
-
Linux: gcc 7.2
- Prefixed compilers: require activation
- Common adaptations required for new anaconda compilers:
-
Mac: LLVM/clang 4.0.1
- prefixed compilers: require activation
- common adaptations required for new anaconda compilers:
-
Windows: activation scripts
- Need adaptation for Appveyor compiler locations
- common adaptations required:
- cmake
- clear CC and/or CXX vars
- cmake
import os
print("Hello World")
Compiler flag unification
-
GCC
- toolchain: https://github.com/conda-forge/toolchain-feedstock/blob/master/recipe/activate.sh
- toolchain3: https://github.com/conda-forge/toolchain3-feedstock/blob/master/recipe/activate.sh
- anaconda: https://github.com/AnacondaRecipes/aggregate/blob/master/ctng-compilers-activation-feedstock/recipe/conda_build_config.cos6.x86_64.yaml#L41-L54 | Variable | toolchain only | anaconda only | | | -------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | | CFLAGS | -m${ARCH} | march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe | | | CPPFLAGS | | -D_FORTIFY_SOURCE=2 -O2 | | | CXXFLAGS | -DBOOST_MATH_DISABLE_FLOAT128 -m${ARCH} | -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe | | | LDFLAGS | -Wl,-rpath,$PREFIX/lib | Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now | |
-
LLVM/clang
- toolchain: https://github.com/conda-forge/toolchain-feedstock/blob/master/recipe/activate.sh
- toolchain3: https://github.com/conda-forge/toolchain3-feedstock/blob/master/recipe/activate.sh
- anaconda: https://github.com/AnacondaRecipes/aggregate/blob/master/clang/build.sh | Variable | toolchain only | anaconda only | | ---------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | CPPFLAGS | | -mmacosx-version-min=${MACOSX_VERSION_MIN} | | CFLAGS | -mmacosx-version-min=${MACOSX_VERSION_MIN} -m${ARCH} | -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe | | CXXFLAGS | -mmacosx-version-min=${MACOSX_VERSION_MIN} -m${ARCH} | -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe -stdlib=libc++ -fvisibility-inlines-hidden -std=c++14 -fmessage-length=0 | | LDFLAGS | -mmacosx-version-min=${MACOSX_VERSION_MIN} -lc++ -Wl,-rpath,$PREFIX/lib | -pie | | LDFLAGS_CC | | -Wl,-pie -Wl,-headerpad_max_install_names | | | | |
-
Fortran
- toolchain: (not set)
- toolchain3: (not set)
- anaconda:
-
Windows: flags that affect some things (cmake) | Variable | anaconda value | | -------------- | ------------------------------- | | CFLAGS | %CFLAGS% -MD -GL | | CXXFLAGS | %CXXFLAGS% -MD -GL | | LDFLAGS_SHARED | %LDFLAGS_SHARED% -LTCG ucrt.lib |
Overall: everyone receptive to new compilers. Mike to provide way of keeping host and build prefix separate, even when not cross compiling. This would avoid need for things like "always_include_files" and would facilitate conda-forge keeping their llvmdev recipe as is (for cling usage).
Filipe: this is really little more than a vendor change. We already depend on other vendors for compilers (RH for devtoolset2; apple for existing clang), we’re only switching to a different vendor, not fundamentally changing what we do.
Need to maintain llvm with cling patches, but this will not be the default compiler.
Conda-build 3: strategy for moving
- install and use with c-b-a (no cb3 matrix)
- Waiting on feedback from issue https://github.com/conda-tools/conda-build-all/issues/94 but mostly seems OK.
- Mike: needs to fix —skip-existing. Concern is that re-rendering should not generate new packages when only some dependency has changed (bugfix bump?)
- Jonathan to explore ways to skip uploads when only hash has changed as a temporary workaround.
- replace c-b-a with cb3 matrix support
- replace pinning script with central conda_build_config.yaml
- Re-render installs from conda-forge central config package, uses that config
- Each recipe can have its own conda_build_config.yaml alongside its meta.yaml file to override anything
- Where/how to store intermediate files and distribute CI jobs
- John recommended committing these to the feedstock repo during re-rendering
- Jonathan wondered about committing the full conda_build_config.yaml to the repo, or pulling it in as a dependency at build time, but then reducing it using environment variables.
- Mike wondered about CONDA_VARIANT_* as a pattern for environment variables that CB might recognize, so that we keep the current CI scheme. This probably also integrates with Jonathan’s idea of reducing the matrix on a per-job basis. Conda-smithy would create the set of jobs, each with different env vars to reduce the overall matrix for each job.
- replace pinning script with central conda_build_config.yaml
- use run_exports and use either c-b-a or cb3
- People generally interested, but needs to be implemented and proven over time. Good experience so far with defaults.
Fortran support on Windows
- gfortran (msys2) / Flang
- Timeline for adding either
- Mike asked that whatever is done is done with community approval, for the sake of maintaining a high quality user experience.
OpenMP behavior
- Currently, needs extra package on mac, but is included on Linux (not active in flags, though)
- What is desirable default behavior?