Skip to content

Commit

Permalink
Merge pull request #15037 from SimonRichardson/standardise-dqlite-build
Browse files Browse the repository at this point in the history
[JUJU-2417] Standardise jujud building
  • Loading branch information
manadart committed Jan 11, 2023
2 parents 25640a2 + deae665 commit 22d5247
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 41 deletions.
112 changes: 74 additions & 38 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,11 @@ endef
define INSTALL_TARGETS
juju \
jujuc \
jujud \
containeragent \
juju-metadata
endef

define INSTALL_CGO_TARGETS
github.com/juju/juju/cmd/jujud
endef

# Windows doesn't support the agent binaries
ifeq ($(GOOS), windows)
INSTALL_TARGETS = juju \
Expand Down Expand Up @@ -158,12 +155,20 @@ ifeq ($(VERBOSE_CHECK), 1)
CHECK_ARGS = -v
endif

define link_flags_version
-X $(PROJECT)/version.GitCommit=$(GIT_COMMIT) \
-X $(PROJECT)/version.GitTreeState=$(GIT_TREE_STATE) \
-X $(PROJECT)/version.build=$(JUJU_BUILD_NUMBER)
endef

# Compile with debug flags if requested.
ifeq ($(DEBUG_JUJU), 1)
COMPILE_FLAGS = -gcflags "all=-N -l"
LINK_FLAGS = -ldflags "-X $(PROJECT)/version.GitCommit=$(GIT_COMMIT) -X $(PROJECT)/version.GitTreeState=$(GIT_TREE_STATE) -X $(PROJECT)/version.build=$(JUJU_BUILD_NUMBER)"
LINK_FLAGS = "-X $(link_flags_version)"
CGO_LINK_FLAGS = "-linkmode 'external' -extldflags '-static' $(link_flags_version)"
else
LINK_FLAGS = -ldflags "-s -w -extldflags '-static' -X $(PROJECT)/version.GitCommit=$(GIT_COMMIT) -X $(PROJECT)/version.GitTreeState=$(GIT_TREE_STATE) -X $(PROJECT)/version.build=$(JUJU_BUILD_NUMBER)"
LINK_FLAGS = "-s -w -extldflags '-static' $(link_flags_version)"
CGO_LINK_FLAGS = "-s -w -linkmode 'external' -extldflags '-static' $(link_flags_version)"
endif

define DEPENDENCIES
Expand Down Expand Up @@ -191,12 +196,67 @@ define run_go_build
$(eval BUILD_ARCH = $(subst ppc64el,ppc64le,${ARCH}))
@@mkdir -p ${BBIN_DIR}
@echo "Building ${PACKAGE} for ${OS}/${ARCH}"
@env GOOS=${OS} GOARCH=${BUILD_ARCH} go build -mod=$(JUJU_GOMOD_MODE) -o ${BBIN_DIR} -tags "$(BUILD_TAGS)" $(COMPILE_FLAGS) $(LINK_FLAGS) -v ${PACKAGE}
@env GOOS=${OS} \
GOARCH=${BUILD_ARCH} \
go build \
-mod=$(JUJU_GOMOD_MODE) \
-o ${BBIN_DIR} \
-tags "$(BUILD_TAGS)" \
$(COMPILE_FLAGS) \
-ldflags $(LINK_FLAGS) \
-v ${PACKAGE}
endef

define run_cgo_build
$(eval OS = $(word 1,$(subst _, ,$*)))
$(eval ARCH = $(word 2,$(subst _, ,$*)))
$(eval BBIN_DIR = ${BUILD_DIR}/${OS}_${ARCH}/bin)
$(eval BUILD_ARCH = $(subst ppc64el,ppc64le,${ARCH}))
@@mkdir -p ${BBIN_DIR}
@echo "Building ${PACKAGE} for ${OS}/${ARCH}"
@env PATH=${PATH}:/usr/local/musl/bin \
CC="musl-gcc" \
CGO_CFLAGS="-I${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}/include" \
CGO_LDFLAGS="-L${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH} -luv -lraft -ldqlite -llz4 -lsqlite3" \
CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)" \
LD_LIBRARY_PATH="${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}" \
CGO_ENABLED=1 \
GOOS=${OS} \
GOARCH=${BUILD_ARCH} \
go build \
-mod=$(JUJU_GOMOD_MODE) \
-o ${BBIN_DIR} \
-tags "$(BUILD_TAGS)" \
$(COMPILE_FLAGS) \
-ldflags $(LINK_FLAGS) \
-v ${PACKAGE}
endef

define run_go_install
@echo "Installing ${PACKAGE}"
@go install -mod=$(JUJU_GOMOD_MODE) -tags "$(BUILD_TAGS)" $(COMPILE_FLAGS) $(LINK_FLAGS) -v ${PACKAGE}
@go install \
-mod=$(JUJU_GOMOD_MODE) \
-tags "$(BUILD_TAGS)" \
$(COMPILE_FLAGS) \
-ldflags $(LINK_FLAGS) \
-v ${PACKAGE}
endef

define run_cgo_install
@echo "Installing ${PACKAGE}"
@env PATH=${PATH}:/usr/local/musl/bin \
CC="musl-gcc" \
CGO_CFLAGS="-I${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}/include" \
CGO_LDFLAGS="-L${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH} -luv -lraft -ldqlite -llz4 -lsqlite3" \
CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)" \
LD_LIBRARY_PATH="${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}" \
CGO_ENABLED=1 \
go install \
-mod=${JUJU_GOMOD_MODE} \
-tags "libsqlite3 ${BUILD_TAGS}" \
${COMPILE_FLAGS} \
-ldflags ${CGO_LINK_FLAGS} \
-v ${PACKAGE}
endef

default: build
Expand All @@ -220,9 +280,9 @@ jujuc:

.PHONY: jujud
jujud: PACKAGE = github.com/juju/juju/cmd/jujud
jujud:
jujud: musl-install-if-missing dqlite-deps-check
## jujud: Install jujud without updating dependencies
${run_go_install}
${run_cgo_install}

.PHONY: containeragent
containeragent: PACKAGE = github.com/juju/juju/cmd/containeragent
Expand Down Expand Up @@ -258,9 +318,9 @@ ${BUILD_DIR}/%/bin/jujuc: phony_explicit
$(run_go_build)

${BUILD_DIR}/%/bin/jujud: PACKAGE = github.com/juju/juju/cmd/jujud
${BUILD_DIR}/%/bin/jujud: phony_explicit
${BUILD_DIR}/%/bin/jujud: phony_explicit musl-install-if-missing dqlite-deps-check
# build for jujud
$(cgo-go-build)
$(run_cgo_build)

${BUILD_DIR}/%/bin/containeragent: PACKAGE = github.com/juju/juju/cmd/containeragent
${BUILD_DIR}/%/bin/containeragent: phony_explicit
Expand Down Expand Up @@ -293,7 +353,7 @@ build: rebuild-schema go-build
## BUILD_CLIENT_TARGETS while also rebuilding a new schema.

.PHONY: go-agent-build
go-agent-build: cgo-go-build $(BUILD_AGENT_TARGETS)
go-agent-build: $(BUILD_AGENT_TARGETS)

.PHONY: go-build
go-build: go-agent-build $(BUILD_CLIENT_TARGETS)
Expand Down Expand Up @@ -345,7 +405,7 @@ install: rebuild-schema go-install
## install: Install Juju binaries with a rebuilt schema

.PHONY: go-install
go-install: cgo-go-install $(INSTALL_TARGETS)
go-install: $(INSTALL_TARGETS)
## go-install: Install Juju binaries

.PHONY: clean
Expand Down Expand Up @@ -544,27 +604,3 @@ STATIC_ANALYSIS_JOB ?=
static-analysis:
## static-analysis: Check the go code using static-analysis
@cd tests && ./main.sh static_analysis ${STATIC_ANALYSIS_JOB}


cgo-go-op: musl-install-if-missing dqlite-deps-check
PATH=${PATH}:/usr/local/musl/bin \
CC="musl-gcc" \
CGO_CFLAGS="-I${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}/include" \
CGO_LDFLAGS="-L${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH} -luv -lraft -ldqlite -llz4 -lsqlite3" \
CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)" \
LD_LIBRARY_PATH="${DQLITE_EXTRACTED_DEPS_ARCHIVE_PATH}" \
CGO_ENABLED=1 \
go $o $d \
-mod=${JUJU_GOMOD_MODE} \
-tags "libsqlite3 ${BUILD_TAGS}" \
${COMPILE_FLAGS} \
-ldflags "-s -w -linkmode 'external' -extldflags '-static' -X ${PROJECT}/version.GitCommit=${GIT_COMMIT} -X ${PROJECT}/version.GitTreeState=${GIT_TREE_STATE} -X ${PROJECT}/version.build=${JUJU_BUILD_NUMBER}" \
-v $(strip $(INSTALL_CGO_TARGETS))

cgo-go-install:
## go-install: Install Juju binaries without updating dependencies
$(MAKE) cgo-go-op o=install d=

cgo-go-build:
## go-build: Build Juju binaries without updating dependencies
$(MAKE) cgo-go-op o=build d="-o ${BIN_DIR}/jujud"
3 changes: 0 additions & 3 deletions scripts/verify.bash
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,5 @@ else
echo "Ignoring static analysis, run again with STATIC_ANALYSIS=1 ..."
fi

echo "checking: go build ..."
go build $(go list github.com/juju/juju/... | grep -v /vendor/)

echo "checking: tests are wired up ..."
./scripts/checktesting.bash

0 comments on commit 22d5247

Please sign in to comment.