> 19 sep. 2018 kl. 09:51 skrev Magnus Ihse Bursie
> <magnus.ihse.bur...@oracle.com>:
>
>
>
>> On 2018-09-19 09:25, Robin Westberg wrote:
>> Hi Erik,
>>
>>> On 14 Sep 2018, at 19:21, Erik Joelsson <erik.joels...@oracle.com> wrote:
>>>
>>>>> Main.gmk:888: I think you meant to add test-compile-commands here, which
>>>>> also requires you to define that target.
>>>> Fixed, the tests are now invoked from a top-level target. I also added a
>>>> second test to ensure that the no-build-libraries property of this
>>>> actually stays intact.
>>> This is ok, but the test will fail unless run from a clean output dir. This
>>> should probably be noted in a comment at least.
>> Yes, good point, I tried briefly to include a clean as a prerequisite target
>> to the test, but it refused to execute sequentially. But perhaps it’s good
>> enough with a comment, added one.
>
> Yes, the clean target is treated specially before entering Main.gmk, to
> ensure commands like "make clean all" gets executed correctly. A comment is
> enough, I think.
>
>>
>>>>> In Awt2dLibraries.gmk, I think lines 733 and 735 needs to be fixed as
>>>>> well. Using FindLib is generally a good idea for this. I suspect there
>>>>> may be more such instances sprinkled around the makefiles.
>>>> Only fixed the last one, I think the first one is ok as is?
>>> The first one is sort of OK, but it's a questionable construct as the
>>> $(BUILD_LIBAWT_XAWT) variable may contain additional targets. We used to do
>>> it that way but these days I prefer the more explicit and precise FindLib.
>>> In this particular case you get a non needed dependency added when running
>>> compile-commands with ENABLE_HEADLESS_ONLY=true, which will not really
>>> affect anything so it doesn't really matter.
>> Yeah I certainly agree, but a quick grep shows that there’s about 50 such
>> constructs present right now. I wouldn’t mind cleaning those up, but perhaps
>> that should be in a separate change?
> If that does not affect your patch, you do not need to clean up those
> constructs.
>
> I've now looked through your patch. Overall, it looks good. Some minor
> comments:
>
> * In make/CompileCommands.gmk, are you sure the find -exec + construct does
> not exceed command line limits on problematic platforms such as Solaris and
> Windows?
>
> The AWT constructs also confuses me. Maybe you can expand a bit on the
> comment, because it really is non-trivial. You are executing a cp for each
> tmpfile you find? But what if you find multiple tmpfiles? There could
> certainly be multiple commands using @ constructs?
>
> * In make/Main.gmk, you can just do "($(CD) $(OUTPUTDIR) && $(RM) -r
> build*.log* compile_commands.json)" on a single line.
>
> * In make/common/MakeBase.gmk: I'd prefer if these functions were move to
> make/common/JdkNativeCompilation.gmk, close to the FindSrcDirsForLib etc
> definitions.
>
> * In make/common/NativeCompilation.gmk, I'm not entirely happy with the
> $1_OBJ_COMMON_OPTIONS_PRE/POST construct. I understand what you are trying to
> achieve, but I think this gets very hard to read. I don't have a perfect
> solution in mind. But perhaps something like this:
> $1_DEPS_OPTIONS := $$($1_DEP_FLAG) $$($1_DEP).tmp
> $1_COMPILE_COMMAND := $$($1_COMPILER) $$($1_FLAGS) $$($1_DEPS_OPTIONS)
> $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE))
>
> and for the compile commands, use $$(filter-out $$($1_DEPS_OPTIONS),
> $$($1_COMPILE_COMMAND)).
>
> Perhaps some unification with the Microsoft toolchain is possible by setting
> $1_DEPS_OPTIONS to -showIncludes.
>
An alternative, perhaps better, is to move the deps flag to the start. Then you
could do something like the above, but set
$1_COMPILE_OPTIONS := $$($1_FLAGS) $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE))
and when compiling do this:
$$($1_COMPILER) $$($1_DEPS_OPTIONS) $$($1_COMPILE_OPTIONS)
That would get rid of the filter-out, keep duplication low but still be
readable.
This assumes that ordering for the deps option is irrelevant. I think it is but
it would have to be tested.
/Magnus
> Erik, what do you think?
>
> * In make/lib/Lib-jdk.accessibility.gmk, this seems double incorrect. You are
> missing a libjawt path segment. And you wanted to use FindStaticLib.
>
> Overall, I believe we're misusing the "static lib" concept on Windows. The
> .lib files are not static libs, the way we mean it on unixes. Instead, the
> lib files is some kind of metadata on dll that are used when linking with
> those dlls. So we should introduce a better concept for these, and maybe
> something like FindLibDescriptor (or whatever). That should not really be
> part of this fix, though, so for the moment I'm going to accept that we call
> these "static libs" on Windows.
>
> This also makes me wonder how much testing this patch has recieved? I know a
> broken dependency in the worst case only shows up as a race, but have you
> verified it thoroughly even on Windows? And even without compile_commands?
>
> /Magnus
>
>>
>>> Otherwise this looks good now.
>> Thanks, I’ll include the latest webrevs with a comment added:
>>
>> Incremental: http://cr.openjdk.java.net/~rwestberg/8210459/webrev.01-02/
>> Full: http://cr.openjdk.java.net/~rwestberg/8210459/webrev.02/
>>
>> Best regards,
>> Robin
>>
>>> /Erik
>>>> Webrev (incremental):
>>>> http://cr.openjdk.java.net/~rwestberg/8210459/webrev.00-01/
>>>> Webrev (full): http://cr.openjdk.java.net/~rwestberg/8210459/webrev.01/
>>>> Testing: tier1, builds-tier5
>>>>
>>>> Best regards,
>>>> Robin
>>>>
>>>>> /Erik
>>>>>
>>>>>
>>>>>> On 2018-09-10 06:36, Robin Westberg wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> Please review the following change that adds support for generating
>>>>>> compile_commands.json as a top-level make target. This is a popular
>>>>>> format for describing how to compile object files for a project, and is
>>>>>> defined in [1]. This file can be used directly by IDEs such as Visual
>>>>>> Studio Code and CLion as well as "language servers" such as cquery [2]
>>>>>> and rtags [3].
>>>>>>
>>>>>> While it’s currently possible to generate this file as part of a full
>>>>>> build (using tools such as Bear [4], or simply parsing .cmdline files),
>>>>>> this change aims to make it possible to generate the compile commands
>>>>>> data without actually compiling the object files. This means that it’s
>>>>>> for example possible to start using an IDE fairly quickly on freshly
>>>>>> cloned source, instead of having to wait for a full build to complete.
>>>>>>
>>>>>> This was originally inspired by the work done in [5] by Mikael Gerdin
>>>>>> and Erik Joelsson, but has been through a few revisions since then. Erik
>>>>>> has also provided a lot of assistance with the current version, thanks
>>>>>> Erik!
>>>>>>
>>>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8210459
>>>>>> Webrev: http://cr.openjdk.java.net/~rwestberg/8210459/webrev.00/
>>>>>> Testing: tier1, builds-tier5
>>>>>>
>>>>>> Best regards,
>>>>>> Robin
>>>>>>
>>>>>> [1] https://clang.llvm.org/docs/JSONCompilationDatabase.html
>>>>>> [2] https://github.com/cquery-project/cquery
>>>>>> [3] https://github.com/Andersbakken/rtags
>>>>>> [4] https://github.com/rizsotto/Bear
>>>>>> [5]
>>>>>> http://mail.openjdk.java.net/pipermail/hotspot-dev/2017-March/026354.html
>