| 1 | # | 
|---|
| 2 | # Copyright (c) 2019 Jiří Zárevúcky | 
|---|
| 3 | # All rights reserved. | 
|---|
| 4 | # | 
|---|
| 5 | # Redistribution and use in source and binary forms, with or without | 
|---|
| 6 | # modification, are permitted provided that the following conditions | 
|---|
| 7 | # are met: | 
|---|
| 8 | # | 
|---|
| 9 | # - Redistributions of source code must retain the above copyright | 
|---|
| 10 | #   notice, this list of conditions and the following disclaimer. | 
|---|
| 11 | # - Redistributions in binary form must reproduce the above copyright | 
|---|
| 12 | #   notice, this list of conditions and the following disclaimer in the | 
|---|
| 13 | #   documentation and/or other materials provided with the distribution. | 
|---|
| 14 | # - The name of the author may not be used to endorse or promote products | 
|---|
| 15 | #   derived from this software without specific prior written permission. | 
|---|
| 16 | # | 
|---|
| 17 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | 
|---|
| 18 | # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | 
|---|
| 19 | # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | 
|---|
| 20 | # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | 
|---|
| 21 | # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | 
|---|
| 22 | # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
|---|
| 23 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
|---|
| 24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|---|
| 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 
|---|
| 26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|---|
| 27 | # | 
|---|
| 28 |  | 
|---|
| 29 | # TODO: Use vcs_tag() to generate version string | 
|---|
| 30 | # TODO: jobfile | 
|---|
| 31 | # TODO: lto in uspace | 
|---|
| 32 | # TODO: fix clang build | 
|---|
| 33 |  | 
|---|
| 34 | project( | 
|---|
| 35 | 'HelenOS', | 
|---|
| 36 | [ 'c', 'cpp' ], | 
|---|
| 37 | default_options : ['buildtype=plain', 'c_std=gnu11', 'cpp_std=c++17', 'warning_level=2', 'werror=false', 'b_staticpic=false', 'prefix=/' ], | 
|---|
| 38 | meson_version: '>=0.50.1', | 
|---|
| 39 | ) | 
|---|
| 40 |  | 
|---|
| 41 | debug_options = false | 
|---|
| 42 | debug_shell_scripts = false | 
|---|
| 43 |  | 
|---|
| 44 | subdir('meson/part/tools') | 
|---|
| 45 | subdir('meson/part/read_config') | 
|---|
| 46 | subdir('meson/part/compiler_args') | 
|---|
| 47 | subdir('meson/part/initrd_manifest') | 
|---|
| 48 | subdir('meson' / 'arch' / UARCH) | 
|---|
| 49 |  | 
|---|
| 50 | ## The at-sign | 
|---|
| 51 | # | 
|---|
| 52 | # The `atsign` variable holds the ASCII character representing the at-sign | 
|---|
| 53 | # ('@') used in various $(AS) constructs (e.g. @progbits). On architectures that | 
|---|
| 54 | # don't use '@' for starting a comment, `atsign` is merely '@'. However, on | 
|---|
| 55 | # those that do use it for starting a comment (e.g. arm32), `atsign` must be | 
|---|
| 56 | # defined as the percentile-sign ('%') in the architecture-dependent files. | 
|---|
| 57 | # | 
|---|
| 58 | if not is_variable('atsign') | 
|---|
| 59 | atsign = '@' | 
|---|
| 60 | endif | 
|---|
| 61 |  | 
|---|
| 62 | ## Some architectures need a particular string at the beginning of assembly files. | 
|---|
| 63 | if not is_variable('kernel_as_prolog') | 
|---|
| 64 | kernel_as_prolog = '' | 
|---|
| 65 | endif | 
|---|
| 66 | if not is_variable('uspace_as_prolog') | 
|---|
| 67 | uspace_as_prolog = '' | 
|---|
| 68 | endif | 
|---|
| 69 |  | 
|---|
| 70 | # The following variables are filled in by code in the kernel and uspace subdirs. | 
|---|
| 71 |  | 
|---|
| 72 | # References to the actual binary artefacts that will be part of initrd image. | 
|---|
| 73 | rd_init_binaries = [] | 
|---|
| 74 | # Installed files. | 
|---|
| 75 | install_files = [] | 
|---|
| 76 | install_deps = [] | 
|---|
| 77 | # Install script for headers. | 
|---|
| 78 | # TODO: Make a list of directories and turn into script later. | 
|---|
| 79 | uspace_lib_install_script_text = [] | 
|---|
| 80 |  | 
|---|
| 81 | subdir('kernel') | 
|---|
| 82 | subdir('uspace') | 
|---|
| 83 |  | 
|---|
| 84 | subdir('meson/part/exports') | 
|---|
| 85 | subdir('meson/part/initrd') | 
|---|
| 86 |  | 
|---|
| 87 | subdir('boot') | 
|---|
| 88 |  | 
|---|
| 89 | # Copy the final image to the build root, | 
|---|
| 90 | # and write its name to a text file `image_path`. | 
|---|
| 91 |  | 
|---|
| 92 | if is_variable('POST_INPUT') | 
|---|
| 93 | image = custom_target(POST_OUTPUT, | 
|---|
| 94 | output: POST_OUTPUT, | 
|---|
| 95 | input: POST_INPUT, | 
|---|
| 96 | command: [ cp, '@INPUT@', '@OUTPUT@' ], | 
|---|
| 97 | ) | 
|---|
| 98 |  | 
|---|
| 99 | custom_target('image_path', | 
|---|
| 100 | output: 'image_path', | 
|---|
| 101 | input: image, | 
|---|
| 102 | command: [ 'echo', '@INPUT@' ], | 
|---|
| 103 | capture: true, | 
|---|
| 104 | ) | 
|---|
| 105 | else | 
|---|
| 106 | custom_target('image_path', | 
|---|
| 107 | output: 'image_path', | 
|---|
| 108 | command: [ 'echo' ], | 
|---|
| 109 | capture: true, | 
|---|
| 110 | ) | 
|---|
| 111 | endif | 
|---|
| 112 |  | 
|---|
| 113 | subdir('meson/part/extra_targets') | 
|---|