1. 21 May, 2022 15 commits
    • Ben Avison's avatar
      Report errors encountered during version number insertion · fe3438f7
      Ben Avison authored
      The use of ';' between subcommands threw away the status of earlier ones.
      Replace with '&&'.
      fe3438f7
    • Ben Avison's avatar
      Stop `CApp` from assuming `Messages` in installed in `resources` · 9189842e
      Ben Avison authored
      By contrast with `INSTRES_FILES` in `CModule`, where `Messages` is implicitly
      included, `CApp` and `BasicApp` do not do this for `RES_FILES`. The native-
      compilation version of `CApp` was doing duplicate installations of `Messages`,
      which was at odds with the cross-compiling `CApp` and both versions of
      `BasicApp`. If this version of `CApp` is used with a component that doesn't
      feature a `Messages` file (such as the in-development `InetRes`) this results
      in an error.
      
      The only existing `CApp` client components that define `RES_FILES` are
      `Help2` and `EditApp`, and they both explicitly list `Messages`, so this
      change should not break either of them.
      9189842e
    • Ben Avison's avatar
      Enable `CmdHelp` merging rule when `CUSTOMRES=no` and cross-compiling · 975573e8
      Ben Avison authored
      In the cross-compiling case, a rule is defined targeting `MERGEDMSGS`, which
      the phony target `resources_cmdhelp` depends on, but the definition is
      conditional on `CUSTOMRES` not being `custom` or `no`.
      
      In a use-case which is believed to be unique to LanManFS, it is required
      that the resource files not be registered to ResourceFS via the Messages
      module, but by LanManFS itself, both for RAM and ROM builds, but the merging
      of `CmdHelp` and `Messages` files is still required. To leverage the
      `Messages` merging code in `CModule`, re-enable the `MERGEDMSGS` rule when
      `CUSTOMRES=no` (which is arguably the correct setting for LanManFS) but leave
      it disabled for `CUSTOMRES=custom` to permit full customisation if required.
      975573e8
    • Ben Avison's avatar
      Improvements to building transient utilities · f5ba698f
      Ben Avison authored
      * Add cross-compilation `CUtil` makefile fragment and define `SUFFIX_UTILITY`
      * Switch to linking with `-util`. This automatically attaches headers and
        footers to the binary, and requires `link` 5.36 (16 Mar 2014 - long enough
        ago that I think that we can assume everyone wil have upgraded)
      f5ba698f
    • Ben Avison's avatar
      Define SUFFIX_TEMPLATE · d3c5dd96
      Ben Avison authored
      This allows RISC OS Wimp template files with filetype fec to be referenced
      identically whether native or cross-compiling (it expands to an empty string
      when used natively).
      d3c5dd96
    • Ben Avison's avatar
      Fix cross-compile `install` rule for `AAsmModule` · 55b37d6e
      Ben Avison authored
      This was accidentally stripping the `,ffa` from the filename at the final
      copy step.
      55b37d6e
    • Ben Avison's avatar
      Add symbolic name for additional compiler warnings · 97b1b4dd
      Ben Avison authored
      Norcroft's `-We` option suppresses warnings about casts between function
      pointers and non-function objects.
      
      Norcroft's `-Wn` option suppresses warnings about implicit narrowing casts.
      
      GCC doesn't have equivalents to these warnings, so they expand to an empty
      string if that's the selected compiler.
      97b1b4dd
    • Ben Avison's avatar
      Component type changes in ModuleDB · 8ea162ae
      Ben Avison authored
      The following are changed to type `C`. This will permit these components to
      switch to using the `CModule` shared makefile in upcoming changes.
      
      * ADFSFiler (and SCSIFiler and SDFSFiler, built from the same sources)
      * SpriteExtend
      * TaskManager
      
      The following are changed to type `EXP`. These components don't define
      `resources` or any subsequent phony targets. `amu` wil fail silently when you
      try to make these, but GNU `make` considers it an error.
      
      * DDTLib
      * DebugLib
      * DeskLib
      * ModMallocLib
      * PDebug
      * RemoteDebug
      * Trace
      * Wild
      * tboxlib
      8ea162ae
    • Ben Avison's avatar
      Additional tool defines · 16477b70
      Ben Avison authored
      * Define `DEFMOD` for cross-compilation use.
      * Define `SETTYPE` for cross-compilation use (this acts as a no-op; when
        cross-compiling, filetypes are indicated using ,xx suffixes instead).
      * Define `RUN` tool for both native and cross-compilation. This is already
        used in various components, but wasn't defined anywhere. It is particularly
        useful during cross-compilation for launching build tools that were built
        locally to a component, since on systems other than RISC OS, the current
        directory is typically not on the run path.
      16477b70
    • Ben Avison's avatar
      Add missing phony targets · 86a9b634
      Ben Avison authored
      * Add `standalone` target for CApp makefile clients.
      
        This is analogous to `standalone` for CModule clients, and is implemented
        as an alias for the `all` target. This is useful because cppcheck CI jobs
        need a consistent way to ensure that all local autogenerated source and
        header files have been created, so that cppcheck can fully analyse the
        source code.
      
      * Enable install target for cross-compiling CLibrary components.
      
        `install` was missing from the list of targets that need to be re-run from
        within the `objs` subdirectory.
      86a9b634
    • Ben Avison's avatar
      Updates to library include path defines · 8ec53ae3
      Ben Avison authored
      * Define cross-platform name for ConfigLib header include path.
      * Define cross-platform name for tboxlibint header include path.
      * Undefine `${TCPIPINC}` when building with GCC (as with the standard C
        headers, the headers in TCPIPLibs conflict with those on the default
        include path when compiling with GCC. Our TCPIPLibs headers appear to be
        incompatible with GCC, so resolve the conflict by removing TCPIPLibs from
        the path).
      8ec53ae3
    • Ben Avison's avatar
      Updates to library file defines · f099260f
      Ben Avison authored
      * Add symbolic names for ImageLb libraries.
      f099260f
    • Ben Avison's avatar
      Generate cppcheck suppression specification for module builds · 16922ce9
      Ben Avison authored
      Cppcheck 1.84 or later permits warning suppressions to be specified on a
      per-symbol basis, provided the suppressions are specified in an XML file.
      
      We wish to make use of this to reduce the number of inline suppression
      markers in source files. However, it is difficult for a CI job script to know
      how to analyse a CMHG file, because the filename and build options vary from
      component to component. It is much easier instead to automatically emit an
      consistently-named XML file during the standard CMHG rule in the shared
      makefiles, especially since the cppcheck CI job needs to run CMHG anyway in
      order to auto-generate a C header file from the CMHG file. So this is what
      we do here. The only environment for which this is enabled is Norcroft-based
      cross-compilation, but that's the only one we need.
      
      Another precedent for this sort of build side-effect are the symbol listing
      files that are generated during ROM link - although in that case they are
      primarily to assist debugging the resultant ROM images.
      16922ce9
    • Ben Avison's avatar
      Add VFPSupport to header exports for Disc builds · 3542c0f3
      Ben Avison authored
      This is required to resolve softload builds of any component that uses a
      VFP SWI, for example as part of a CI job.
      3542c0f3
    • ROOL's avatar
      Add Tabs and TreeView gadgets to Disc build · 10741fc0
      ROOL authored
      Version 7.72. Tagged as 'BuildSys-7_72'
      10741fc0
  2. 14 Feb, 2022 2 commits
  3. 05 Feb, 2022 1 commit
    • Ben Avison's avatar
      Add SDIODriver header export to Disc build · f755c8f9
      Ben Avison authored
      This facilitates softloadable modules that interface to the SD subsystem
      (such as pretty much every Linux-derived WiFi driver module since they can't
      be linked into a ROM) and also permits GitLab CI to build soft-loadable
      versions of ROM WiFi drivers or SDFS.
      
      Version 7.70. Tagged as 'BuildSys-7_70'
      f755c8f9
  4. 31 Jan, 2022 1 commit
    • Ben Avison's avatar
      Create shared makefile for building HALs · 44504264
      Ben Avison authored
      This de-duplicates a lot of HAL makefiles, and also allows us to introduce a
      cross-compilation variant for them all at once.
      
      APCS specifiers are deliberately omitted; this is in order to facilitate some
      HALs linking with libraries compiled to the usual APCS variant without
      resulting in link-time warnings.
      
      Version 7.69. Tagged as 'BuildSys-7_69'
      44504264
  5. 29 Jan, 2022 1 commit
    • Ben Avison's avatar
      Add two SDIO-related libraries · 0296d2c6
      Ben Avison authored
      Added to Components files for all ROM builds that could, in theory, have WiFi
      drivers, and to Disc so that softloadable builds are possible.
      
      Version 7.68. Tagged as 'BuildSys-7_68'
      0296d2c6
  6. 28 Jan, 2022 1 commit
  7. 05 Jan, 2022 1 commit
  8. 15 Dec, 2021 1 commit
  9. 09 Oct, 2021 3 commits
    • Robert Sprowson's avatar
      Use same names for CExport$Dir and Export$Dir as GNUmakefiles · 89a54862
      Robert Sprowson authored
      The CEXPDIR and EXPDIR names are the wild so hang around as aliases until those components are visited.
      Purely for symmetry add the same to AAsmModule.
      
      Version 7.64. Tagged as 'BuildSys-7_64'
      89a54862
    • Robert Sprowson's avatar
      Retire old OSINC alias · b8f39d1a
      Robert Sprowson authored
      b8f39d1a
    • Robert Sprowson's avatar
      Simplify debug and CUSTOMSA use · d6ee8ba0
      Robert Sprowson authored
      AppLibs/ModuleLibs:
      DebugLib requires remotedb to link, and both are present, but remotedb requires InetLib and SockLib. Currently client makefiles must specify this, but can't do via DBG_LIBS because of the ordering, so end up having to mess around with LIBS in a conditional.
      Simplify this by providing the libraries in DEBUGLIBS.
      
      CModule:
      Add a new SA_TARGET_RULE variable so that when CUSTOMSA is in use it is still possible to invoke the standalone build without needing to know about the differences between GNU and native makefiles (one uses 'MyModule,ffa' the other 'rm.MyModule').
      This will allow the 5 uses of CModule to be simplified in future, the 5 uses of AAsmModule for CUSTOMSA are just to stop a module being output.
      d6ee8ba0
  10. 18 Sep, 2021 1 commit
    • Robert Sprowson's avatar
      Allow clients of CLibrary to use LibIncludes variables · f33c9046
      Robert Sprowson authored
      The comment in LibIncludes mentions libraries that depend on other libraries may find those path variables useful, but since CLibrary doesn't itself include ModuleLibs or AppLibs, they expand as empty. Add LibIncludes.
      
      Version 7.63. Tagged as 'BuildSys-7_63'
      f33c9046
  11. 04 Sep, 2021 1 commit
  12. 26 Jun, 2021 1 commit
  13. 23 Jun, 2021 1 commit
    • Ben Avison's avatar
      Change detail of `C_EXP_HDR` for CModule clients · 7dca5691
      Ben Avison authored
      This macro is used to define the root directory for exported C header files.
      Previously, when native-compiling, the default setting, if not otherwise
      overridden by the master makefile, was `<cexport$dir>.Interface.h`. This is
      at odds with the cross-compiling case, which defaults to the equivalent
      string, but without the `h` subdirectory, for obvious reasons.
      
      Only one component, DHCP, currently overrides `C_EXP_HDR`, although more will
      be joining it in the near future. The macro is used internally within rules
      defined by `CModule`, but a few components also use it within rules in their
      master makefiles.
      
      We hereby change the default value to omit the `h` subdirectory, and permit
      master makefiles to specify an override value which also omits it (in future
      it wil be deprecated to include it, and its use will be phased out). There
      are two reasons for this:
      
      1) It assists with cross-compilation, since the override can then be
         expressed identically for both native and cross builds.
      
      2) It permits the `.exphdr.h` suffix rule to be re-used when one or more
         headers need to be exported to a subdirectory of `C_EXP_HDR`, so long as
         the headers are present at an equivalent subdirectory in the component
         source tree, and that subdirectory is on `VPATH`. This is because `$<`
         is set up to include the element of `VPATH` that matched the rule - but
         this needs to go before the `.h`, not after it.
      
      To prepare for this MR, the following must all be merged:
      * RiscOS/Sources/FileSys/ADFS/ADFS4!2
      * RiscOS/Sources/HWSupport/ATA/SATADriver!2
      * RiscOS/Sources/HWSupport/SD/SDIODriver!5
      * RiscOS/Sources/HWSupport/SPIDriver!1
      * RiscOS/Sources/HWSupport/USB/USBDriver!9
      
      Version 7.60. Tagged as 'BuildSys-7_60'
      7dca5691
  14. 12 Jun, 2021 5 commits
    • Ben Avison's avatar
      Introduce new shared makefile fragments for BASIC components · 6dc5260c
      Ben Avison authored
      The `BasicApp` fragment is analogous to the `CApp` fragment in that it
      supports both single-file executables and application directories. Rules are
      included for building any such application directories into ROMs, with
      files destined for `Resources:$.Resources` being exported to the Messages
      module during the `resources` phase, and those destinated for
      `Resources:$.Apps` being built into a position-independent module, so that
      when the module is killed or unplugged, those files disappear from ResourceFS.
      
      Because the module is position-independent, the makefile fragment implements
      the `install_rom` rule rather than the `rom_link` rule used by `CApp`. This
      is consistent with how `srcbuild` already installs ROM components listed in
      the ModuleDB as being of type `BAS`.
      
      The other main difference from `CApp` is that there is no compilation or
      linking step. Tokenisation, crunching and squishing of the (untokenised)
      source files are roughly analogous to the compilation steps, except that
      multiple source files are concatenated (if applicable) as the first step.
      There is also no debug build variant, and so no `debug` rule.
      
      Crunching is performed (on native builds) using the `BasCrunch` tool, so if
      you are converting an existing component which includes its own Command
      script to perform tokenisation and crunching, this will no longer be needed.
      
      Cross-"compilation" is fully suported. This uses the new `toffb` tool for
      tokenisation (apologies for the wheel-reinvention, but this was developed in
      ignorance about Steve Fryatt's `Tokenize` tool; `toffb` also does do a more
      faithful job of replicating BASIC's `CRUNCH` options, so is more useful for
      ensuring cross-compilation builds remain identical to the native builds).
      It also uses Matrix Brandy (V1.22.9 or later) to execute Squish (at least
      RiscOS/Tools/Sources/Squish!1).
      
      We pass the new `-nosavepath` option to Squish to ensure that the results are
      identical for cross-compile builds compared to native ones. However, Squish
      ignores unrecognised command-line options, so this does not introduce a
      dependency on a newer Squish tool for native builds.
      
      One subtle enhancement over previous makefiles is that we create dynamic
      dependencies between the crunched-and-squished program and its untokenised
      source files.
      
      Version 7.59. Tagged as 'BuildSys-7_59'
      6dc5260c
    • Ben Avison's avatar
      7bfa5c9f
    • Ben Avison's avatar
      Fix typo · 4e012049
      Ben Avison authored
      Missing `$` character before `{LOCALE}` would have caused UK resources to
      be selected instead of non-UK ones, if anyone were to be doing an
      internationalised cross-compiled build.
      4e012049
    • Ben Avison's avatar
      Define SUFFIX_DATA · c63824df
      Ben Avison authored
      This allows RISC OS abstract data files with filetype ffd to be referenced
      identically whether native or cross-compiling (it expands to an empty string
      when used natively).
      c63824df
    • Ben Avison's avatar
      327b245f
  15. 15 May, 2021 5 commits
    • Ben Avison's avatar
      Support links for extension-less files in subdirectories · 9b0aed8c
      Ben Avison authored
      This only applies to cross-compilation builds. The `make links` rules don't
      know a pre-determined list of subdirectories that need to be converted into
      filename extensions. Instead, files that should have no filename extension
      are usually simply identified by the absence of a `/` in their specification
      in `SOURCES_TO_SYMLINK`. However, this is insufficient to handle some rarer
      cases, such as a `Makefile` within a `Test` subdirectory.
      
      To handle this, we introduce explicit support for specifying such files in
      `SOURCES_TO_SYMLINK`, using a double slash where there would otherwise be a
      filetype subdirectory name, such as `Test//Makefile`. (Conveniently, this is
      also valid Posix filename syntax anyway.) The way this is achieved is to
      tweak the regular expressions to require the directory and leafnames between
      slashes to be at least one character long.
      
      Version 7.58. Tagged as 'BuildSys-7_58'
      9b0aed8c
    • Ben Avison's avatar
      Define `export` rule for `CApp` shared makefile · 7118b699
      Ben Avison authored
      With GNU `make` unlike with `amu`, it is considered an error to make a target
      for which no rule is defined. Therefore we need an explicit no-op `export`
      rule in the cross-compiling `CApp` makefile.
      7118b699
    • Ben Avison's avatar
      Always implicitly include StdTools when cross-compiling · b1e26d51
      Ben Avison authored
      `AAsmModule`, `CApp`, `CLibrary` and `CModule` implicitly include various
      other shared makefile fragments to permit simpler master makefiles. However,
      when cross-compiling, they were only included when invoked from within the
      `objs` subdirectory, which in particular meant you couldn't rely on any of
      the definitions from `StdTools` when extending the `clean` rule unless you
      explicitly included it from the master makefile, thereby defeating the
      purpose of the implicit inclusion. Change them so that `StdTools` is included
      for all rules.
      b1e26d51
    • Ben Avison's avatar
      Pass `-tgcc` to `cmunge` · f3add28d
      Ben Avison authored
      This tells it to use gcc for preprocessing the CMHG file (if enabled) and
      asasm for the backend (which means the object file is an ELF file, required
      in order to link with GCC objects).
      f3add28d
    • Ben Avison's avatar
      Allow cross-compile C++FLAGS to be inherited from environment · b2eb8ff6
      Ben Avison authored
      Occasionally, it is useful to be able to set C++FLAGS from the calling
      environment, for example when building a 32-bit x86 target from a 64-bit
      x86-64 host. This works fine for CFLAGS and LDFLAGS, but C++FLAGS is not a
      valid Posix environment variable name. Import setting from CXXFLAGS instead
      when cross-compiling.
      b2eb8ff6