<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-dev/+/25233">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gen_makefile.py: drop argument for deps file<br><br>Rename 3G+2G.deps to all.deps and remove the parameter from<br>gen_makefile.py. Create new Makefile targets for the various use cases,<br>usually we build either 'cn-bsc' or 'usrp'. The next patch will add more<br>projects to all.deps.<br><br>This change brings the Makefile logic closer to how it is actually used,<br>one build directory that is building most Osmocom projects. New projects<br>can be added to all.deps on demand, but then we have it in the<br>repository and not just a local change that we add temporarily to the<br>3G+2G.deps file when we need to build a specific project.<br><br>Extend all.deps with projects needed by ttcn3.sh, so it doesn't need to<br>write its custom .deps file anymore.<br><br>Change-Id: I6394882f67eecda3d2c03a97d3119657f7d3873f<br>---<br>D 2G.deps<br>M README<br>R all.deps<br>M gen_makefile.py<br>M ttcn3/ttcn3.sh<br>5 files changed, 73 insertions(+), 62 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-dev refs/changes/33/25233/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/2G.deps b/2G.deps</span><br><span>deleted file mode 100644</span><br><span>index c090b6e..0000000</span><br><span>--- a/2G.deps</span><br><span>+++ /dev/null</span><br><span>@@ -1,18 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# project    build these first</span><br><span style="color: hsl(0, 100%, 40%);">-libosmocore</span><br><span style="color: hsl(0, 100%, 40%);">-libosmo-abis        libosmocore</span><br><span style="color: hsl(0, 100%, 40%);">-libosmo-netif        libosmo-abis</span><br><span style="color: hsl(0, 100%, 40%);">-libosmo-sccp        libosmo-netif</span><br><span style="color: hsl(0, 100%, 40%);">-libsmpp34</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-ggsn libosmocore</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-hlr     libosmo-abis</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-mgw    libosmo-netif</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-msc   libosmo-sccp osmo-mgw libsmpp34 osmo-hlr</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-bsc        libosmo-sccp osmo-mgw</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-sgsn  libosmo-sccp osmo-ggsn osmo-hlr</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-sip-connector       libosmocore</span><br><span style="color: hsl(0, 100%, 40%);">-osmo-smlc    libosmo-sccp</span><br><span style="color: hsl(0, 100%, 40%);">-# osmo-trx can build with --enable-sanitize, but then won't work reliably.</span><br><span style="color: hsl(0, 100%, 40%);">-# When omitting --enable-sanitize from osmo-trx only, its 'make check' will fail.</span><br><span style="color: hsl(0, 100%, 40%);">-# So if you want osmo-trx, uncomment and use no sanitize.opts, or use LD_PRELOAD for osmo-trx binaries.</span><br><span style="color: hsl(0, 100%, 40%);">-#osmo-trx     libosmocore</span><br><span>diff --git a/README b/README</span><br><span>index 7e34680..ac77424 100644</span><br><span>--- a/README</span><br><span>+++ b/README</span><br><span>@@ -15,7 +15,7 @@</span><br><span>   libdbd-sqlite3 libsqlite3-dev libpcap-dev libc-ares-dev libgnutls28-dev \</span><br><span>   libsctp-dev sqlite3</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-./gen_makefile.py 3G+2G.deps default.opts iu.opts -I -m make</span><br><span style="color: hsl(120, 100%, 40%);">+./gen_makefile.py default.opts iu.opts -I -m make</span><br><span> </span><br><span> cd make</span><br><span> make</span><br><span>@@ -40,29 +40,39 @@</span><br><span> The idea is to have all your Osmocom git clones in ./src, while keeping one or</span><br><span> more separate build trees in ./make-*.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Run ./gen_makefile.py with a choice of projects (2G only or also 3G?)</span><br><span style="color: hsl(0, 100%, 40%);">-and a choice of configure options.</span><br><span style="color: hsl(120, 100%, 40%);">+Run ./gen_makefile.py with a choice of choice of configure options.</span><br><span> </span><br><span> </span><br><span> Examples:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Full 2G and 3G support:</span><br><span style="color: hsl(120, 100%, 40%);">+CN with full 2G and 3G support:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  ./gen_makefile.py 3G+2G.deps default.opts iu.opts  -m make</span><br><span style="color: hsl(120, 100%, 40%);">+  ./gen_makefile.py default.opts iu.opts -m make</span><br><span>   cd make</span><br><span style="color: hsl(0, 100%, 40%);">-  make</span><br><span style="color: hsl(120, 100%, 40%);">+  make cn</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-2G only, and a custom dir name of 'make-2G':</span><br><span style="color: hsl(120, 100%, 40%);">+Other make targets exist for specific use cases:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  ./gen_makefile.py 2G.deps default.opts -m make-2G</span><br><span style="color: hsl(0, 100%, 40%);">-  cd make-2G</span><br><span style="color: hsl(0, 100%, 40%);">-  make</span><br><span style="color: hsl(120, 100%, 40%);">+  - 'usrp':</span><br><span style="color: hsl(120, 100%, 40%);">+    Build the CN, OsmoBSC, OsmoBTS and OsmoTRX (default, e.g. when connecting</span><br><span style="color: hsl(120, 100%, 40%);">+    to an USRP)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  - 'cn-bsc':</span><br><span style="color: hsl(120, 100%, 40%);">+    Build the CN and OsmoBSC (e.g. when connecting to an external sysmoBTS)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  - 'osmo-msc':</span><br><span style="color: hsl(120, 100%, 40%);">+    Build only the OsmoMSC project and its dependencies (this can be used for</span><br><span style="color: hsl(120, 100%, 40%);">+    any project in all.deps).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  - '.make.osmo-ttcn3-hacks.clone'</span><br><span style="color: hsl(120, 100%, 40%);">+    Clone the osmo-ttcn3-hacks git repository (it cannot be built by osmo-dev,</span><br><span style="color: hsl(120, 100%, 40%);">+    but cloning it is still useful.)</span><br><span> </span><br><span> If you make modifications in one of the source trees, this Makefile will pick</span><br><span style="color: hsl(0, 100%, 40%);">-it up, rebuild the project and also rebuild all dependencies (according to the</span><br><span style="color: hsl(0, 100%, 40%);">-*.deps file the Makefile was generated from).</span><br><span style="color: hsl(120, 100%, 40%);">+it up, rebuild the project and also rebuild all dependencies (according to</span><br><span style="color: hsl(120, 100%, 40%);">+all.deps).</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-If you modify the *.deps or *.opts file, you can easily run 'make regen' in a</span><br><span style="color: hsl(120, 100%, 40%);">+If you modify the all.deps or *.opts file, you can easily run 'make regen' in a</span><br><span> make-* subdir to regenerate the Makefile from the same files.</span><br><span> </span><br><span> In your make-* subdir there are empty status files that are touched for every</span><br><span>@@ -72,7 +82,7 @@</span><br><span> For example, if you 'rm .make.libosmocore.autoconf', libosmocore and all</span><br><span> projects depending on libosmocore will be rebuilt from scratch.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-For more details on the *.opts and *.deps syntax, read the docs at the top of</span><br><span style="color: hsl(120, 100%, 40%);">+For more details on the *.opts and all.deps syntax, read the docs at the top of</span><br><span> ./gen_makefile.py.</span><br><span> </span><br><span> It is also easily possible to keep sources and build trees in various</span><br><span>diff --git a/3G+2G.deps b/all.deps</span><br><span>similarity index 75%</span><br><span>rename from 3G+2G.deps</span><br><span>rename to all.deps</span><br><span>index b4372fd..26e0cf4 100644</span><br><span>--- a/3G+2G.deps</span><br><span>+++ b/all.deps</span><br><span>@@ -17,5 +17,10 @@</span><br><span> osmo-smlc    libosmo-sccp</span><br><span> # osmo-trx can build with --enable-sanitize, but then won't work reliably.</span><br><span> # When omitting --enable-sanitize from osmo-trx only, its 'make check' will fail.</span><br><span style="color: hsl(0, 100%, 40%);">-# So if you want osmo-trx, uncomment and use no sanitize.opts, or use LD_PRELOAD for osmo-trx binaries.</span><br><span style="color: hsl(0, 100%, 40%);">-#osmo-trx     libosmocore</span><br><span style="color: hsl(120, 100%, 40%);">+# So if you want osmo-trx, use no sanitize.opts, or use LD_PRELOAD for osmo-trx binaries.</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-trx        libosmocore</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-pcu   libosmocore</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# can only clone these</span><br><span style="color: hsl(120, 100%, 40%);">+docker-playground</span><br><span style="color: hsl(120, 100%, 40%);">+osmo-ttcn3-hacks</span><br><span>diff --git a/gen_makefile.py b/gen_makefile.py</span><br><span>index 81d41e7..8ed44f2 100755</span><br><span>--- a/gen_makefile.py</span><br><span>+++ b/gen_makefile.py</span><br><span>@@ -2,20 +2,19 @@</span><br><span> '''</span><br><span> Generate a top-level makefile that builds the Osmocom 2G + 3G network components.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  ./gen_makefile.py projects.deps [configure.opts [more.opts]] [-o Makefile.output]</span><br><span style="color: hsl(120, 100%, 40%);">+  ./gen_makefile.py [configure.opts [more.opts]] [-o Makefile.output]</span><br><span> </span><br><span> Configured by text files:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  *.deps: whitespace-separated listing of</span><br><span style="color: hsl(120, 100%, 40%);">+  all.deps: whitespace-separated listing of</span><br><span>     project_name depends_on_project_1 depends_on_project_2 ...</span><br><span> </span><br><span>   *.opts: whitespace-separated listing of</span><br><span>     project_name --config-opt-1 --config-opt-2 ...</span><br><span> </span><br><span> Thus it is possible to choose between e.g.</span><br><span style="color: hsl(0, 100%, 40%);">-- 2G+3G or 2G-only by picking a different projects_and_deps.conf,</span><br><span style="color: hsl(0, 100%, 40%);">-- and between building each of those with or without mgcp transcoding support</span><br><span style="color: hsl(0, 100%, 40%);">-  by picking a different configure_opts.conf.</span><br><span style="color: hsl(120, 100%, 40%);">+- building each of those with or without mgcp transcoding support by adding or</span><br><span style="color: hsl(120, 100%, 40%);">+  removing "transcoding.opts" from the command line</span><br><span> </span><br><span> From the Makefile nature, the dependencies extend, no need to repeat common deps.</span><br><span> </span><br><span>@@ -41,7 +40,7 @@</span><br><span> </span><br><span> EXAMPLE:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  ./gen_makefile.py 3G+2G.deps default.opts iu.opts -I -m build</span><br><span style="color: hsl(120, 100%, 40%);">+  ./gen_makefile.py default.opts iu.opts -I -m build</span><br><span>   cd build</span><br><span>   make</span><br><span> </span><br><span>@@ -51,12 +50,10 @@</span><br><span> import os</span><br><span> import argparse</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+topdir = os.path.dirname(os.path.realpath(__file__))</span><br><span style="color: hsl(120, 100%, 40%);">+all_deps_file = os.path.join(topdir, "all.deps")</span><br><span> parser = argparse.ArgumentParser(epilog=__doc__, formatter_class=argparse.RawTextHelpFormatter)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-parser.add_argument('projects_and_deps_file',</span><br><span style="color: hsl(0, 100%, 40%);">-  help='''Config file containing projects to build and</span><br><span style="color: hsl(0, 100%, 40%);">-dependencies between those''')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> parser.add_argument('configure_opts_files',</span><br><span>   help='''Config file containing project name and</span><br><span> ./configure options''',</span><br><span>@@ -64,7 +61,7 @@</span><br><span> </span><br><span> parser.add_argument('-m', '--make-dir', dest='make_dir',</span><br><span>   help='''Place Makefile in this dir (default: create</span><br><span style="color: hsl(0, 100%, 40%);">-a new dir named after deps and opts files).''')</span><br><span style="color: hsl(120, 100%, 40%);">+a new dir named after opts files).''')</span><br><span> </span><br><span> parser.add_argument('-s', '--src-dir', dest='src_dir', default='./src',</span><br><span>   help='Parent dir for all git clones.')</span><br><span>@@ -242,18 +239,20 @@</span><br><span>     )</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-projects_deps = read_projects_deps(args.projects_and_deps_file)</span><br><span style="color: hsl(120, 100%, 40%);">+projects_deps = read_projects_deps(all_deps_file)</span><br><span> configure_opts = listdict()</span><br><span> configure_opts_files = sorted(args.configure_opts_files or [])</span><br><span> for configure_opts_file in configure_opts_files:</span><br><span style="color: hsl(120, 100%, 40%);">+  if configure_opts_file.endswith(".deps"):</span><br><span style="color: hsl(120, 100%, 40%);">+    print(f"WARNING: using {all_deps_file} instead of {configure_opts_file}")</span><br><span style="color: hsl(120, 100%, 40%);">+    continue</span><br><span>   r = read_configure_opts(configure_opts_file)</span><br><span>   configure_opts.extend_dict(read_configure_opts(configure_opts_file))</span><br><span> </span><br><span> make_dir = args.make_dir</span><br><span> if not make_dir:</span><br><span style="color: hsl(0, 100%, 40%);">-  deps_name = args.projects_and_deps_file.replace('.deps', '')</span><br><span>   opts_names = '+'.join([f.replace('.opts', '') for f in configure_opts_files])</span><br><span style="color: hsl(0, 100%, 40%);">-  make_dir = 'make-%s-%s' % (deps_name, opts_names)</span><br><span style="color: hsl(120, 100%, 40%);">+  make_dir = 'make-3G+2G-%s' % opts_names</span><br><span> </span><br><span> if not os.path.isdir(make_dir):</span><br><span>   os.makedirs(make_dir)</span><br><span>@@ -268,9 +267,36 @@</span><br><span> with open(output, 'w') as out:</span><br><span>   out.write('# This Makefile was generated by %s\n' % os.path.basename(sys.argv[0]))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  configure_opts_args = ""</span><br><span style="color: hsl(120, 100%, 40%);">+  for f in configure_opts_files:</span><br><span style="color: hsl(120, 100%, 40%);">+    if not f.endswith(".deps"):</span><br><span style="color: hsl(120, 100%, 40%);">+      configure_opts_args += f' \\\n\t\t{os.path.relpath(f, make_dir)}'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   # convenience: add a regen target that updates the generated makefile itself</span><br><span>   out.write(r'''</span><br><span style="color: hsl(0, 100%, 40%);">-default: all</span><br><span style="color: hsl(120, 100%, 40%);">+default: usrp</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+cn: \</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo-ggsn \</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo-hlr \</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo-iuh \</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo-mgw \</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo-msc \</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo-sgsn \</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo-sip-connector \</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo-smlc \</span><br><span style="color: hsl(120, 100%, 40%);">+   $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+cn-bsc: \</span><br><span style="color: hsl(120, 100%, 40%);">+  cn \</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo-bsc \</span><br><span style="color: hsl(120, 100%, 40%);">+    $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+usrp: \</span><br><span style="color: hsl(120, 100%, 40%);">+    cn-bsc \</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo-bts \</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo-trx \</span><br><span style="color: hsl(120, 100%, 40%);">+    $(NULL)</span><br><span> </span><br><span> .PHONY: all_debug</span><br><span> all_debug:</span><br><span>@@ -281,7 +307,6 @@</span><br><span> .PHONY: regen</span><br><span> regen:</span><br><span>      {script} \</span><br><span style="color: hsl(0, 100%, 40%);">-              {projects_and_deps} \</span><br><span>                {configure_opts} \</span><br><span>           -m {make_dir} \</span><br><span>              -o {makefile} \</span><br><span>@@ -291,8 +316,7 @@</span><br><span> </span><br><span> '''.format(</span><br><span>     script=os.path.relpath(sys.argv[0], make_dir),</span><br><span style="color: hsl(0, 100%, 40%);">-    projects_and_deps=os.path.relpath(args.projects_and_deps_file, make_dir),</span><br><span style="color: hsl(0, 100%, 40%);">-    configure_opts=' \\\n\t\t'.join([os.path.relpath(f, make_dir) for f in configure_opts_files]),</span><br><span style="color: hsl(120, 100%, 40%);">+    configure_opts=configure_opts_args,</span><br><span>     make_dir='.',</span><br><span>     makefile=args.output,</span><br><span>     src_dir=os.path.relpath(args.src_dir, make_dir),</span><br><span>diff --git a/ttcn3/ttcn3.sh b/ttcn3/ttcn3.sh</span><br><span>index 72a258c..657c8dc 100755</span><br><span>--- a/ttcn3/ttcn3.sh</span><br><span>+++ b/ttcn3/ttcn3.sh</span><br><span>@@ -95,20 +95,10 @@</span><br><span> setup_dir_make() {</span><br><span>        cd "$DIR_OSMODEV"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- ( echo "# Generated by ttcn3.sh, do not edit"</span><br><span style="color: hsl(0, 100%, 40%);">-   cat ./3G+2G.deps</span><br><span style="color: hsl(0, 100%, 40%);">-        echo</span><br><span style="color: hsl(0, 100%, 40%);">-    echo "osmo-bts   libosmocore libosmo-abis"</span><br><span style="color: hsl(0, 100%, 40%);">-    echo "osmo-pcu   libosmocore"</span><br><span style="color: hsl(0, 100%, 40%);">-         # just clone these, building is handled by ttcn3.sh</span><br><span style="color: hsl(0, 100%, 40%);">-     echo "docker-playground"</span><br><span style="color: hsl(0, 100%, 40%);">-      echo "osmo-ttcn3-hacks" ) > ttcn3/3G+2G_ttcn3.deps</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    local docker_cmd="$DIR_OSMODEV/ttcn3/scripts/docker_configure_make.sh"</span><br><span>     docker_cmd="$docker_cmd $USER/$DOCKER_IMG_BUILD"</span><br><span> </span><br><span>       ./gen_makefile.py \</span><br><span style="color: hsl(0, 100%, 40%);">-             ttcn3/3G+2G_ttcn3.deps \</span><br><span>             default.opts \</span><br><span>               iu.opts \</span><br><span>            no_systemd.opts \</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-dev/+/25233">change 25233</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-dev/+/25233"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-dev </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6394882f67eecda3d2c03a97d3119657f7d3873f </div>
<div style="display:none"> Gerrit-Change-Number: 25233 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>