aivazis / config

10 stars 2 forks source link

Using custom compilers? #4

Closed piyushrpt closed 5 years ago

piyushrpt commented 5 years ago

How can I force config to use a specific compiler installed in a non-standard location with a non-standard name?

Example: x86_64-conda_cos6-linux-gnu-cpp

piyushrpt commented 5 years ago

Following your suggestion, COMPILER_CXX_NAME works for building pyre. However, I'm running into an error that I haven't seen before. Has to do with forward.h in lib/pyre/memory

std-builds.def:80: /home/piyushrpt/miniconda3/envs/recipe/conda-bld/pyre_1550737717308/work/pyre/builds/Linux-4.x_x86_64-debug/tmp/pyre/lib/journal/.config: No such file or directory
std-builds.def:80: /home/piyushrpt/miniconda3/envs/recipe/conda-bld/pyre_1550737717308/work/pyre/builds/Linux-4.x_x86_64-debug/tmp/pyre/lib/pyre/.config: No such file or directory
In file included from MemoryMap.cc:14:0:
forward.h:24:10: fatal error: pyre/journal.h: No such file or directory
 #include <pyre/journal.h>
          ^~~~~~~~~~~~~~~~
compilation terminated.

Here is the compile line for MemoryMap.cc

make[5]: Entering directory '$SRC_DIR/pyre/lib/pyre/memory'
$BUILD_PREFIX/bin/x86_64-conda_cos6-linux-gnu-c++ -MMD -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -I$PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/pyre-1.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix  -c -o $SRC_DIR/pyre/builds/Linux-4.x_x86_64-debug/tmp/pyre/lib/pyre/MemoryMap.o MemoryMap.cc                                                    
std-cpp.def:47: recipe for target '$SRC_DIR/pyre/builds/Linux-4.x_x86_64-debug/tmp/pyre/lib/pyre/MemoryMap.o' failed

I don't see anything on the command line that suggests memory is aware of journal. From the screen log, it looks like it is possible that mm entered journal after working through memory.

piyushrpt commented 5 years ago

Attached is the log file associated with the current recipe here: https://github.com/isce-framework/recipes-test/tree/condacompiler/recipes/pyre

The error is in Line 276. Going through the screen output, it looks like mm visited memory before journal. The log was generated using tee (both stderr and stdout)

logll.txt

bryanvriel commented 5 years ago

According to the log, conda is setting its own environment variable CXXFLAGS:

CXXFLAGS=-fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona 
mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections 
pipe -I$PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/pyre-1.0 -fdebug
prefix-map=$PREFIX=/usr/local/src/conda-prefix

It looks like mm is pulling in these options which do not include the right include path.

piyushrpt commented 5 years ago

Can mm be modified to respect the conda environment and append additional include folders / flags instead of attempting to overwrite it in a simple manner?

Looks like the conflict is here: https://github.com/aivazis/config/blob/fef85ff268f3423fccd81a81c31586f5d00278db/make/std-cpp.def#L37-L40

aivazis commented 5 years ago

I think so. We can try the two or three solutions that come to mind tomorrow.

-- Michael

On Feb 27, 2019, at 6:34 PM, piyushrpt notifications@github.com wrote:

Can mm be modified to respect the conda environment and append additional include folders / flags instead of attempting to overwrite it in a simple manner?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

piyushrpt commented 5 years ago
CC=clang CXX=clang++ mm

as suggested in https://github.com/pyre/pyre/issues/21 no longer works with the recent updates. mm now seems to use gcc-4.x-Darwin for clang and this is causing linking issues in the timers. What would be the correct syntax to use to build pyre with clang?

aivazis commented 5 years ago

The recommendation in pyre/pyre#21 is not the right way. Try

TARGET_CXX=clang-4 TARGET_CC=clang-4 mm

with config v3.5.1 or later