Re: [CMake] CUDA language support with host compiler flags
Currently to get proper propagation of architecture flags such as -arch=sm_50, -compute=compute_X you need to place these into the CMAKE_CUDA_FLAGS. This is a known issue, as flags specified by `target_compile_options` are not propagate to the device linking step, which needs the correct architecture flags. On Thu, Feb 28, 2019 at 8:13 AM Máté Ferenc Nagy-Egri wrote: > > Hi Robert! > > > > Thank you for the help. I don’t know if I could’ve find that solution myself. > I guess selecting CUDA as the COMPILE_LANGUAGE I can controll .cu compiler > options to select architecture and what not. > > > > Anyhow, if someone needed the minimal template, here it is: > > > > https://gist.github.com/MathiasMagnus/0edacac888a758fe233cb69f3e291d62 > > > > Cheers, > > Máté > > > > Feladó: Robert Maynard > Elküldve: 2019. február 27., szerda 15:00 > Címzett: Nagy-Egri MĂĄtĂŠ Ferenc > Másolatot kap: CMake MailingList > Tárgy: Re: [CMake] CUDA language support with host compiler flags > > > > You need to guard the flags with `$` the > > evaluation on a given compiler id is done for all sources of a target, > > and not on each target source file. > > > > So you will need something like: > > > > set(cxx_flags "$<$,$>:-Wall > > -Wextra -pedantic> > >$<$:/W4") > > target_compile_options(${PROJECT_NAME} PRIVATE > > $<$:${cxx_flags}>) > > > > On Fri, Feb 22, 2019 at 4:11 AM Máté Ferenc Nagy-Egri via CMake > > wrote: > > > > > > Hi All! > > > > > > I am trying to compile CUDA code with controlling both host and device > > compiler flags. > > > > > > Currently my CMakeLists.txt looks like: > > > > > > ``` > > > cmake_minimum_required(VERSION 3.8) # CUDA language support > > > > > > project(CUDA_test LANGUAGES CXX CUDA) > > > > > > if (MSVC) > > > string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) > > > endif (MSVC) > > > > > > set(Hdrs) > > > > > > set(Srcs Main.cu) > > > > > > add_executable(${PROJECT_NAME} ${Hdrs} ${Srcs}) > > > > > > target_include_directories(${PROJECT_NAME} PRIVATE > > ${CMAKE_CURRENT_SOURCE_DIR}) > > > > > > target_compile_options(${PROJECT_NAME} PRIVATE > > $<$,$>:-Wall -Wextra > > -pedantic> > > > > > $<$:/W4>) > > > > > > set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION > > ON > > > CUDA_STANDARD 14 > > > CUDA_STANDARD_REQUIRED ON > > > CUDA_EXTENSIONS OFF > > > CXX_STANDARD 14 > > > CXX_STANDARD_REQUIRED ON > > > CXX_EXTENSIONS OFF) > > > > > > source_group ("Headers" FILES ${Hdrs}) > > > source_group ("Sources" FILES ${Srcs}) > > > ``` > > > > > > However, when I compile the code I get the following error: > > > > > > [1/3] Building CUDA object CMakeFiles/CUDA_test.dir/Main.cu.o > > > FAILED: CMakeFiles/CUDA_test.dir/Main.cu.o > > > /usr/bin/nvcc > > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g > > -Wall -Wextra -pedantic -std=c++14 -x cu -dc > > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -o > > CMakeFiles/CUDA_test.dir/Main.cu.o && /usr/bin/nvcc > > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g > > -Wall -Wextra -pedantic -std=c++14 -x cu -M > > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -MT > > CMakeFiles/CUDA_test.dir/Main.cu.o -o CMakeFiles/CUDA_test.dir/Main.cu.o.d > > > nvcc fatal : Unknown option 'Wall' > > > ninja: build stopped: subcommand failed. > > > > > > CMake seems to pass -Wall -Wextra -pedantic to the device compiler as well, > > even though it is neither GNU nor Clang, but CUDA. How can I specify > > warning and similar flags separatly for the host and device compilers? > > > -- > > > > > > Powered by www.kitware.com > > > > > > Please keep messages on-topic and check the CMake FAQ at:
Re: [CMake] CUDA language support with host compiler flags
Hi Robert! Thank you for the help. I don’t know if I could’ve find that solution myself. I guess selecting CUDA as the COMPILE_LANGUAGE I can controll .cu compiler options to select architecture and what not. Anyhow, if someone needed the minimal template, here it is: https://gist.github.com/MathiasMagnus/0edacac888a758fe233cb69f3e291d62 Cheers, Máté Feladó: Robert Maynard Elküldve: 2019. február 27., szerda 15:00 Címzett: Nagy-Egri MĂĄtĂŠ Ferenc Másolatot kap: CMake MailingList Tárgy: Re: [CMake] CUDA language support with host compiler flags You need to guard the flags with `$` the evaluation on a given compiler id is done for all sources of a target, and not on each target source file. So you will need something like: set(cxx_flags "$<$,$>:-Wall -Wextra -pedantic> $<$:/W4") target_compile_options(${PROJECT_NAME} PRIVATE $<$:${cxx_flags}>) On Fri, Feb 22, 2019 at 4:11 AM Máté Ferenc Nagy-Egri via CMake wrote: > > Hi All! > > I am trying to compile CUDA code with controlling both host and device > compiler flags. > > Currently my CMakeLists.txt looks like: > > ``` > cmake_minimum_required(VERSION 3.8) # CUDA language support > > project(CUDA_test LANGUAGES CXX CUDA) > > if (MSVC) > string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) > endif (MSVC) > > set(Hdrs) > > set(Srcs Main.cu) > > add_executable(${PROJECT_NAME} ${Hdrs} ${Srcs}) > > target_include_directories(${PROJECT_NAME} PRIVATE > ${CMAKE_CURRENT_SOURCE_DIR}) > > target_compile_options(${PROJECT_NAME} PRIVATE > $<$,$>:-Wall -Wextra > -pedantic> >$<$:/W4>) > > set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON > CUDA_STANDARD 14 > CUDA_STANDARD_REQUIRED ON > CUDA_EXTENSIONS OFF > CXX_STANDARD 14 > CXX_STANDARD_REQUIRED ON > CXX_EXTENSIONS OFF) > > source_group ("Headers" FILES ${Hdrs}) > source_group ("Sources" FILES ${Srcs}) > ``` > > However, when I compile the code I get the following error: > > [1/3] Building CUDA object CMakeFiles/CUDA_test.dir/Main.cu.o > FAILED: CMakeFiles/CUDA_test.dir/Main.cu.o > /usr/bin/nvcc > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall > -Wextra -pedantic -std=c++14 -x cu -dc > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -o > CMakeFiles/CUDA_test.dir/Main.cu.o && /usr/bin/nvcc > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall > -Wextra -pedantic -std=c++14 -x cu -M > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -MT > CMakeFiles/CUDA_test.dir/Main.cu.o -o CMakeFiles/CUDA_test.dir/Main.cu.o.d > nvcc fatal : Unknown option 'Wall' > ninja: build stopped: subcommand failed. > > CMake seems to pass -Wall -Wextra -pedantic to the device compiler as well, > even though it is neither GNU nor Clang, but CUDA. How can I specify warning > and similar flags separatly for the host and device compilers? > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > https://cmake.org/mailman/listinfo/cmake -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake
Re: [CMake] CUDA language support with host compiler flags
You need to guard the flags with `$` the evaluation on a given compiler id is done for all sources of a target, and not on each target source file. So you will need something like: set(cxx_flags "$<$,$>:-Wall -Wextra -pedantic> $<$:/W4") target_compile_options(${PROJECT_NAME} PRIVATE $<$:${cxx_flags}>) On Fri, Feb 22, 2019 at 4:11 AM Máté Ferenc Nagy-Egri via CMake wrote: > > Hi All! > > I am trying to compile CUDA code with controlling both host and device > compiler flags. > > Currently my CMakeLists.txt looks like: > > ``` > cmake_minimum_required(VERSION 3.8) # CUDA language support > > project(CUDA_test LANGUAGES CXX CUDA) > > if (MSVC) > string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) > endif (MSVC) > > set(Hdrs) > > set(Srcs Main.cu) > > add_executable(${PROJECT_NAME} ${Hdrs} ${Srcs}) > > target_include_directories(${PROJECT_NAME} PRIVATE > ${CMAKE_CURRENT_SOURCE_DIR}) > > target_compile_options(${PROJECT_NAME} PRIVATE > $<$,$>:-Wall -Wextra > -pedantic> >$<$:/W4>) > > set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON > CUDA_STANDARD 14 > CUDA_STANDARD_REQUIRED ON > CUDA_EXTENSIONS OFF > CXX_STANDARD 14 > CXX_STANDARD_REQUIRED ON > CXX_EXTENSIONS OFF) > > source_group ("Headers" FILES ${Hdrs}) > source_group ("Sources" FILES ${Srcs}) > ``` > > However, when I compile the code I get the following error: > > [1/3] Building CUDA object CMakeFiles/CUDA_test.dir/Main.cu.o > FAILED: CMakeFiles/CUDA_test.dir/Main.cu.o > /usr/bin/nvcc > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall > -Wextra -pedantic -std=c++14 -x cu -dc > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -o > CMakeFiles/CUDA_test.dir/Main.cu.o && /usr/bin/nvcc > -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall > -Wextra -pedantic -std=c++14 -x cu -M > /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -MT > CMakeFiles/CUDA_test.dir/Main.cu.o -o CMakeFiles/CUDA_test.dir/Main.cu.o.d > nvcc fatal : Unknown option 'Wall' > ninja: build stopped: subcommand failed. > > CMake seems to pass -Wall -Wextra -pedantic to the device compiler as well, > even though it is neither GNU nor Clang, but CUDA. How can I specify warning > and similar flags separatly for the host and device compilers? > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > https://cmake.org/mailman/listinfo/cmake -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake
[CMake] CUDA language support with host compiler flags
Hi All! I am trying to compile CUDA code with controlling both host and device compiler flags. Currently my CMakeLists.txt looks like: ``` cmake_minimum_required(VERSION 3.8) # CUDA language support project(CUDA_test LANGUAGES CXX CUDA) if (MSVC) string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) endif (MSVC) set(Hdrs) set(Srcs Main.cu) add_executable(${PROJECT_NAME} ${Hdrs} ${Srcs}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_options(${PROJECT_NAME} PRIVATE $<$,$>:-Wall -Wextra -pedantic> $<$:/W4>) set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_STANDARD 14 CUDA_STANDARD_REQUIRED ON CUDA_EXTENSIONS OFF CXX_STANDARD 14 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF) source_group ("Headers" FILES ${Hdrs}) source_group ("Sources" FILES ${Srcs}) ``` However, when I compile the code I get the following error: [1/3] Building CUDA object CMakeFiles/CUDA_test.dir/Main.cu.o FAILED: CMakeFiles/CUDA_test.dir/Main.cu.o /usr/bin/nvcc -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall -Wextra -pedantic -std=c++14 -x cu -dc /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -o CMakeFiles/CUDA_test.dir/Main.cu.o && /usr/bin/nvcc -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall -Wextra -pedantic -std=c++14 -x cu -M /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -MT CMakeFiles/CUDA_test.dir/Main.cu.o -o CMakeFiles/CUDA_test.dir/Main.cu.o.d nvcc fatal : Unknown option 'Wall' ninja: build stopped: subcommand failed. CMake seems to pass -Wall -Wextra -pedantic to the device compiler as well, even though it is neither GNU nor Clang, but CUDA. How can I specify warning and similar flags separatly for the host and device compilers? -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake
[CMake] CUDA language support with host compiler flags
Hi All! I am trying to compile CUDA code with controlling both host and device compiler flags. Currently my CMakeLists.txt looks like: ``` cmake_minimum_required(VERSION 3.8) # CUDA language support project(CUDA_test LANGUAGES CXX CUDA) if (MSVC) string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) endif (MSVC) set(Hdrs) set(Srcs Main.cu) add_executable(${PROJECT_NAME} ${Hdrs} ${Srcs}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_options(${PROJECT_NAME} PRIVATE $<$,$>:-Wall -Wextra -pedantic> $<$:/W4>) set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_STANDARD 14 CUDA_STANDARD_REQUIRED ON CUDA_EXTENSIONS OFF CXX_STANDARD 14 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF) source_group ("Headers" FILES ${Hdrs}) source_group ("Sources" FILES ${Srcs})``` However, when I compile the code I get the following error: [1/3] Building CUDA object CMakeFiles/CUDA_test.dir/Main.cu.o FAILED: CMakeFiles/CUDA_test.dir/Main.cu.o /usr/bin/nvcc -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall -Wextra -pedantic -std=c++14 -x cu -dc /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -o CMakeFiles/CUDA_test.dir/Main.cu.o && /usr/bin/nvcc -I/var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL -g -Wall -Wextra -pedantic -std=c++14 -x cu -M /var/tmp/src/e75971a9-7e91-6137-abfa-df34048cc171/GCC-Debug-WSL/Main.cu -MT CMakeFiles/CUDA_test.dir/Main.cu.o -o CMakeFiles/CUDA_test.dir/Main.cu.o.d nvcc fatal : Unknown option 'Wall' ninja: build stopped: subcommand failed. CMake seems to pass -Wall -Wextra -pedantic to the device compiler as well, even though it is neither GNU nor Clang, but CUDA. How can I specify warning and similar flags separatly for the host and device compilers? -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake