blob: 89b60a0f62a263eeed80e8e3603fcfc716ec0dc1 [file] [log] [blame]
Carmelo Cascone97efefb2019-12-05 16:40:45 -08001PROFILES ?= all
2ONOS_HOST ?= localhost
3
4mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
5curr_dir := $(patsubst %/,%,$(dir $(mkfile_path)))
6curr_dir_sha := $(shell echo -n "$(curr_dir)" | shasum | cut -c1-7)
7
8mvn_image := maven:3.6.1-jdk-11-slim
9mvn_container := mvn-build-${curr_dir_sha}
10
11onos_url := http://${ONOS_HOST}:8181/onos
12onos_curl := curl --fail -sSL --user onos:rocks --noproxy localhost
13
14pipeconf_app_name := org.opencord.fabric-tofino
Yi Tsengc3e2d4b2020-01-31 16:19:52 -080015pipeconf_oar_file := $(shell ls -1 ${curr_dir}/target/fabric-tofino-*.oar)
Carmelo Cascone97efefb2019-12-05 16:40:45 -080016
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080017p4-build := ./src/main/p4/build.sh
Carmelo Cascone97efefb2019-12-05 16:40:45 -080018
19.PHONY: pipeconf
20
Carmelo Cascone21e72a22019-12-18 10:01:08 -080021build: clean $(PROFILES) pipeconf p4-changelog
Carmelo Cascone97efefb2019-12-05 16:40:45 -080022
23all: fabric fabric-bng fabric-spgw fabric-int fabric-spgw-int
24
25fabric:
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080026 @${p4-build} fabric ""
Carmelo Cascone97efefb2019-12-05 16:40:45 -080027
28fabric-simple:
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080029 @${p4-build} fabric-simple "-DWITH_SIMPLE_NEXT"
Carmelo Cascone97efefb2019-12-05 16:40:45 -080030
31fabric-bng:
Daniele Moro8de7a8d2020-01-30 17:05:37 -080032 @${p4-build} fabric-bng "-DWITH_BNG -DWITHOUT_XCONNECT"
Carmelo Cascone97efefb2019-12-05 16:40:45 -080033
34fabric-int:
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080035 @${p4-build} fabric-int "-DWITH_INT_SOURCE -DWITH_INT_TRANSIT"
Carmelo Cascone97efefb2019-12-05 16:40:45 -080036
37fabric-spgw:
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080038 @${p4-build} fabric-spgw "-DWITH_SPGW"
Carmelo Cascone97efefb2019-12-05 16:40:45 -080039
40fabric-spgw-int:
Carmelo Cascone91d92fb2019-12-16 18:34:26 -080041 @${p4-build} fabric-spgw-int "-DWITH_SPGW -DWITH_INT_SOURCE -DWITH_INT_TRANSIT"
Carmelo Cascone97efefb2019-12-05 16:40:45 -080042
Carmelo Cascone21e72a22019-12-18 10:01:08 -080043p4-changelog:
44 ./src/main/p4/gen_changelog.sh > P4_CHANGELOG
45
Carmelo Cascone97efefb2019-12-05 16:40:45 -080046# Reuse the same container to persist mvn repo cache.
47_create_mvn_container:
48 @if ! docker container ls -a --format '{{.Names}}' | grep -q ${mvn_container} ; then \
49 docker create -v ${curr_dir}:/mvn-src -w /mvn-src --name ${mvn_container} ${mvn_image} mvn clean package verify; \
50 fi
51
52_mvn_package:
53 $(info *** Building ONOS app...)
54 @mkdir -p target
55 @docker start -a -i ${mvn_container}
56
57pipeconf: _create_mvn_container _mvn_package
58 $(info *** ONOS pipeconf .oar package created succesfully)
59 @ls -1 ${curr_dir}/target/*.oar
60
61pipeconf-install:
62 $(info *** Installing and activating pipeconf app in ONOS at ${ONOS_HOST}...)
63 ${onos_curl} -X POST -HContent-Type:application/octet-stream \
64 '${onos_url}/v1/applications?activate=true' \
Yi Tsengc3e2d4b2020-01-31 16:19:52 -080065 --data-binary @${pipeconf_oar_file}
Carmelo Cascone97efefb2019-12-05 16:40:45 -080066 @echo
67
68pipeconf-uninstall:
69 $(info *** Uninstalling pipeconf app from ONOS (if present) at ${ONOS_HOST}...)
70 -${onos_curl} -X DELETE ${onos_url}/v1/applications/${pipeconf_app_name}
71 @echo
72
73netcfg:
74 $(info *** Pushing tofino-netcfg.json to ONOS at ${ONOS_HOST}...)
75 ${onos_curl} -X POST -H 'Content-Type:application/json' \
76 ${onos_url}/v1/network/configuration -d@./tofino-netcfg.json
77 @echo
78
79clean:
80 -rm -rf src/main/resources/p4c-out
81
82deep-clean: clean
83 -rm -rf target
84 -rm -rf p4c-out
85 -docker rm ${mvn_container} > /dev/null 2>&1