1. 15 May, 2021 4 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'
    • 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.
    • Ben Avison's avatar
    • Ben Avison's avatar
  2. 20 Jul, 2020 1 commit
    • Ben Avison's avatar
      Enable rom_link target for AAsmModule components · f9c01ed0
      Ben Avison authored
      The ModuleDB classifies modules as being of type either `ASM` or `C`. The
      primary consumer of this information is `srcbuild`. The difference between
      them, as far as `srcbuild` is concerned, is only that in the `install_rom`
      phase, it builds the `rom_link` phony target in `C` components' makefiles,
      instead of the `install_rom` phony target.
      These phony targets differ slightly in requirements: `install_rom` uses
      `INSTDIR` where `rom_link` uses `LINKDIR`, but more significantly, `rom_link`
      is passed parameter `ADDRESS` to state where in the ROM the module resides.
      This addesss is not known at the time the `rom` phony target is made, so `C`
      components only produce a partially-linked binary at that stage, where `ASM`
      components have already produced a complete binary. (The reason for this
      difference is that while hand-written assembly modules use position-
      independent code, the output of the Norcroft compiler normally relies on
      run-time code modification to relocate absolute addresses - something that is
      not possible when running from ROM.)
      There are implementations of the `install_rom` and `rom_link` rules in the
      `AAsmModule` and `CModule` shared makefiles respectively, so `AAsmModule` is
      currently only used for `ASM` components and `CModule` is only used for `C`
      components. However, occasionally we have reason to change a component from
      using `AAsmModule` to `CModule`, usually for reasons unrelated to the use of
      absolute address relocations, because `CModule` is more flexible than
      `AAsmModule` in various other ways.
      This poses a problem for keeping `BuildSys` in step with the component in
      question, because whenever we change the shared makefile type in the
      component's makefile, we have to update the `ModuleDB` in lock step.
      The solution presented here is to ensure that at least one shared makefile
      supports both phony targets, so any component using it no longer cares how it
      is recorded in the `ModuleDB`. Adding `install_rom` to `CModule` was rejected,
      on the grounds that it would be too easy to accidentally build a ROM using it
      where the necessary relocations had been skipped at ROM link time. However,
      there are no drawbacks to adding `rom_link` to AAsmModule, because linking
      an object that has no relocations at any base address will always result in
      an identical binary that is safe to execute.
      Though the module itself requires no relocations, the symbols file
      traditionally output by `CModule` does contain absolute addresses which are
      useful for debugging, so a new link command is executed during `AAsmModule`'s
      `rom_link` rule in order to ensure this is kept up-to-date, even though the
      binary could otherwise have been re-used from the one generated in the `rom`
  3. 23 May, 2019 1 commit
  4. 14 Apr, 2018 1 commit
    • Ben Avison's avatar
      Makefile bugfixes · 53b25b7a
      Ben Avison authored
        * This was the odd-one out amongst top-level shared makefiles in that it
          still required the master makefile to include StdTools explicitly - even
          the GNU version of this makefile did so. Now changed for consistency.
        * Fixed typo in renaming of MERGEDMDIR to MERGEDRDIR.
        Fixes build error in latest FPEmulator
      Version 7.25. Tagged as 'BuildSys-7_25'
  5. 11 Apr, 2018 1 commit
    • Ben Avison's avatar
      Incremental step in cross-compilation support · 5e83cb7e
      Ben Avison authored
        * Correct capitalisation of resgen's TARGET to match its main source file
        * Targets now given ,ffa filetype suffix
        * Support source directory layouts s/<subdir>/<leaf> as used by the
          kernel and printer drivers - define SYMLINK_EXT_FIRST to enable
        * Prevent relinking when running make on an up-to-date component due to
          a difference between amu and GNU make's handling of double-colon rules
        * Support linking with GNU toolchain
        * Fix installation rule (mixup between MERGEDMDIR and MERGEDRDIR)
        * Support up to 16 assembler and 8 C-from-assembler headers, up from 3
          of each (here's looking at you, kernel) - long-term, it might be worth
          changing this to a scheme like that used by CModule to remove any
        * Fix C-from-assembler exports to have .h suffix
        * Define INCLUDE_OSLIB to permit OSLib header search paths to be
          specified in an OS-agnostic way
        * Prevent relinking when running make on an up-to-date component due to
          a difference between amu and GNU make's handling of double-colon rules
        * Prevent rearchiving when running make on an up-to-date component due
          to a difference between amu and GNU make's handling of double-colon
        * Don't use .hdr suffix on exported assembler header files
        * Correct order of dependencies for export_libs phony target
        * Definition for the module filetype suffix
        * Add LDBIN tool for GNU/Norcroft-agnostic binary link, useful for
          linking position-independent binary code, such as relocatable modules
          (i.e. ones that don't require the linker to create a __RelocCode
        * FAPPEND function now works if the same file is used for the
          destination as for one of the sources (this is used by CModule)
        GNUmakefiles/CModule, ModStdRule, ModuleLibs:
        * Finally created cross-compilation versions of the last major shared
          makefiles! Warning: these have received limited testing to date.
        * Support up to 16 assembler and 8 C-from-assembler headers
        Makefiles/AppLibs, ModuleLibs:
        * Define INCLUDE_OSLIB
        * Add LDBIN tool
      Version 7.24. Tagged as 'BuildSys-7_24'
  6. 12 Mar, 2018 1 commit
    • Ben Avison's avatar
      Changes to keep GNUmakefiles and Makefiles compatible · d8eeed92
      Ben Avison authored
        * Adopt same extensible syntax for describing resources phase files as CModule (see BuildSys 6.91)
        * Don't permit CALLXLIB to be used for application builds (see BuildSys 6.61)
        * Reflect MODMALLOCLIB leafname change (see BuildSys 6.61)
        * Add install_debug_app rule for debug app installations (see BuildSys 6.53)
        * Allow additional dependencies to be specified using LIB_DEPENDS (see BuildSys 6.63)
        * Gains install target (see BuildSys 7.15)
        * Add shell implementation of FAppend (see BuildSys 6.45) - compatible except for the fact that the destination is given current timestamp
        * ${NOP} no longer implicitly includes the silent-command prefix character @ (see BuildSys 6.50)
        * Add CPVFLAGS (see BuildSys 6.53) although it can't achieve anything as a suffix to the command
        * Add shell implementation of EraseCVS (see BuildSys 6.53)
        * Add InstViaRG tool (see BuildSys 6.70)
      Version 7.21. Tagged as 'BuildSys-7_21'
  7. 27 Sep, 2014 1 commit
    • Robert Sprowson's avatar
      Change less useful resources_messages for resources_sprites · cb1c7449
      Robert Sprowson authored
       Swap round ${RESOURCEEXTRA} to come later, since otherwise the ${RESDIR} hasn't been created
      AAsmModule & CModule:
       Recemtly added resources_messages was a bit pointless as resources_common did the same thing, instead add resources_sprites.
       Debug library for internal Toolbox objects added.
      Retagged as BuildSys-6_50.
  8. 24 Sep, 2014 2 commits
    • Robert Sprowson's avatar
      Make debug builds a bit simpler · a4135210
      Robert Sprowson authored
       Remove SA_DEBUG override, instead use ASDFLAGS like CModule does.
       If the target is 'debug' allow CMHGDFLAGS to pass extra defines into CMHG, this avoids the common problem of having to have 2 CMHG files and select between them.
      Other - sync the messages token check/copying, use ${NOP} and ${FAPPEND} and ${DO}, and od.${RES_OBJ} isn't dependent on ${DIRS} since it already has that when creating o.${RES_OBJ}.
      Version 6.50. Tagged as 'BuildSys-6_50'
    • Ben Avison's avatar
      Improvements to AAsmModule shared makefile · 71f9f9e9
      Ben Avison authored
        * Corrected and added documentation at head of file
        * Now defines an "all" target
        * DIRS now has a default value (i.e. behaviour now matches the other shared
          makefiles) freeing the master makefile from needing to specify platform-
          specific paths
        * Added cross-compilation version
        Tested by cross-compiling the BASIC module
      Version 6.49. Tagged as 'BuildSys-6_49'