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

Wrong compiler flag check result on Windows LLVM toolchain #831

Open
stephanosio opened this issue Oct 28, 2024 · 0 comments
Open

Wrong compiler flag check result on Windows LLVM toolchain #831

stephanosio opened this issue Oct 28, 2024 · 0 comments
Assignees
Labels
area: LLVM Issues related to LLVM bug platform: Windows Issues related to Zephyr SDK on Windows hosts

Comments

@stephanosio
Copy link
Member

stephanosio commented Oct 28, 2024

Summary

When building Zephyr with Zephyr SDK LLVM toolchain on Windows, CMake compiler flag check function (check_compiler_flag) "randomly" returns wrong results.

Running CMake twice with the toolchain compatibility database cache cleared before each run, the compiler flag check results differ:

--- run1.log.nl	2024-10-28 01:36:58.333289400 +0000
+++ run2.log.nl	2024-10-28 01:37:04.554760200 +0000
@@ -26,20 +26,20 @@
     26	-- The ASM compiler identification is Clang with GNU-like command-line
     27	-- Found assembler: S:/llvm/bin/clang.exe
     28	-- @@ C, , 1
-    29	-- @@ C, -Wall, 1
+    29	-- @@ C, -Wall, 0
     30	-- @@ C, -Wformat;-Wformat-security, 1
-    31	-- @@ C, -Wformat;-Wformat-zero-length, 1
-    32	-- @@ C, -Wdouble-promotion, 0
+    31	-- @@ C, -Wformat;-Wformat-zero-length, 0
+    32	-- @@ C, -Wdouble-promotion, 1
     33	-- @@ C, -Wpointer-sign, 1
     34	-- @@ C, -Wpointer-arith, 0
-    35	-- @@ C, -Wexpansion-to-defined, 0
+    35	-- @@ C, -Wexpansion-to-defined, 1
     36	-- @@ C, -Wlogical-op, 0
-    37	-- @@ C, -Wmissing-field-initializers, 0
+    37	-- @@ C, -Wmissing-field-initializers, 1
     38	-- @@ C, -Wpacked-bitfield-compat, 0
-    39	-- @@ C, -Wvla, 1
+    39	-- @@ C, -Wvla, 0
     40	-- @@ C, -Wunused-but-set-variable, 0
     41	-- @@ C, -Werror=implicit-int, 1
-    42	-- @@ C, -mstack-protector-guard=global, 0
+    42	-- @@ C, -mstack-protector-guard=global, 1
     43	-- @@ C, -fno-freestanding, 0
     44	-- @@ C, -ffreestanding, 1
     45	-- @@ C, -gdwarf-4, 1
@@ -49,45 +49,45 @@
     49	-- @@ C, -Wtypedef-redefinition, 0
     50	-- @@ C, -Wdeprecated-non-prototype, 1
     51	-- @@ C, -Wold-style-definition, 1
-    52	-- @@ C, -Wmissing-prototypes, 0
-    53	-- @@ C, -Wmissing-include-dirs, 1
+    52	-- @@ C, -Wmissing-prototypes, 1
+    53	-- @@ C, -Wmissing-include-dirs, 0
     54	-- @@ C, -Wunused-but-set-variable, 0
-    55	-- @@ C, -Wmissing-field-initializers, 0
+    55	-- @@ C, -Wmissing-field-initializers, 1
     56	-- @@ C, -Wsometimes-uninitialized, 0
-    57	-- @@ C, -Wshift-overflow, 1
-    58	-- @@ C, -Wmissing-braces, 0
-    59	-- @@ C, -Wself-assign, 1
+    57	-- @@ C, -Wshift-overflow, 0
+    58	-- @@ C, -Wmissing-braces, 1
+    59	-- @@ C, -Wself-assign, 0
     60	-- @@ C, -Waddress-of-packed-member, 1
     61	-- @@ C, -Wunused-function, 1
-    62	-- @@ C, -Winitializer-overrides, 0
-    63	-- @@ C, -Wsection, 1
-    64	-- @@ C, -Wunknown-warning-option, 0
+    62	-- @@ C, -Winitializer-overrides, 1
+    63	-- @@ C, -Wsection, 0
+    64	-- @@ C, -Wunknown-warning-option, 1
     65	-- @@ C, -Wunused-variable, 1
     66	-- @@ C, -Wformat-invalid-specifier, 0
-    67	-- @@ C, -Wgnu, 0
+    67	-- @@ C, -Wgnu, 1
     68	-- @@ C, -Wtautological-compare, 0
     69	-- @@ C, , 0
-    70	-- @@ C, , 1
+    70	-- @@ C, , 0
     71	-- @@ C, , 1
     72	-- @@ C, , 1
     73	-- @@ C, , 0
-    74	-- @@ C, , 0
+    74	-- @@ C, , 1
     75	-- @@ C, , 1
     76	-- @@ C, , 0
     77	-- @@ C, , 0
     78	-- @@ C, , 1
     79	-- @@ C, , 0
     80	-- @@ C, , 1
-    81	-- @@ C, , 0
-    82	-- @@ C, , 1
+    81	-- @@ C, , 1
+    82	-- @@ C, , 0
     83	-- @@ C, -fno-asynchronous-unwind-tables, 1
-    84	-- @@ C, -ftls-model=local-exec, 1
-    85	-- @@ C, -Wvla, 1
-    86	-- @@ C, -fmacro-prefix-map=C:/a/sdk-ng/sdk-ng/zephyrproject/zephyr/samples/hello_world=CMAKE_SOURCE_DIR, 0
-    87	-- @@ C, -fmacro-prefix-map=C:/a/sdk-ng/sdk-ng/zephyrproject/zephyr=ZEPHYR_BASE, 0
+    84	-- @@ C, -ftls-model=local-exec, 0
+    85	-- @@ C, -Wvla, 0
+    86	-- @@ C, -fmacro-prefix-map=C:/a/sdk-ng/sdk-ng/zephyrproject/zephyr/samples/hello_world=CMAKE_SOURCE_DIR, 1
+    87	-- @@ C, -fmacro-prefix-map=C:/a/sdk-ng/sdk-ng/zephyrproject/zephyr=ZEPHYR_BASE, 1
     88	-- @@ C, -fmacro-prefix-map=C:/a/sdk-ng/sdk-ng/zephyrproject=WEST_TOPDIR, 1
-    89	-- @@ C, -ffunction-sections, 0
+    89	-- @@ C, -ffunction-sections, 1
     90	-- @@ C, -fdata-sections, 1
-    91	-- Configuring done (26.7s)
+    91	-- Configuring done (26.4s)
     92	-- Generating done (0.5s)
     93	-- Build files have been written to: C:/a/sdk-ng/sdk-ng/zephyrproject/zephyr/samples/hello_world/build

For full log, see https://gist.github.com/stephanosio/515697800f63484dc94568edff48c407.

To reproduce

On Windows:

  1. Download Zephyr SDK LLVM toolchain and set ZEPHYR_TOOLCHAIN_VARIANT=zephyr-llvm.
  2. Check out Zephyr collab-sdk-0.18-dev branch.
  3. Apply the following patch on Zephyr repository:
diff --git a/cmake/modules/extensions.cmake b/cmake/modules/extensions.cmake
index d5cd84256d2..a52e793d6e8 100644
--- a/cmake/modules/extensions.cmake
+++ b/cmake/modules/extensions.cmake
@@ -1174,6 +1174,7 @@ function(zephyr_check_compiler_flag lang option check)
   endif()

   check_compiler_flag(${lang} "${possibly_translated_option}" inner_check)
+  message(STATUS "@@@ check_compiler_flag: ${lang} ${possibly_translated_option} ${inner_check}")

   set(${check} ${inner_check} PARENT_SCOPE)
  1. Prepare build directory for samples/hello_world:
cd samples/hello_world
mkdir build
cd build
  1. From build directory, run the following commands twice, observing the CMake run results:
rm -rf ${ZEPHYR_BASE}/.cache
cmake -GNinja -DBOARD=mps2/an385 ..

Notes

  • Even in the same run, the result for zephyr_check_compiler_flag(C "" result) differ -- this seems to be completely random:
     75	-- @@ C, , 1
     76	-- @@ C, , 0
     77	-- @@ C, , 0
     78	-- @@ C, , 1
     79	-- @@ C, , 0
     80	-- @@ C, , 1
  • CMake version does not seem to affect this -- tested with CMake 3.22.0 and 3.30.1.
@stephanosio stephanosio added platform: Windows Issues related to Zephyr SDK on Windows hosts area: LLVM Issues related to LLVM labels Oct 28, 2024
@stephanosio stephanosio self-assigned this Oct 28, 2024
stephanosio added a commit that referenced this issue Oct 28, 2024
Do not run distribution bundle tests for Zephyr SDK LLVM toolchain on
Windows because there are known issues causing strange CMake behaviours
and subsequent build failures (see GitHub issue #831).

Revert this commit when the above issue is fixed.

Signed-off-by: Stephanos Ioannidis <[email protected]>
stephanosio added a commit that referenced this issue Oct 28, 2024
Do not run distribution bundle tests for Zephyr SDK LLVM toolchain on
Windows because there are known issues causing strange CMake behaviours
and subsequent build failures (see GitHub issue #831).

Revert this commit when the above issue is fixed.

Signed-off-by: Stephanos Ioannidis <[email protected]>
stephanosio added a commit that referenced this issue Oct 29, 2024
Do not run distribution bundle tests for Zephyr SDK LLVM toolchain on
Windows because there are known issues causing strange CMake behaviours
and subsequent build failures (see GitHub issue #831).

Revert this commit when the above issue is fixed.

Signed-off-by: Stephanos Ioannidis <[email protected]>
@stephanosio stephanosio changed the title Compiler flag check Windows LLVM toolchain Wrong compiler flag check result on Windows LLVM toolchain Nov 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: LLVM Issues related to LLVM bug platform: Windows Issues related to Zephyr SDK on Windows hosts
Projects
None yet
Development

No branches or pull requests

1 participant