Merge pull request #3367 from hug-dev/psa-constants-in-build-dir

Generate PSA constant names in CMake build dir
diff --git a/programs/psa/CMakeLists.txt b/programs/psa/CMakeLists.txt
index c80043b..201f987 100644
--- a/programs/psa/CMakeLists.txt
+++ b/programs/psa/CMakeLists.txt
@@ -5,11 +5,12 @@
 target_link_libraries(key_ladder_demo mbedtls)
 
 add_executable(psa_constant_names psa_constant_names.c)
+target_include_directories(psa_constant_names PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 target_link_libraries(psa_constant_names mbedtls)
 
 add_custom_target(
     psa_constant_names_generated
-    COMMAND ${PYTHON_EXECUTABLE} scripts/generate_psa_constants.py
+    COMMAND ${PYTHON_EXECUTABLE} scripts/generate_psa_constants.py ${CMAKE_CURRENT_BINARY_DIR}
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../
 )
 add_dependencies(psa_constant_names psa_constant_names_generated)
diff --git a/scripts/generate_psa_constants.py b/scripts/generate_psa_constants.py
index c6bd9b6..175cd9f 100755
--- a/scripts/generate_psa_constants.py
+++ b/scripts/generate_psa_constants.py
@@ -1,13 +1,19 @@
 #!/usr/bin/env python3
 
-"""Generate programs/psa/psa_constant_names_generated.c
+"""Generate psa_constant_names_generated.c
 which is included by programs/psa/psa_constant_names.c.
 The code generated by this module is only meant to be used in the context
 of that program.
+
+An argument passed to this script will modify the output directory where the
+file is written:
+* by default (no arguments passed): writes to programs/psa/
+* OUTPUT_FILE_DIR passed: writes to OUTPUT_FILE_DIR/
 """
 
 import os
 import re
+import sys
 
 OUTPUT_TEMPLATE = '''\
 /* Automatically generated by generate_psa_constant.py. DO NOT EDIT. */
@@ -395,6 +401,8 @@
 if __name__ == '__main__':
     if not os.path.isdir('programs') and os.path.isdir('../programs'):
         os.chdir('..')
+    # Allow to change the directory where psa_constant_names_generated.c is written to.
+    OUTPUT_FILE_DIR = sys.argv[1] if len(sys.argv) == 2 else "programs/psa"
     generate_psa_constants(['include/psa/crypto_values.h',
                             'include/psa/crypto_extra.h'],
-                           'programs/psa/psa_constant_names_generated.c')
+                           OUTPUT_FILE_DIR + '/psa_constant_names_generated.c')