From b4d7e0cfb542ae18f62dfdb2ab74c3d8e150dd01 Mon Sep 17 00:00:00 2001
From: Michael Zikeli <michael.zikeli@fau.de>
Date: Fri, 16 Feb 2024 13:14:17 +0100
Subject: [PATCH] Fix Issue #1 by making the key "avx" in kernel_implementation
 optional for CMakeLists.txt print.

---
 generate/generate.py      | 75 ++++++++++++++++++++++-----------------
 generate/requirements.txt |  2 +-
 2 files changed, 44 insertions(+), 33 deletions(-)

diff --git a/generate/generate.py b/generate/generate.py
index ffc23f42..f7a91005 100644
--- a/generate/generate.py
+++ b/generate/generate.py
@@ -98,45 +98,56 @@ def generate_cmake(
         print(f")", file=f)
         print(f"", file=f)
 
-        print(f"if(HYTEG_BUILD_WITH_AVX AND WALBERLA_DOUBLE_ACCURACY)", file=f)
-        print(f"   target_sources({lib_name} PRIVATE", file=f)
-        print(f"", file=f)
+        def print_noarch_targets(avx_exists: bool):
+            intend_noarch_source_file = "   " if avx_exists else ""
+            print(f"{intend_noarch_source_file}target_sources({lib_name} PRIVATE", file=f)
+            print(f"", file=f)
 
-        for source_file in kernel_implementations["avx"]:
-            print(f"      avx/{source_file}", file=f)
-        for source_file in kernel_implementations["noarch"]:
-            if not source_file in kernel_implementations["avx"]:
-                print(f"      noarch/{source_file}", file=f)
+            for source_file_inner in kernel_implementations["noarch"]:
+                print(f"{intend_noarch_source_file}   noarch/{source_file_inner}", file=f)
 
-        print(f"   )", file=f)
-        print(f"", file=f)
+            print(f"{intend_noarch_source_file})", file=f)
 
-        print(f"   set_source_files_properties(", file=f)
-        print(f"", file=f)
+        if "avx" in kernel_implementations:
 
-        for source_file in kernel_implementations["avx"]:
-            print(f"      avx/{source_file}", file=f)
-        print(f"", file=f)
-        print("      PROPERTIES COMPILE_OPTIONS ${HYTEG_COMPILER_NATIVE_FLAGS}", file=f)
-
-        print(f"   )", file=f)
-        print(f"else()", file=f)
-        print(f"   if(HYTEG_BUILD_WITH_AVX AND NOT WALBERLA_DOUBLE_ACCURACY)", file=f)
-        print(
-            f'      message(WARNING "AVX vectorization only available in double precision. Using scalar kernels.")',
-            file=f,
-        )
-        print(f"   endif()", file=f)
-        print(f"", file=f)
+            print(f"if(HYTEG_BUILD_WITH_AVX AND WALBERLA_DOUBLE_ACCURACY)", file=f)
+            print(f"   target_sources({lib_name} PRIVATE", file=f)
+            print(f"", file=f)
 
-        print(f"   target_sources({lib_name} PRIVATE", file=f)
-        print(f"", file=f)
+            for source_file in kernel_implementations["avx"]:
+                print(f"      avx/{source_file}", file=f)
 
-        for source_file in kernel_implementations["noarch"]:
-            print(f"      noarch/{source_file}", file=f)
+            for source_file in kernel_implementations["noarch"]:
+                if not source_file in kernel_implementations["avx"]:
+                    print(f"      noarch/{source_file}", file=f)
+
+            print(f"   )", file=f)
+            print(f"", file=f)
+
+            print(f"   set_source_files_properties(", file=f)
+            print(f"", file=f)
+
+            for source_file in kernel_implementations["avx"]:
+                print(f"      avx/{source_file}", file=f)
+            print(f"", file=f)
+            print("      PROPERTIES COMPILE_OPTIONS ${HYTEG_COMPILER_NATIVE_FLAGS}", file=f)
+
+            print(f"   )", file=f)
+            print(f"else()", file=f)
+            print(f"   if(HYTEG_BUILD_WITH_AVX AND NOT WALBERLA_DOUBLE_ACCURACY)", file=f)
+            print(
+                f'      message(WARNING "AVX vectorization only available in double precision. Using scalar kernels.")',
+                file=f,
+            )
+            print(f"   endif()", file=f)
+            print(f"", file=f)
+
+            print_noarch_targets(avx_exists=True)
+
+            print(f"endif()", file=f)
+        else:
+            print_noarch_targets(avx_exists=False)
 
-        print(f"   )", file=f)
-        print(f"endif()", file=f)
         print(f"", file=f)
 
         print(f"if (HYTEG_BUILD_WITH_PETSC)", file=f)
diff --git a/generate/requirements.txt b/generate/requirements.txt
index 47881e16..91a26e43 100644
--- a/generate/requirements.txt
+++ b/generate/requirements.txt
@@ -1,5 +1,5 @@
 --extra-index-url https://test.pypi.org/simple/
 
-hfg @ git+ssh://git@i10git.cs.fau.de/terraneo/hyteg-form-generator.git@2a830d525314b1ec1d718720534267c485b5a9a7
+hfg @ git+ssh://git@i10git.cs.fau.de/terraneo/hyteg-form-generator.git@aeeb7d4c4f99e59d208a8d09a51522a7093fd7ff
 tomli >= 1.1.0 ; python_version < "3.11"
 clang-format
-- 
GitLab