summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: ed58a296e06b2699d50041a494c00c731f5430ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Makefile used to build xds-gdb commands

# Application Version
VERSION := 0.1.0
TARGET=xds-gdb

# Retrieve git tag/commit to set sub-version string
ifeq ($(origin SUB_VERSION), undefined)
	SUB_VERSION := $(shell git describe --exact-match --tags 2>/dev/null | sed 's/^v//')
	ifneq ($(SUB_VERSION), )
		VERSION := $(firstword $(subst -, ,$(SUB_VERSION)))
		SUB_VERSION := $(word 2,$(subst -, ,$(SUB_VERSION)))
	endif
	ifeq ($(SUB_VERSION), )
		SUB_VERSION := $(shell git rev-parse --short HEAD)
		ifeq ($(SUB_VERSION), )
			SUB_VERSION := unknown-dev
		endif
	endif
endif

HOST_GOOS=$(shell go env GOOS)
HOST_GOARCH=$(shell go env GOARCH)
ARCH=$(HOST_GOOS)-$(HOST_GOARCH)
REPOPATH=github.com/iotbzh/$(TARGET)

EXT=
ifeq ($(HOST_GOOS), windows)
	EXT=.exe
endif


mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
ROOT_SRCDIR := $(patsubst %/,%,$(dir $(mkfile_path)))
BINDIR := $(ROOT_SRCDIR)/bin
ROOT_GOPRJ := $(abspath $(ROOT_SRCDIR)/../../../..)
PACKAGE_DIR := $(ROOT_SRCDIR)/package

export GOPATH := $(shell go env GOPATH):$(ROOT_GOPRJ)
export PATH := $(PATH):$(ROOT_SRCDIR)/tools

VERBOSE_1 := -v
VERBOSE_2 := -v -x

# Release or Debug mode
ifeq ($(filter 1,$(RELEASE) $(REL)),)
	GO_LDFLAGS=
	# disable compiler optimizations and inlining
	GO_GCFLAGS=-N -l
	BUILD_MODE="Debug mode"
else
	# optimized code without debug info
	GO_LDFLAGS=-s -w
	GO_GCFLAGS=
	BUILD_MODE="Release mode"
endif


ifeq ($(SUB_VERSION), )
	PACKAGE_ZIPFILE := $(TARGET)_$(ARCH)-v$(VERSION).zip
else
	PACKAGE_ZIPFILE := $(TARGET)_$(ARCH)-v$(VERSION)_$(SUB_VERSION).zip
endif

.PHONY: all
all: vendor build

.PHONY: build
build:
	@echo "### Build $(TARGET) (version $(VERSION), subversion $(SUB_VERSION)) - $(BUILD_MODE)";
	@cd $(ROOT_SRCDIR); $(BUILD_ENV_FLAGS) go build $(VERBOSE_$(V)) -i -o $(BINDIR)/$(TARGET)$(EXT) -ldflags "$(GO_LDFLAGS) -X main.AppVersion=$(VERSION) -X main.AppSubVersion=$(SUB_VERSION)" -gcflags "$(GO_GCFLAGS)" .

test: tools/glide
	go test --race $(shell ./tools/glide novendor)

vet: tools/glide
	go vet $(shell ./tools/glide novendor)

fmt: tools/glide
	go fmt $(shell ./tools/glide novendor)

.PHONY: clean
clean:
	rm -rf $(BINDIR)/* debug $(ROOT_GOPRJ)/pkg/*/$(REPOPATH) $(PACKAGE_DIR)

distclean: clean
	rm -rf $(BINDIR) tools glide.lock vendor $(ROOT_SRCDIR)/*.zip

.PHONY: release
release:
	RELEASE=1 make -f $(ROOT_SRCDIR)/Makefile clean build

package: clean vendor build
	@mkdir -p $(PACKAGE_DIR)/$(TARGET)
	@cp -a $(BINDIR)/*gdb$(EXT) $(PACKAGE_DIR)/$(TARGET)
	@cp -r $(ROOT_SRCDIR)/conf.d $(ROOT_SRCDIR)/scripts $(PACKAGE_DIR)/$(TARGET)
	cd $(PACKAGE_DIR) && zip -r $(ROOT_SRCDIR)/$(PACKAGE_ZIPFILE) ./$(TARGET)

.PHONY: package-all
package-all:
	@echo "# Build linux amd64..."
	GOOS=linux GOARCH=amd64 RELEASE=1 make -f $(ROOT_SRCDIR)/Makefile package
	@echo "# Build windows amd64..."
	GOOS=windows GOARCH=amd64 RELEASE=1 make -f $(ROOT_SRCDIR)/Makefile package
	@echo "# Build darwin amd64..."
	GOOS=darwin GOARCH=amd64 RELEASE=1 make -f $(ROOT_SRCDIR)/Makefile package
	make -f $(ROOT_SRCDIR)/Makefile clean

vendor: tools/glide glide.yaml
	./tools/glide install --strip-vendor

vendor/debug: vendor
	(cd vendor/github.com/iotbzh && \
		rm -rf xds-common && ln -s ../../../../xds-common && \
		rm -rf xds-server && ln -s ../../../../xds-server )

tools/glide:
	@echo "Downloading glide"
	mkdir -p tools
	curl --silent -L https://glide.sh/get | GOBIN=./tools  sh

help:
	@echo "Main supported rules:"
	@echo "  all               (default)"
	@echo "  release"
	@echo "  clean"
	@echo "  package"
	@echo "  distclean"
	@echo ""
	@echo "Influential make variables:"
	@echo "  V                 - Build verbosity {0,1,2}."
	@echo "  BUILD_ENV_FLAGS   - Environment added to 'go build'."
p">; } UnicensCmdNsRun_t; /** * \brief Internal struct for UNICENS Integration */ typedef struct { uint16_t destination; uint16_t debounceTime; } UnicensCmdGpioCreatePort_t; /** * \brief Internal struct for UNICENS Integration */ typedef struct { uint16_t destination; uint16_t mask; uint16_t data; } UnicensCmdGpioWritePort_t; /** * \brief Internal struct for UNICENS Integration */ typedef struct { uint16_t destination; bool isBurst; uint8_t blockCount; uint8_t slaveAddr; uint16_t timeout; uint8_t dataLen; uint8_t data[I2C_WRITE_MAX_LEN]; Ucsi_ResultCb_t result_fptr; void *request_ptr; } UnicensCmdI2CWrite_t; /** * \brief Internal struct for Unicens Integration */ typedef struct { UnicensCmd_t cmd; union { UnicensCmdInit_t Init; UnicensCmdRmSetRoute_t RmSetRoute; UnicensCmdNsRun_t NsRun; UnicensCmdGpioCreatePort_t GpioCreatePort; UnicensCmdGpioWritePort_t GpioWritePort; UnicensCmdI2CWrite_t I2CWrite; } val; } UnicensCmdEntry_t; /** * \brief Internal variables for one instance of UNICENS Integration * \note Never touch any of this fields! */ typedef struct { volatile uint8_t *dataQueue; volatile uint8_t *pRx; volatile uint8_t *pTx; volatile uint32_t amountOfEntries; volatile uint32_t sizeOfEntry; volatile uint32_t rxPos; volatile uint32_t txPos; } RB_t; /** * \brief Internal variables for one instance of UNICENS Integration * \note Allocate this structure for each instance (static or malloc) * and pass it to UCSI_Init() * \note Never touch any of this fields! */ typedef struct { uint32_t magic; void *tag; bool initialized; RB_t rb; uint8_t rbBuf[(CMD_QUEUE_LEN * sizeof(UnicensCmdEntry_t))]; Ucs_Inst_t *unicens; Ucs_InitData_t uniInitData; bool triggerService; Ucs_Lld_Api_t *uniLld; void *uniLldHPtr; UnicensCmdEntry_t *currentCmd; } UCSI_Data_t; #endif /* UNICENSINTEGRATION_H_ */