Several parts of makefile output were generated by iterating over
HashMaps, which do not have a deterministic iteration order. Use
TreeMaps instead to output in sorted order. This is possible now that
the API function with return type HashMap is no longer public API and
can be changed to return Map instead.
Benchmark files for affected tests are updated to the new ordering.
This would not be strictly necessary: the tests would also succeed
without, since org.eclipse.cdt.managedbuilder.testplugin.
ManagedBuildTestHelper.compareMakefiles() uses a reordering-tolerant
comparison. However, recording the new (now hopefully stable) order
makes future development on makefile generation easier by avoiding
spurious diff output when tests fail due to changes to other parts of
makefiles.
Change-Id: I20f2e51bd5b9e3bcc5da245d781ca5b4a34fc0b2
Signed-off-by: Christian Walther <walther@indel.ch>
To avoid errors like "Command line too long" when removing build
artifacts, split the clean command on multiple lines. In order to
properly handle whitespace etc, generate a new clean target in each
subdir.mk with the explicit list of files to remove in that directory.
The command should be splited on a sane length, 6000 is used in the
internal builder, so reuse that limit here.
Contributed by STMicroelectronics
Change-Id: I843e1ac896076d279173c421210b72f4a325296f
Signed-off-by: Torbjörn Svensson <torbjorn.svensson@st.com>
Addendum to 0436516 (Bug 573502): The main-build target now always
exists, not just when there is a pre-build step, so it must always be
marked as .PHONY.
Change-Id: I478222bcc319c516a6e116f710d8382346b5ded5
Signed-off-by: Christian Walther <walther@indel.ch>
The post-build step may depend on secondary artifacts of the build and
should thus be executed last.
Contributed by STMicroelectronics
Change-Id: Iaf67f6b3e1fcab008798d2712e15d0a6a46ceae8
Signed-off-by: Torbjörn Svensson <torbjorn.svensson@st.com>
A change of build configuration should rebuild the artifact.
With make, this is achieved by depending on the makefile that contains
the rule to build the artifact. If the flags change, so will the
makefile do and the artifact is rebuilt.
Contributed by STMicroelectronics
Change-Id: I56e0376ff9bfa5629b55c1b6c9f94a6f930e0d69
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
When there is a linked file in the project, the build target for the
content in the .d file should be the .o file as that is what is
depending on the source file.
Use "$@" rather than "$(@)" as it's the usual syntax for single letter
variables in make.
Contributed by STMicroelectronics
Change-Id: I6b024b2b3a1a8b061740e99de5e96923981c92fa
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
The symbols generated are:
* BUILD_ARTIFACT_NAME
Value of "Artifact name" field defined in the build configuration
* BUILD_ARTIFACT_EXTENSION
Value of "Artifact extension" field defined in the build configuration
* BUILD_ARTIFACT_PREFIX
Value of "Output prefix" field defined in the build configuration
* BUILD_ARTIFACT
Assembly of the other values to build the target file name
The above symbols make it easier to extend the generated makefile using
the provided makefile hooks "makefile.init", "makefile.defs" and
"makefile.targets". There is no longer need to duplicate the name of
the target artifact in the hooks files.
The hooks can for example be used when the post-build step is not
flexible enough. By placing the post-build step in makefile.targets,
when done properly, will let the user have full control over the
sequence, including parallelism, for the required steps.
Contributed by STMicroelectronics
Change-Id: I163917837b65cb397eb5943c4357a54e9576cf42
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@st.com>
Add enforecment script that verifies that only specified file types are
allowed to be mared as executable.
Change-Id: I4b40e3a46b03bfc78a9dcd52e8bf29cb079b7f3b
Signed-off-by: Torbjörn Svensson <azoff@svenskalinuxforeningen.se>
The '.d' files that are generated by CDT, contain 'file_name.d:
file_name.cpp file_name.h' type of target prerequisite relations.
However, to get benefit of the dependency mechanism, this should be
something like 'file_name.o: file_name.cpp file_name.h'.
Therefore, we need to change ''options[3] = "-MT\"$(@:%.o=%.d)\"";'' as
'options[3] = "-MT\"$(@)\"";'
Also update the test cases.
Change-Id: Iee829a8564e1b134905ee06a8a4b76a1e3b30ecc
Signed-off-by: ocagdas <ocagdas@yahoo.com>
The cause of the different output is a change in o.e.core.resources
where the order of visiting a project has changed to become
alphabetical. See
http://eclip.se/461838
Therefore, our benchmark files must also have the output of
subdirectories in alphabetical order.
Change-Id: I3331649cf516adbe3b453b11f1ed6733a007ce4d