From db02eb87ce5e955f1c970ea3ce88745e03f0bb74 Mon Sep 17 00:00:00 2001 From: xengineering Date: Thu, 3 Apr 2025 18:13:16 +0200 Subject: web: Add meson build system CMake has some disadvantages when building subprojects like with `ExternalProject`. Furthermore the language is sometimes hard to read, hard to write and not so much appreciated. This is a little test if meson might perform better. If successful this project might switch to meson for all parts except the Zephyr builds. --- meson.build | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 meson.build (limited to 'meson.build') diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..537d067 --- /dev/null +++ b/meson.build @@ -0,0 +1,3 @@ +project('iot-contact') + +subdir('web') -- cgit v1.2.3-70-g09d2 From 34c0c109551c3a67bb89dcfbcd437a5ed812809f Mon Sep 17 00:00:00 2001 From: xengineering Date: Thu, 3 Apr 2025 21:45:55 +0200 Subject: web: Add simple.css to website This uses meson to copy the simple.css file to the build dir and references the CSS file in the HTML code. --- meson.build | 2 ++ web/content/meson.build | 5 +++++ web/layouts/baseof.html | 1 + web/meson.build | 9 +++++---- 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 web/content/meson.build (limited to 'meson.build') diff --git a/meson.build b/meson.build index 537d067..494da4e 100644 --- a/meson.build +++ b/meson.build @@ -1,3 +1,5 @@ project('iot-contact') +css = meson.current_source_dir() / 'simple.css' / 'simple.css' + subdir('web') diff --git a/web/content/meson.build b/web/content/meson.build new file mode 100644 index 0000000..75d3120 --- /dev/null +++ b/web/content/meson.build @@ -0,0 +1,5 @@ +configure_file( + input: css, + output: 'simple.css', + copy: true, +) diff --git a/web/layouts/baseof.html b/web/layouts/baseof.html index 983e6e1..b52d039 100644 --- a/web/layouts/baseof.html +++ b/web/layouts/baseof.html @@ -3,6 +3,7 @@ + {{ .Site.Title }} diff --git a/web/meson.build b/web/meson.build index 3fcffed..20a4520 100644 --- a/web/meson.build +++ b/web/meson.build @@ -1,11 +1,12 @@ +subdir('content') + custom_target('website', output: ['public'], command: [ 'hugo', - '--source', - meson.current_source_dir(), - '--destination', - meson.current_build_dir() / 'public', + '--source', meson.current_source_dir(), + '--destination', meson.current_build_dir() / 'public', + '--contentDir', meson.current_build_dir() / 'content', ], depend_files: [ 'hugo.toml', -- cgit v1.2.3-70-g09d2 From 6ff99393b4bbc1207375cbbc032814e233b03758 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 5 Apr 2025 09:52:41 +0200 Subject: pcb: Switch from CMake to Meson This allows to install the PCB-related files easier to the website which is built with Meson. --- CMakeLists.txt | 3 - cmake/LICENSE.txt | 373 ----------------------------------------------------- cmake/kicad.cmake | 50 ------- meson.build | 1 + pcb/CMakeLists.txt | 21 --- pcb/meson.build | 38 ++++++ 6 files changed, 39 insertions(+), 447 deletions(-) delete mode 100644 cmake/LICENSE.txt delete mode 100644 cmake/kicad.cmake delete mode 100644 pcb/CMakeLists.txt create mode 100644 pcb/meson.build (limited to 'meson.build') diff --git a/CMakeLists.txt b/CMakeLists.txt index a21c5d0..7d5602c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,4 @@ cmake_minimum_required(VERSION 3.10) project(iot-contact LANGUAGES NONE) -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) - add_subdirectory(fw) -add_subdirectory(pcb) diff --git a/cmake/LICENSE.txt b/cmake/LICENSE.txt deleted file mode 100644 index d0a1fa1..0000000 --- a/cmake/LICENSE.txt +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/cmake/kicad.cmake b/cmake/kicad.cmake deleted file mode 100644 index 0feac80..0000000 --- a/cmake/kicad.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at https://mozilla.org/MPL/2.0/. - -function(kicad_schematic_pdf target sink source) - add_custom_target( - "${target}" - ALL - DEPENDS - ${sink} - ) - - add_custom_command( - OUTPUT - ${sink} - COMMAND - kicad-cli sch export pdf --output ${sink} ${source} - COMMAND - echo "Exported schematic: ${sink}" - DEPENDS - ${source} - JOB_POOL - kicad - ) -endfunction() - -function(kicad_bom_csv target sink source) - add_custom_target( - "${target}" - ALL - DEPENDS - ${sink} - ) - - add_custom_command( - OUTPUT - ${sink} - COMMAND - kicad-cli sch export bom - --fields 'Reference,Description,Value,Footprint,Manufacturer,MPN,Datasheet' - --output ${sink} - ${source} - COMMAND - echo "Exported BOM: ${sink}" - DEPENDS - ${source} - JOB_POOL - kicad - ) -endfunction() diff --git a/meson.build b/meson.build index 494da4e..a0e6468 100644 --- a/meson.build +++ b/meson.build @@ -2,4 +2,5 @@ project('iot-contact') css = meson.current_source_dir() / 'simple.css' / 'simple.css' +subdir('pcb') subdir('web') diff --git a/pcb/CMakeLists.txt b/pcb/CMakeLists.txt deleted file mode 100644 index 8d2c49a..0000000 --- a/pcb/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(iot-contact-pcb LANGUAGES NONE) - -include(kicad) - -set_property(GLOBAL PROPERTY JOB_POOLS kicad=1) - -set(schematic "${CMAKE_CURRENT_SOURCE_DIR}/iot-contact.kicad_sch") - -kicad_schematic_pdf( - "schematic" - "${CMAKE_CURRENT_BINARY_DIR}/schematic.pdf" - "${schematic}" -) - -kicad_bom_csv( - "bom" - "${CMAKE_CURRENT_BINARY_DIR}/bom.csv" - "${schematic}" -) diff --git a/pcb/meson.build b/pcb/meson.build new file mode 100644 index 0000000..cd45a48 --- /dev/null +++ b/pcb/meson.build @@ -0,0 +1,38 @@ +schematic_files = [ + 'iot-contact.kicad_sch', + 'contacts.kicad_sch', + 'ethernet.kicad_sch', + 'io.kicad_sch', + 'power.kicad_sch', + 'processor.kicad_sch', +] + +schematic = custom_target('schematic', + output: ['schematic.pdf'], + command: [ + 'kicad-cli', + 'sch', + 'export', + 'pdf', + '--output', meson.current_build_dir() / 'schematic.pdf', + meson.current_source_dir() / 'iot-contact.kicad_sch', + ], + depend_files: schematic_files, + build_by_default: true, +) + +bom = custom_target('bom', + output: ['bill-of-materials.csv'], + command: [ + 'kicad-cli', + 'sch', + 'export', + 'bom', + '--fields', + 'Reference,Description,Value,Footprint,Manufacturer,MPN,Datasheet', + '--output', meson.current_build_dir() / 'bill-of-materials.csv', + meson.current_source_dir() / 'iot-contact.kicad_sch', + ], + depend_files: schematic_files, + build_by_default: true, +) -- cgit v1.2.3-70-g09d2 From 00189e737517f4470336d819d52327a037509493 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 5 Apr 2025 15:28:04 +0200 Subject: web: Replace file copying by Meson installation This makes the build system code way less hacky and more modular. --- meson.build | 8 +++++++- pcb/meson.build | 12 ++++++------ web/content/copy.py | 9 --------- web/content/meson.build | 29 ----------------------------- web/layouts/baseof.html | 2 +- web/layouts/home.html | 4 ++-- web/meson.build | 13 ++++++------- 7 files changed, 22 insertions(+), 55 deletions(-) delete mode 100755 web/content/copy.py delete mode 100644 web/content/meson.build (limited to 'meson.build') diff --git a/meson.build b/meson.build index a0e6468..73206f4 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,12 @@ project('iot-contact') -css = meson.current_source_dir() / 'simple.css' / 'simple.css' +fs = import('fs') +css = fs.copyfile( + meson.current_source_dir() / 'simple.css' / 'simple.css', + 'simple.css', + install: true, + install_dir: 'website/static', +) subdir('pcb') subdir('web') diff --git a/pcb/meson.build b/pcb/meson.build index d74f8c3..7f8b85f 100644 --- a/pcb/meson.build +++ b/pcb/meson.build @@ -7,7 +7,6 @@ schematic_files = [ 'processor.kicad_sch', ] -schematic_pdf = meson.current_build_dir() / 'schematic.pdf' schematic = custom_target('schematic', output: ['schematic.pdf'], command: [ @@ -15,14 +14,15 @@ schematic = custom_target('schematic', 'sch', 'export', 'pdf', - '--output', schematic_pdf, + '--output', meson.current_build_dir() / 'schematic.pdf', meson.current_source_dir() / 'iot-contact.kicad_sch', ], depend_files: schematic_files, build_by_default: true, + install: true, + install_dir: 'website/static', ) -bom_csv = meson.current_build_dir() / 'bill-of-materials.csv' bom = custom_target('bom', output: ['bill-of-materials.csv'], command: [ @@ -32,11 +32,11 @@ bom = custom_target('bom', 'bom', '--fields', 'Reference,Description,Value,Footprint,Manufacturer,MPN,Datasheet', - '--output', bom_csv, + '--output', meson.current_build_dir() / 'bill-of-materials.csv', meson.current_source_dir() / 'iot-contact.kicad_sch', ], depend_files: schematic_files, build_by_default: true, + install: true, + install_dir: 'website/static', ) - -pcb = meson.current_build_dir() diff --git a/web/content/copy.py b/web/content/copy.py deleted file mode 100755 index 0b06e6d..0000000 --- a/web/content/copy.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python3 - - -import shutil -import sys - - -print(f"Copying {sys.argv[1]} to {sys.argv[2]}") -shutil.copyfile(sys.argv[1], sys.argv[2]) diff --git a/web/content/meson.build b/web/content/meson.build deleted file mode 100644 index 5046982..0000000 --- a/web/content/meson.build +++ /dev/null @@ -1,29 +0,0 @@ -configure_file( - input: css, - output: 'simple.css', - copy: true, -) - -schematic_web = custom_target('schematic_web', - output: ['schematic.pdf'], - command: [ - 'copy.py', - schematic_pdf, - meson.current_build_dir() / 'schematic.pdf' - ], - depends: [ - schematic, - ], -) - -bom_web = custom_target('bom_web', - output: ['bill-of-materials.csv'], - command: [ - 'copy.py', - bom_csv, - meson.current_build_dir() / 'bill-of-materials.csv' - ], - depends: [ - bom, - ], -) diff --git a/web/layouts/baseof.html b/web/layouts/baseof.html index b52d039..96d8e07 100644 --- a/web/layouts/baseof.html +++ b/web/layouts/baseof.html @@ -3,7 +3,7 @@ - + {{ .Site.Title }} diff --git a/web/layouts/home.html b/web/layouts/home.html index dcd4a66..bf534cf 100644 --- a/web/layouts/home.html +++ b/web/layouts/home.html @@ -1,7 +1,7 @@ {{- define "main" -}}

{{ .Site.Title }}

{{- end -}} diff --git a/web/meson.build b/web/meson.build index 1c64394..1526621 100644 --- a/web/meson.build +++ b/web/meson.build @@ -1,12 +1,9 @@ -subdir('content') - website = custom_target('website', - output: ['public'], + output: ['index.html'], command: [ 'hugo', '--source', meson.current_source_dir(), - '--destination', meson.current_build_dir() / 'public', - '--contentDir', meson.current_build_dir() / 'content', + '--destination', meson.current_build_dir(), ], depend_files: [ 'hugo.toml', @@ -14,8 +11,10 @@ website = custom_target('website', 'layouts/home.html', ], depends: [ - schematic_web, - bom_web, + schematic, + bom, ], build_by_default: true, + install: true, + install_dir: 'website', ) -- cgit v1.2.3-70-g09d2 From 82fa02bcac5e278586cb2e3c9cc597699f6f640d Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 5 Apr 2025 11:10:12 +0200 Subject: fw: btl: Configure bootloader build with Meson CMake ExternalProject creates a pretty confusing build tree. Since the rest of the project anyway starts moving to Meson the bootloader is configured via Meson as a first step. --- fw/btl/configure.sh | 14 ++++++++++++++ fw/btl/meson.build | 16 ++++++++++++++++ fw/meson.build | 7 +++++++ fw/rtos/meson.build | 3 +++ fw/rtos/modules/meson.build | 8 ++++++++ meson.build | 1 + 6 files changed, 49 insertions(+) create mode 100755 fw/btl/configure.sh create mode 100644 fw/btl/meson.build create mode 100644 fw/meson.build create mode 100644 fw/rtos/meson.build create mode 100644 fw/rtos/modules/meson.build (limited to 'meson.build') diff --git a/fw/btl/configure.sh b/fw/btl/configure.sh new file mode 100755 index 0000000..87df3d2 --- /dev/null +++ b/fw/btl/configure.sh @@ -0,0 +1,14 @@ +#!/bin/sh + + +set -eufx + + +cmake \ + "-S$1" \ + "-B$2" \ + "-DBOARD=$3" \ + "-DZEPHYR_BASE=$4" \ + "-DZEPHYR_MODULES=${5}" \ + "-DEXTRA_CONF_FILE=${6}" \ + "-DCONFIG_BOOT_SIGNATURE_KEY_FILE=\"${7}\"" diff --git a/fw/btl/meson.build b/fw/btl/meson.build new file mode 100644 index 0000000..fd6562e --- /dev/null +++ b/fw/btl/meson.build @@ -0,0 +1,16 @@ +bootloader_config = meson.current_source_dir() / 'bootloader.conf' + +external_project = import('unstable-external_project') +bootloader_bin = meson.current_build_dir() / 'zephyr' / 'zephyr.bin' +bootloader_project = external_project.add_project('configure.sh', + configure_options: [ + bootloader_firmware, + meson.current_build_dir(), + board, + zephyr, + ';'.join(zephyr_modules), + bootloader_config, + signing_key, + ], + verbose: true, +) diff --git a/fw/meson.build b/fw/meson.build new file mode 100644 index 0000000..7f9bead --- /dev/null +++ b/fw/meson.build @@ -0,0 +1,7 @@ +board = 'nucleo_f767zi' + +fs = import('fs') +signing_key = fs.expanduser('~') / 'mcuboot' / 'key.pem' + +subdir('rtos') +subdir('btl') diff --git a/fw/rtos/meson.build b/fw/rtos/meson.build new file mode 100644 index 0000000..800153d --- /dev/null +++ b/fw/rtos/meson.build @@ -0,0 +1,3 @@ +subdir('modules') + +zephyr = meson.current_source_dir() / 'zephyr' diff --git a/fw/rtos/modules/meson.build b/fw/rtos/modules/meson.build new file mode 100644 index 0000000..52f50c2 --- /dev/null +++ b/fw/rtos/modules/meson.build @@ -0,0 +1,8 @@ +zephyr_modules = [ + meson.current_source_dir() / 'cmsis', + meson.current_source_dir() / 'hal_stm32', + meson.current_source_dir() / 'mbedtls', + meson.current_source_dir() / 'mcuboot', +] + +bootloader_firmware = meson.current_source_dir() / 'mcuboot' / 'boot' / 'zephyr' diff --git a/meson.build b/meson.build index 73206f4..9205388 100644 --- a/meson.build +++ b/meson.build @@ -8,5 +8,6 @@ css = fs.copyfile( install_dir: 'website/static', ) +subdir('fw') subdir('pcb') subdir('web') -- cgit v1.2.3-70-g09d2 From e78341079228b135bee65deb8e0d4e2b4385cf94 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sun, 6 Apr 2025 17:27:49 +0200 Subject: tools: Add directory and move scripts here This allows to re-use these scripts. Since they are currently used to build Zephyr builds and three are intended (application, bootloader and application as native_sim build) this makes sense. --- fw/btl/build.py | 29 ---- fw/btl/configure.py | 30 ---- fw/btl/meson.build | 5 +- meson.build | 4 + tools/LICENSE.txt | 373 ++++++++++++++++++++++++++++++++++++++++++++++ tools/build_zephyr.py | 34 +++++ tools/configure_zephyr.py | 35 +++++ 7 files changed, 449 insertions(+), 61 deletions(-) delete mode 100755 fw/btl/build.py delete mode 100755 fw/btl/configure.py create mode 100644 tools/LICENSE.txt create mode 100755 tools/build_zephyr.py create mode 100755 tools/configure_zephyr.py (limited to 'meson.build') diff --git a/fw/btl/build.py b/fw/btl/build.py deleted file mode 100755 index 6478701..0000000 --- a/fw/btl/build.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 - - -import multiprocessing -import shutil -import subprocess -import sys -import pathlib - - -build_tree = pathlib.Path(sys.argv[1]) -output_dir = build_tree.parent - - -subprocess.run( - [ - "make", - f"-j{multiprocessing.cpu_count()}", - "-C", - f"{str(build_tree)}", - ], - shell=False, - check=True, -) - -shutil.copy( - build_tree / "zephyr" / "zephyr.bin", - output_dir / "bootloader.bin" -) diff --git a/fw/btl/configure.py b/fw/btl/configure.py deleted file mode 100755 index a1f6e38..0000000 --- a/fw/btl/configure.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python3 - - -import subprocess -import sys - - -source_tree = sys.argv[1] -build_tree = sys.argv[2] -board = sys.argv[3] -zephyr_base = sys.argv[4] -zephyr_modules = sys.argv[5] -extra_conf_file = sys.argv[6] -signing_key_file = sys.argv[7] - - -subprocess.run( - [ - "cmake", - f"-S{source_tree}", - f"-B{build_tree}", - f"-DBOARD={board}", - f"-DZEPHYR_BASE={zephyr_base}", - f"-DZEPHYR_MODULES={zephyr_modules}", - f"-DEXTRA_CONF_FILE={extra_conf_file}", - f"-DCONFIG_BOOT_SIGNATURE_KEY_FILE=\"{signing_key_file}\"" - ], - shell=False, - check=True, -) diff --git a/fw/btl/meson.build b/fw/btl/meson.build index 37c8c25..ed40cd3 100644 --- a/fw/btl/meson.build +++ b/fw/btl/meson.build @@ -1,6 +1,7 @@ external_project = import('unstable-external_project') -bootloader_project = external_project.add_project('configure.py', +bootloader_project = external_project.add_project( + configure_zephyr, configure_options: [ bootloader_firmware, meson.current_build_dir() / 'build', @@ -16,7 +17,7 @@ bootloader_project = external_project.add_project('configure.py', bootloader = custom_target('bootloader', output: ['bootloader.bin'], command: [ - meson.current_source_dir() / 'build.py', + build_zephyr, meson.current_build_dir() / 'build', ], build_by_default: true, diff --git a/meson.build b/meson.build index 9205388..446fb29 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,9 @@ project('iot-contact') +tools = meson.current_source_dir() / 'tools' +configure_zephyr = tools / 'configure_zephyr.py' +build_zephyr = tools / 'build_zephyr.py' + fs = import('fs') css = fs.copyfile( meson.current_source_dir() / 'simple.css' / 'simple.css', diff --git a/tools/LICENSE.txt b/tools/LICENSE.txt new file mode 100644 index 0000000..d0a1fa1 --- /dev/null +++ b/tools/LICENSE.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/tools/build_zephyr.py b/tools/build_zephyr.py new file mode 100755 index 0000000..c99727e --- /dev/null +++ b/tools/build_zephyr.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + + +# This Source Code Form is subject to the terms of the Mozilla Public License, +# v. 2.0. If a copy of the MPL was not distributed with this file, You can +# obtain one at https://mozilla.org/MPL/2.0/. + + +import multiprocessing +import shutil +import subprocess +import sys +import pathlib + + +build_tree = pathlib.Path(sys.argv[1]) +output_dir = build_tree.parent + + +subprocess.run( + [ + "make", + f"-j{multiprocessing.cpu_count()}", + "-C", + f"{str(build_tree)}", + ], + shell=False, + check=True, +) + +shutil.copy( + build_tree / "zephyr" / "zephyr.bin", + output_dir / "bootloader.bin" +) diff --git a/tools/configure_zephyr.py b/tools/configure_zephyr.py new file mode 100755 index 0000000..fa1fc5d --- /dev/null +++ b/tools/configure_zephyr.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + + +# This Source Code Form is subject to the terms of the Mozilla Public License, +# v. 2.0. If a copy of the MPL was not distributed with this file, You can +# obtain one at https://mozilla.org/MPL/2.0/. + + +import subprocess +import sys + + +source_tree = sys.argv[1] +build_tree = sys.argv[2] +board = sys.argv[3] +zephyr_base = sys.argv[4] +zephyr_modules = sys.argv[5] +extra_conf_file = sys.argv[6] +signing_key_file = sys.argv[7] + + +subprocess.run( + [ + "cmake", + f"-S{source_tree}", + f"-B{build_tree}", + f"-DBOARD={board}", + f"-DZEPHYR_BASE={zephyr_base}", + f"-DZEPHYR_MODULES={zephyr_modules}", + f"-DEXTRA_CONF_FILE={extra_conf_file}", + f"-DCONFIG_BOOT_SIGNATURE_KEY_FILE=\"{signing_key_file}\"" + ], + shell=False, + check=True, +) -- cgit v1.2.3-70-g09d2 From d0215a2f9f01df704446cbc0ce289a75a623413d Mon Sep 17 00:00:00 2001 From: xengineering Date: Sun, 6 Apr 2025 19:30:52 +0200 Subject: tools: Add meson.build --- meson.build | 4 +--- tools/meson.build | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 tools/meson.build (limited to 'meson.build') diff --git a/meson.build b/meson.build index 446fb29..85faf87 100644 --- a/meson.build +++ b/meson.build @@ -1,8 +1,6 @@ project('iot-contact') -tools = meson.current_source_dir() / 'tools' -configure_zephyr = tools / 'configure_zephyr.py' -build_zephyr = tools / 'build_zephyr.py' +subdir('tools') fs = import('fs') css = fs.copyfile( diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 0000000..85ddbb3 --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,2 @@ +configure_zephyr = meson.current_source_dir() / 'configure_zephyr.py' +build_zephyr = meson.current_source_dir() / 'build_zephyr.py' -- cgit v1.2.3-70-g09d2