Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support building with Ninja using MSVC #614

Open
Destranix opened this issue Jan 11, 2023 · 2 comments
Open

Support building with Ninja using MSVC #614

Destranix opened this issue Jan 11, 2023 · 2 comments

Comments

@Destranix
Copy link

When compiling using MSVC and Ninja the compiler flags are not correctly set cause the tool fails to identify the compiler.
This can be avoided by extending the identification mechanism for compiler in SetCompilerOptions.cmake, e.g. also checking for MSVC compiler ID.

@kennyweiss
Copy link
Member

Thanks for posting this @Destranix.

We typically use the blt_append_custom_compiler_flag() macro to set flags for a specific compiler family, e.g. MSVC and MSVC_INTEL on Windows. Are these providing the wrong flags somewhere?

A specific example/reproducer would help us better understand the problem.
E.g. which flags are wrong?
Can you please provide more information about the errors that you're seeing and/or the desired behavior?

The following links might be helpful:

@Destranix
Copy link
Author

Destranix commented Jan 12, 2023

"Are these providing the wrong flags somewhere?"

Yes. Compiling e.g. SAMRAI I got a "/Wextra"-Flag and others.

"A specific example/reproducer would help us better understand the problem."
Here a Build-File I used (Please note, that some platformspecific settings, especially the path, have to be adjusted):

@echo off
setlocal
cd /d %~dp0
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set arch_command_length=32 || set arch_command_length=64
echo "%PROCESSOR_ARCHITECTURE%" | find /i "arm" > NUL && goto ARM || goto AMD

:ARM
IF %arch_command_length% == 32 (
	set arch_string=x86_arm
	set arch_command_length_string=x86
) ELSE (
	set arch_string=amd64_arm64
	set arch_command_length_string=x64
)
goto VC_VARC_INIT
:AMD
IF %arch_command_length% == 32 (
	set arch_string=x86
	set arch_command_length_string=x86
) ELSE (
	set arch_string=amd64
	set arch_command_length_string=x64
)
goto VC_VARC_INIT
:VC_VARC_INIT
call vcvarsall.bat %arch_string% -vcvars_ver=
call D:\My_Programs\Fortran\setvars.bat
set compiler_path=%VCToolsInstallDir%\bin\Host%arch_command_length_string%\%arch_command_length_string%\cl.exe
set linker_path=%VCToolsInstallDir%\bin\Host%arch_command_length_string%\%arch_command_length_string%\link.exe
set archiver_path=%VCToolsInstallDir%\bin\Host%arch_command_length_string%\%arch_command_length_string%\lib.exe
call "%DevEnvDir%\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" -G "Ninja" -DENABLE_TOOLS=ON -DENABLE_OPENMP=ON -DCMAKE_AR:FILEPATH="%archiver_path%" -DCMAKE_LINKER:FILEPATH="%linker_path%" -DCMAKE_INSTALL_PREFIX:PATH="%CD%\out\install" -DCMAKE_CXX_COMPILER:FILEPATH="%compiler_path%" -DCMAKE_C_COMPILER:FILEPATH="%compiler_path%"  -DCMAKE_BUILD_TYPE="Release" -DCMAKE_MAKE_PROGRAM="%DevEnvDir%\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "D:\Destranix\Documents\00Uni\Simulation\SAMARAI-Builds\SAMRAI"
call "%DevEnvDir%\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe" --build . --config Release

"Can you please provide more information about the errors that you're seeing and/or the desired behavior?"
Telling me, that the flag "/Wextra" is unkown and throwing an error, failing to compile.

I worked around the Issue by checking for compiler ID "MSVC" and setting the "COMPILER_FAMILY_IS_MSVC" flag accordingly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants