Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 1 | PROFILES ?= all |
| 2 | ONOS_HOST ?= localhost |
| 3 | |
| 4 | mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) |
| 5 | curr_dir := $(patsubst %/,%,$(dir $(mkfile_path))) |
| 6 | curr_dir_sha := $(shell echo -n "$(curr_dir)" | shasum | cut -c1-7) |
| 7 | |
| 8 | mvn_image := maven:3.6.1-jdk-11-slim |
| 9 | mvn_container := mvn-build-${curr_dir_sha} |
| 10 | |
| 11 | onos_url := http://${ONOS_HOST}:8181/onos |
| 12 | onos_curl := curl --fail -sSL --user onos:rocks --noproxy localhost |
| 13 | |
| 14 | pipeconf_app_name := org.opencord.fabric-tofino |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 15 | |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 16 | p4-build := ./src/main/p4/build.sh |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 17 | |
| 18 | .PHONY: pipeconf |
| 19 | |
Carmelo Cascone | 21e72a2 | 2019-12-18 10:01:08 -0800 | [diff] [blame^] | 20 | build: clean $(PROFILES) pipeconf p4-changelog |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 21 | |
| 22 | all: fabric fabric-bng fabric-spgw fabric-int fabric-spgw-int |
| 23 | |
| 24 | fabric: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 25 | @${p4-build} fabric "" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 26 | |
| 27 | fabric-simple: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 28 | @${p4-build} fabric-simple "-DWITH_SIMPLE_NEXT" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 29 | |
| 30 | fabric-bng: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 31 | @${p4-build} fabric-bng "-DWITH_BNG -DWITH_DOUBLE_VLAN_TERMINATION -DWITHOUT_XCONNECT" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 32 | |
| 33 | fabric-int: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 34 | @${p4-build} fabric-int "-DWITH_INT_SOURCE -DWITH_INT_TRANSIT" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 35 | |
| 36 | fabric-spgw: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 37 | @${p4-build} fabric-spgw "-DWITH_SPGW" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 38 | |
| 39 | fabric-spgw-int: |
Carmelo Cascone | 91d92fb | 2019-12-16 18:34:26 -0800 | [diff] [blame] | 40 | @${p4-build} fabric-spgw-int "-DWITH_SPGW -DWITH_INT_SOURCE -DWITH_INT_TRANSIT" |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 41 | |
Carmelo Cascone | 21e72a2 | 2019-12-18 10:01:08 -0800 | [diff] [blame^] | 42 | p4-changelog: |
| 43 | ./src/main/p4/gen_changelog.sh > P4_CHANGELOG |
| 44 | |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 45 | # Reuse the same container to persist mvn repo cache. |
| 46 | _create_mvn_container: |
| 47 | @if ! docker container ls -a --format '{{.Names}}' | grep -q ${mvn_container} ; then \ |
| 48 | docker create -v ${curr_dir}:/mvn-src -w /mvn-src --name ${mvn_container} ${mvn_image} mvn clean package verify; \ |
| 49 | fi |
| 50 | |
| 51 | _mvn_package: |
| 52 | $(info *** Building ONOS app...) |
| 53 | @mkdir -p target |
| 54 | @docker start -a -i ${mvn_container} |
| 55 | |
| 56 | pipeconf: _create_mvn_container _mvn_package |
| 57 | $(info *** ONOS pipeconf .oar package created succesfully) |
| 58 | @ls -1 ${curr_dir}/target/*.oar |
| 59 | |
| 60 | pipeconf-install: |
| 61 | $(info *** Installing and activating pipeconf app in ONOS at ${ONOS_HOST}...) |
| 62 | ${onos_curl} -X POST -HContent-Type:application/octet-stream \ |
| 63 | '${onos_url}/v1/applications?activate=true' \ |
Carmelo Cascone | 21e72a2 | 2019-12-18 10:01:08 -0800 | [diff] [blame^] | 64 | --data-binary @target/fabric-tofino-*.oar |
Carmelo Cascone | 97efefb | 2019-12-05 16:40:45 -0800 | [diff] [blame] | 65 | @echo |
| 66 | |
| 67 | pipeconf-uninstall: |
| 68 | $(info *** Uninstalling pipeconf app from ONOS (if present) at ${ONOS_HOST}...) |
| 69 | -${onos_curl} -X DELETE ${onos_url}/v1/applications/${pipeconf_app_name} |
| 70 | @echo |
| 71 | |
| 72 | netcfg: |
| 73 | $(info *** Pushing tofino-netcfg.json to ONOS at ${ONOS_HOST}...) |
| 74 | ${onos_curl} -X POST -H 'Content-Type:application/json' \ |
| 75 | ${onos_url}/v1/network/configuration -d@./tofino-netcfg.json |
| 76 | @echo |
| 77 | |
| 78 | clean: |
| 79 | -rm -rf src/main/resources/p4c-out |
| 80 | |
| 81 | deep-clean: clean |
| 82 | -rm -rf target |
| 83 | -rm -rf p4c-out |
| 84 | -docker rm ${mvn_container} > /dev/null 2>&1 |