Skip to content

Commit

Permalink
Merge pull request #18 from project-arlo/brcm_poc
Browse files Browse the repository at this point in the history
Merge latest BRCM changes to master
  • Loading branch information
joyas-joseph authored Jul 9, 2019
2 parents 2964180 + 25e6c3f commit 0f1e1d9
Show file tree
Hide file tree
Showing 27 changed files with 2,758 additions and 4,363 deletions.
55 changes: 20 additions & 35 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ ifeq ($(GOPATH),)
export GOPATH=/tmp/go
endif

GO := /usr/local/go/bin/go
export GO

INSTALL := /usr/bin/install

MAIN_TARGET = sonic-mgmt-framework_1.0-01_amd64.deb
Expand All @@ -21,19 +24,14 @@ GO_DEPS_LIST = github.com/gorilla/mux \
github.com/openconfig/ygot/ygot \
github.com/go-redis/redis \
github.com/golang/glog \
github.com/pkg/profile \
gopkg.in/go-playground/validator.v9


APT_DEPS_LIST = default-jre-headless \
libxml2-dev \
libxslt-dev

PIP_DEPS_LIST = pyang pyyaml
PIP2_DEPS_LIST = connexion python_dateutil certifi six urllib3
PIP2_DEPS_LIST = connexion python_dateutil certifi

TOPDIR := $(abspath .)
BUILD_DIR := $(TOPDIR)/build
REST_DIST_DIR := $(BUILD_DIR)/rest_server/dist

export TOPDIR
# Source files affecting REST server
Expand All @@ -47,62 +45,51 @@ REST_GOPATH = $(GOPATH):$(CVL_GOPATH):$(TOPDIR):$(REST_DIST_DIR)

#$(info REST_SRCS = $(REST_SRCS) )

all: build-deps apt-deps pip-deps pip2-deps cli go-deps go-patch rest-server
all: build-deps pip2-deps cli go-deps go-patch rest-server

build-deps:
mkdir -p $(BUILD_DIR)

go-deps: $(GO_DEPS_LIST)
apt-deps: $(APT_DEPS_LIST)
pip-deps: $(PIP_DEPS_LIST)
pip2-deps: $(PIP2_DEPS_LIST)

$(GO_DEPS_LIST):
/usr/local/go/bin/go get -v $@
/usr/local/go/bin/go get -v $@

$(APT_DEPS_LIST):
sudo apt-get install -y $@


$(PIP_DEPS_LIST):
sudo pip3 install $@
$(GO) get -v $@

$(PIP2_DEPS_LIST):
sudo pip install $@

rest-server: $(REST_BIN)

cli:
$(MAKE) -C src/CLI

yamlGen:
$(MAKE) -C models/yang

$(REST_BIN): $(REST_SRCS)
cvl:
$(MAKE) -C src/cvl
$(MAKE) -C src/cvl/schema

REST_PREREQ := cvl
GOPATH := $(GOPATH):$(CVL_GOPATH)
include src/rest/Makefile

rest-server: $(REST_BIN)

yamlGen:
$(MAKE) -C models/yang
$(MAKE) -C models
GOPATH=$(REST_GOPATH) /usr/local/go/bin/go build -o $@ $(TOPDIR)/src/rest/main/main.go


codegen:
$(MAKE) -C models

go-patch:
cp $(TOPDIR)/ygot-modified-files/* /tmp/go/src/github.com/openconfig/ygot/ytypes/
/usr/local/go/bin/go install -v -gcflags "-N -l" /tmp/go/src/github.com/openconfig/ygot/ygot
$(GO) install -v -gcflags "-N -l" /tmp/go/src/github.com/openconfig/ygot/ygot


install:
$(INSTALL) -D $(TOPDIR)/build/rest_server/dist/main $(DESTDIR)/usr/sbin/rest_server
$(INSTALL) -D $(REST_BIN) $(DESTDIR)/usr/sbin/rest_server
$(INSTALL) -D $(CERTGEN_BIN) $(DESTDIR)/usr/sbin/generate_cert
$(INSTALL) -d $(DESTDIR)/usr/sbin/schema/
$(INSTALL) -d $(DESTDIR)/usr/sbin/lib/
$(INSTALL) -D $(TOPDIR)/src/cvl/schema/*.yin $(DESTDIR)/usr/sbin/schema/
$(INSTALL) -T $(TOPDIR)/src/cvl/build/pcre-8.43/install/lib/libpcre.so.1.2.11 $(DESTDIR)/usr/sbin/lib/libpcre.so.1
$(INSTALL) -T $(TOPDIR)/src/cvl/build/libyang/build/libyang.so.1.1.* $(DESTDIR)/usr/sbin/lib/libyang.so.1
$(INSTALL) -D $(TOPDIR)/src/cvl/build/libyang/build/extensions/*.so $(DESTDIR)/usr/sbin/lib/
$(INSTALL) -D $(TOPDIR)/src/cvl/build/libyang/build/user_types/*.so $(DESTDIR)/usr/sbin/lib/
cp -rf $(TOPDIR)/build/rest_server/dist/ui/ $(DESTDIR)/rest_ui/
cp -rf $(TOPDIR)/build/cli $(DESTDIR)/usr/sbin/
cp -rf $(TOPDIR)/build/swagger_client_py/ $(DESTDIR)/usr/sbin/lib/
Expand All @@ -114,8 +101,6 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
clean:
$(MAKE) -C src/cvl clean
$(MAKE) -C src/cvl/schema clean
$(MAKE) -C models clean
$(MAKE) -C models/yang clean
$(MAKE) -C src/CLI clean
$(MAKE) -C src/cvl cleanall
rm -rf build
Expand Down
43 changes: 37 additions & 6 deletions go_server.sh
Original file line number Diff line number Diff line change
@@ -1,22 +1,53 @@
#!/bin/bash
#!/usr/bin/env bash

set -e

TOPDIR=$PWD
SERVER_DIR=$TOPDIR/build/rest_server/dist
CVLDIR=$TOPDIR/src/cvl

cd $SERVER_DIR

# LD_LIBRARY_PATH for CVL
[ -z $LD_LIBRARY_PATH ] && LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CVLDIR/build/pcre-8.43/install/lib:$CVLDIR/build/libyang/build/lib64

# Setup CVL schema directory
if [ ! -d schema ]; then
ln -s $CVLDIR/schema schema
if [ -z $CVL_SCHEMA_PATH ]; then
export CVL_SCHEMA_PATH=$CVLDIR/schema
fi

echo "CVL schema directory is $CVL_SCHEMA_PATH"
if [ $(find $CVL_SCHEMA_PATH -name *.yin | wc -l) == 0 ]; then
echo "WARNING: no yin files at $CVL_SCHEMA_PATH"
echo ""
fi

EXTRA_ARGS="-ui $SERVER_DIR/ui -logtostderr"
HAS_CRTFILE=
HAS_KEYFILE=

for V in $@; do
case $V in
-cert|--cert|-cert=*|--cert=*) HAS_CRTFILE=1;;
-key|--key|-key=*|--key=*) HAS_KEYFILE=1;;
esac
done

cd $SERVER_DIR

##
# Setup TLS server cert/key pair
if [ -z $HAS_CRTFILE ] && [ -z $HAS_KEYFILE ]; then
if [ -f cert.pem ] && [ -f key.pem ]; then
echo "Reusing existing cert.pem and key.pem ..."
else
echo "Generating temporary server certificate ..."
./generate_cert --host localhost
fi

EXTRA_ARGS+=" -cert cert.pem -key key.pem"
fi

##
# Start server
./main -ui $SERVER_DIR/ui -logtostderr $*
./main $EXTRA_ARGS $*

56 changes: 36 additions & 20 deletions models/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ SERVER_DIST_INIT := $(SERVER_DIST_DIR)/.init_done
SERVER_DIST_GO := $(SERVER_DIST_DIR)/src/swagger
SERVER_DIST_UI := $(SERVER_DIST_DIR)/ui

PY_CLIENT_CODEGEN_DIR := $(BUILD_DIR)/swagger_client_py

YANGAPI_DIR := $(TOPDIR)/build/yaml
YANGAPI_SPECS := $(shell find $(YANGAPI_DIR) -name '*.yaml' | sort)
YANGAPI_NAMES := $(basename $(notdir $(YANGAPI_SPECS)))
Expand All @@ -32,13 +30,18 @@ OPENAPI_SPECS := $(shell find $(OPENAPI_DIR) -name '*.yaml' | sort)
OPENAPI_NAMES := $(basename $(notdir $(OPENAPI_SPECS)))
OPENAPI_SERVERS := $(addsuffix /.openapi_done, $(addprefix $(SERVER_CODEGEN_DIR)/, $(OPENAPI_NAMES)))

PY_CLIENT_CODEGEN_DIR := $(BUILD_DIR)/swagger_client_py
PY_CLIENT_TARGETS := $(addsuffix .yangapi_client, $(addprefix $(PY_CLIENT_CODEGEN_DIR)/, $(YANGAPI_NAMES))) \
$(addsuffix .openapi_client, $(addprefix $(PY_CLIENT_CODEGEN_DIR)/, $(OPENAPI_NAMES)))


.PHONY: all clean cleanall go-server py-client

all: go-server py-client

go-server: $(YANGAPI_SERVERS) $(OPENAPI_SERVERS) $(SERVER_DIST_INIT)

py-client: $(PY_CLIENT_CODEGEN_DIR)/.done
py-client: $(PY_CLIENT_TARGETS)


.SECONDEXPANSION:
Expand All @@ -62,33 +65,31 @@ $(CODEGEN_JAR): | $$(@D)/.
# Generate swagger server in GO language for Yang generated OpenAPIs
# specs.
#======================================================================
%/.yangapi_done: $(YANGAPI_SPECS) | $$(@D)/. $(CODEGEN_JAR) $(SERVER_DIST_INIT)
%/.yangapi_done: $(YANGAPI_DIR)/$$(*F).yaml | $$(@D)/. $(CODEGEN_JAR) $(SERVER_DIST_INIT)
@echo "+++ Generating GO server for Yang API $$(basename $(@D)).yaml +++"
java -jar $(CODEGEN_JAR) generate \
--lang go-server \
--input-spec $(YANGAPI_DIR)/$$(basename $(@D)).yaml \
--template-dir $(CODEGEN_TOOLS_DIR)/go-server/templates-yang \
--output $(@D)
mv $(@D)/go/api_* $(SERVER_DIST_GO)/
mv $(@D)/go/routers.go $(SERVER_DIST_GO)/routers_$$(basename $(@D)).go
mv $(@D)/api/swagger.yaml $(SERVER_DIST_UI)/$$(basename $(@D)).yaml
rm -rf $(@D)/*
cp $(@D)/go/api_* $(SERVER_DIST_GO)/
cp $(@D)/go/routers.go $(SERVER_DIST_GO)/routers_$$(basename $(@D)).go
cp $(@D)/api/swagger.yaml $(SERVER_DIST_UI)/$$(basename $(@D)).yaml
touch $@

#======================================================================
# Generate swagger server in GO language for handcoded OpenAPI specs
#======================================================================
%/.openapi_done: $(OPENAPI_SPECS) | $$(@D)/. $(CODEGEN_JAR) $(SERVER_DIST_INIT)
%/.openapi_done: $(OPENAPI_DIR)/$$(*F).yaml | $$(@D)/. $(CODEGEN_JAR) $(SERVER_DIST_INIT)
@echo "+++ Generating GO server for OpenAPI $$(basename $(@D)).yaml +++"
java -jar $(CODEGEN_JAR) generate \
--lang go-server \
--input-spec $(OPENAPI_DIR)/$$(basename $(@D)).yaml \
--template-dir $(CODEGEN_TOOLS_DIR)/go-server/templates-nonyang \
--output $(@D)
mv $(@D)/go/api_* $(@D)/go/model_* $(SERVER_DIST_GO)/
mv $(@D)/go/routers.go $(SERVER_DIST_GO)/routers_$$(basename $(@D)).go
mv $(@D)/api/swagger.yaml $(SERVER_DIST_UI)/$$(basename $(@D)).yaml
rm -rf $(@D)/*
cp $(@D)/go/api_* $(@D)/go/model_* $(SERVER_DIST_GO)/
cp $(@D)/go/routers.go $(SERVER_DIST_GO)/routers_$$(basename $(@D)).go
cp $(@D)/api/swagger.yaml $(SERVER_DIST_UI)/$$(basename $(@D)).yaml
touch $@

#======================================================================
Expand All @@ -100,26 +101,41 @@ $(SERVER_DIST_INIT): | $$(@D)/.
touch $@

#======================================================================
# Generate swagger client in Python.
# FIXME generating only for openconfig-acl.yaml for now
# Generate swagger client in Python for yang generated OpenAPI specs
#======================================================================
%.yangapi_client: $(YANGAPI_DIR)/$$(*F).yaml | $(CODEGEN_JAR) $$(@D)/.
@echo "+++++ Generating Python client for $(*F).yaml +++++"
java -jar $(CODEGEN_JAR) generate \
-DpackageName=$(subst -,_,$(*F))_client \
--lang python \
--input-spec $(YANGAPI_DIR)/$(*F).yaml \
--output $(@D)
touch $@

#======================================================================
# Generate swagger client in Python for handcoded OpenAPI specs
#======================================================================
$(PY_CLIENT_CODEGEN_DIR)/.done: | $(CODEGEN_JAR) $$(@D)/. $(YANGAPI_DIR)/openconfig-acl.yaml
rm -rf $(@D)/*
@echo "+++++ Generating Python client +++++"
%.openapi_client: $(OPENAPI_DIR)/$$(*F).yaml | $(CODEGEN_JAR) $$(@D)/.
@echo "+++++ Generating Python client for $(*F).yaml +++++"
java -jar $(CODEGEN_JAR) generate \
-DpackageName=$(subst -,_,$(*F))_client \
--lang python \
--input-spec $(YANGAPI_DIR)/openconfig-acl.yaml \
--input-spec $(OPENAPI_DIR)/$(*F).yaml \
--output $(@D)
touch $@

#======================================================================
# Cleanups
#======================================================================

clean:
clean-server:
rm -rf $(SERVER_CODEGEN_DIR)

clean-client:
rm -rf $(PY_CLIENT_CODEGEN_DIR)

clean: clean-server clean-client

cleanall: clean
rm -f $(CODEGEN_JAR)

1 change: 1 addition & 0 deletions models/openapi/vlan.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ tags:
- name: "vlan"
description: "Vlan configuration APIs"
schemes:
- "https"
- "http"
paths:
/vlan:
Expand Down
2 changes: 1 addition & 1 deletion models/yang/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ yamlGen: $(YANGAPI_DIR)/.done
#======================================================================
# Generate YAML files for Yang modules
#======================================================================
$(YANGAPI_DIR)/.done: | $(YANG_MOD_FILES) $(YANG_COMMON_FILES)
$(YANGAPI_DIR)/.done: $(YANG_MOD_FILES) $(YANG_COMMON_FILES)
@echo "+++++ Generating YAML files for Yang modules +++++"
mkdir -p $(YANGAPI_DIR)
$(PYANG_BIN) \
Expand Down
2 changes: 1 addition & 1 deletion src/cvl/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ endif
precheck:
$(shell mkdir -p $(BUILD_DIR))

deps: $(BUILD_DIR)/.lib_deps $(BUILD_DIR)/.deps cvl.a
deps: $(BUILD_DIR)/.deps cvl.a

$(BUILD_DIR)/.lib_deps:
cd build && wget -O $(LIBPCRE).tar.gz https://ftp.pcre.org/pub/pcre/$(LIBPCRE).tar.gz && tar -xvzf $(LIBPCRE).tar.gz && cd -
Expand Down
Loading

0 comments on commit 0f1e1d9

Please sign in to comment.