opensbi.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Ben Dooks <ben.dooks@codethink.co.uk>
To: opensbi@lists.infradead.org
Subject: [PATCH 1/3] Makefile: clean auto-generated *.c files properly
Date: Fri, 26 Apr 2024 17:25:12 +0100	[thread overview]
Message-ID: <8f9ec7cd-0346-4f9e-919c-9b6e8f8a77c8@codethink.co.uk> (raw)
In-Reply-To: <88d05469-2fd1-40df-b8bf-0fb6652ea76d@gmail.com>

On 23/04/2024 16:41, Ivan Orlov wrote:
> On 4/23/24 16:26, Ben Dooks wrote:
>> On 23/04/2024 16:20, Ben Dooks wrote:
>>> On 23/04/2024 15:58, Ivan Orlov wrote:
>>>> On 4/22/24 16:19, Andrew Jones wrote:
>>>>> On Mon, Apr 01, 2024 at 10:34:36PM +0100, Ivan Orlov wrote:
>>>>>> Currently, `make clean` doesn't remove auto-generated .c files in the
>>>>>> `build/` directory. It means that we don't have a reliable way of
>>>>>> regenerating these files except from removing the `build/` directory
>>>>>> manually.
>>>>>>
>>>>>> Update the `clean` target in order to remove these files as well.
>>>>>>
>>>>>> In the discussion of the "[PATCH v2 3/5] Makefile: clean '.c' files
>>>>>> generated by carray", Andrew Jones <ajones@ventanamicro.com> 
>>>>>> suggested
>>>>>> placing the auto-generated .c files into the `build/generated/` 
>>>>>> folder.
>>>>>> However, I believe it may not be necessary as in fact all of the 
>>>>>> files
>>>>>> in `build/` are auto-generated.
>>>>>
>>>>> Since the Makefile enforces that the build dir is not the same as the
>>>>> source dir and the only C files we currently generate are carray 
>>>>> files,
>>>>> then OK. I still think it would be nice to be more specific about what
>>>>> we clean, though.
>>>>>
>>>>
>>>> Hi Andrew,
>>>>
>>>> Thank you very much for the review!
>>>>
>>>> I see a few approaches how we could make the CArray-generated files 
>>>> cleaning more clear. I believe we could either put all of the 
>>>> CArray-generated files into a subdirectory of `build/` (as you 
>>>> suggested) or add a suffix to a filename of an auto-generated .c 
>>>> file (for instance, sbi_unit_tests.carray -> 
>>>> sbi_unit_tests_carray.c, and the pattern for `make clean` would be 
>>>> like "rm -rf build/*_carray.c").
>>>>
>>>> The former would probably need significant update of the Makefile. 
>>>> The latter, on the other hand, seems more flaky... What do you think 
>>>> of that?
>>>
>>> I did a quick shell command to find all the object basenames, via:
>>>
>>> $ find . -type f -name "*.carray" | xargs grep NAME | cut -d ' ' -f 2
>>> sbi_unit_tests
>>> sbi_ecall_exts
>>> fdt_irqchip_drivers
>>> fdt_timer_drivers
>>> fdt_serial_drivers
>>> fdt_i2c_adapter_drivers
>>> fdt_ipi_drivers
>>> fdt_gpio_drivers
>>> fdt_regmap_drivers
>>> fdt_reset_drivers
>>> platform_override_modules
>>>
>>> so doing:
>>>
>>> $ find . -type f -name "*.carray" | xargs grep NAME | cut -d ' ' -f 2 
>>> | sed? 's/$/.o/g'? | xargs -n1 find build -name
>>> build/lib/sbi/sbi_ecall_exts.o
>>> build/platform/generic/lib/utils/irqchip/fdt_irqchip_drivers.o
>>> build/platform/generic/lib/utils/timer/fdt_timer_drivers.o
>>> build/platform/generic/lib/utils/serial/fdt_serial_drivers.o
>>> build/platform/generic/lib/utils/i2c/fdt_i2c_adapter_drivers.o
>>> build/platform/generic/lib/utils/ipi/fdt_ipi_drivers.o
>>> build/platform/generic/lib/utils/gpio/fdt_gpio_drivers.o
>>> build/platform/generic/lib/utils/regmap/fdt_regmap_drivers.o
>>> build/platform/generic/lib/utils/reset/fdt_reset_drivers.o
>>> build/platform/generic/platform_override_modules.o
>>>
>>> finds all the carray build files
>>
>> of course, i meant? sed -e 's/$/.c/g' to find the .c files not their
>> outputs which would have been removed anyway
>>
> 
> Sounds like an another solution, thanks! I'm not sure if it should be 
> done now, though... There is a chance that it could make the Makefile 
> less readable. But it is definitely more clean than removing the 
> entirety of build/.c files

I made this patch to try and go through all the .carray generated
files in build and remove them. I'll submit it if people agree that
it is a reasonable idea:

 From 7e1f02ebdd168a329a9a393f3a25c74d6b5f837d Mon Sep 17 00:00:00 2001
From: Ben Dooks <ben.dooks@codethink.co.uk>
Date: Tue, 23 Apr 2024 17:57:42 +0100
Subject: [PATCH] make: remove carray generated files via new script

Create a script to find the .carray generated files and allow them to
be removed during make clean.

Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
  Makefile             |  3 +++
  scripts/rm_carray.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++
  2 files changed, 51 insertions(+)
  create mode 100755 scripts/rm_carray.sh

diff --git a/Makefile b/Makefile
index 7df39b4..7f70934 100644
--- a/Makefile
+++ b/Makefile
@@ -687,6 +687,9 @@ clean:
  	$(CMD_PREFIX)mkdir -p $(build_dir)
  	$(if $(V), @echo " RM        $(build_dir)/*.o")
  	$(CMD_PREFIX)find $(build_dir) -type f -name "*.o" -exec rm -rf {} +
+	$(if $(V), @echo " RM        $(build_dir)/*.o (carray)")
+	$(CMD_PREFIX)find  $(src_dir) -type f -name "*.carray" -exec 
$(src_dir)/scripts/rm_carray.sh  $(src_dir) $(platform_build_dir) {} +
+	$(CMD_PREFIX)find  $(platform_src_dir) -type f -name "*.carray" -exec 
$(src_dir)/scripts/rm_carray.sh  $(platform_src_dir) 
$(platform_build_dir) {} +
  	$(if $(V), @echo " RM        $(build_dir)/*.a")
  	$(CMD_PREFIX)find $(build_dir) -type f -name "*.a" -exec rm -rf {} +
  	$(if $(V), @echo " RM        $(build_dir)/*.elf")
diff --git a/scripts/rm_carray.sh b/scripts/rm_carray.sh
new file mode 100755
index 0000000..4648115
--- /dev/null
+++ b/scripts/rm_carray.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+function usage()
+{
+	echo "Usage:"
+	echo "$0 [src-dir] [build-dir] <carray files>"
+	exit 1;
+}
+
+for i in "$*"; do echo $i; echo "..."; done
+
+SRC_DIR=$1
+shift
+BUILD_DIR=$1
+shift
+
+if [ -z "${SRC_DIR}" ]; then
+	echo "No source directory specified"
+	usage
+fi
+
+if [ -z "${BUILD_DIR}" ]; then
+	echo "No build directory specified"
+	usage
+fi
+
+if [ "$#" -lt 1 ]; then
+	echo "No carray files to process"
+	usage
+fi
+
+while [ "$#" -ge 1 ]; do
+    FILE=$1
+    shift
+
+    DIR_NAME=$(dirname $FILE | sed -e "s@{BUILD_DIR}/@@g")
+    FILE_NAME=`grep NAME $FILE | cut -d " " -f 2 | sed  -e "s/$$/.c/g"`
+    NAME=${BUILD_DIR}/${DIR_NAME}/${FILE_NAME}
+
+    echo ${NAME}
+    if [ -e ${NAME} ]; then
+	rm ${NAME}
+	if [ $? -ne 0 ]; then
+	    echo "Failed to remove ${NAME}"
+	    exit 1
+	fi
+    fi
+done
-- 
2.37.2.352.g3c44437643



-- 
Ben Dooks				http://www.codethink.co.uk/
Senior Engineer				Codethink - Providing Genius

https://www.codethink.co.uk/privacy.html



  reply	other threads:[~2024-04-26 16:25 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-01 21:34 [PATCH 0/3] CArray improvements Ivan Orlov
2024-04-01 21:34 ` [PATCH 1/3] Makefile: clean auto-generated *.c files properly Ivan Orlov
2024-04-22 15:19   ` Andrew Jones
2024-04-23 14:58     ` Ivan Orlov
2024-04-23 15:15       ` Ben Dooks
2024-04-23 15:18       ` Andrew Jones
2024-04-23 15:20       ` Ben Dooks
2024-04-23 15:24         ` Ben Dooks
2024-04-23 15:26         ` Ben Dooks
2024-04-23 15:41           ` Ivan Orlov
2024-04-26 16:25             ` Ben Dooks [this message]
2024-04-29  8:52               ` Andrew Jones
2024-04-29 12:16                 ` Ben Dooks
2024-04-29 13:11                 ` Ben Dooks
2024-04-01 21:34 ` [PATCH 2/3] scripts/carray.sh: Add comment to generated files Ivan Orlov
2024-04-22 15:21   ` Andrew Jones
2024-04-23 15:25   ` Ben Dooks
2024-04-01 21:34 ` [PATCH 3/3] docs: writing tests: update cleaning instructions Ivan Orlov
2024-04-22 15:22   ` Andrew Jones
2024-05-07  6:06 ` [PATCH 0/3] CArray improvements Anup Patel
2024-05-10 15:56   ` Ivan Orlov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8f9ec7cd-0346-4f9e-919c-9b6e8f8a77c8@codethink.co.uk \
    --to=ben.dooks@codethink.co.uk \
    --cc=opensbi@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).