mojo/syncbase: Refactored the Makefile so the shared mojo parts of the
Makefile is in mojo/shared/mojo.mk
MultiPart: 1/2
Change-Id: I0c8ea8f5992a0d49a07d4b79a623aca16578f5ca
diff --git a/Makefile b/Makefile
index cec05ee..07a4870 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,10 @@
-SHELL := /bin/bash -euo pipefail
PWD := $(shell pwd)
-V23_GOPATH := $(shell echo `v23 run env | grep GOPATH | cut -d\= -f2`)
DART_FILES := $(shell find dart/bin dart/lib dart/test sky_demo/lib -name "*.dart" -not -path "dart/lib/gen/*")
GO_FILES := $(shell find go/src -name "*.go")
V23_GO_FILES := $(shell find $(V23_ROOT) -name "*.go")
+include ../shared/mojo.mk
+
# Flags for Syncbase service running as Mojo service.
# See v.io/x/ref/runtime/internal/mojo_util.go for the wonderful magic that
# makes this work.
@@ -19,22 +19,6 @@
endif
ifdef ANDROID
- # Configure compiler and linker for Android.
- export GOROOT := $(MOJO_DIR)/src/third_party/go/tool/android_arm
- export CGO_ENABLED := 1
- export GOOS := android
- export GOARCH := arm
- export GOARM := 7
-
- ANDROID_NDK := $(V23_ROOT)/third_party/android/ndk-toolchain
-
- export CC := $(ANDROID_NDK)/bin/arm-linux-androideabi-gcc
- export CXX := $(ANDROID_NDK)/bin/arm-linux-androideabi-g++
-
- MOJO_ANDROID_FLAGS := --android
- MOJO_BUILD_DIR := $(MOJO_DIR)/src/out/android_Debug
- MOJO_SHARED_LIB := $(PWD)/gen/lib/android/libsystem_thunk.a
- MOJO_SHELL_PATH := $(MOJO_BUILD_DIR)/apks/MojoShell.apk
SKY_BUILD_DIR := $(SKY_DIR)/src/out/android_Debug
ETHER_BUILD_DIR := $(PWD)/gen/mojo/android
@@ -49,12 +33,6 @@
APP_HOME_DIR = /data/data/org.chromium.mojo.shell/app_home
V23_MOJO_FLAGS += --logtostderr=true --root-dir=$(APP_HOME_DIR)/syncbase_data
else
- # Configure compiler and linker for Linux.
- export GOROOT := $(MOJO_DIR)/src/third_party/go/tool/linux_amd64
-
- MOJO_BUILD_DIR := $(MOJO_DIR)/src/out/Debug
- MOJO_SHARED_LIB := $(PWD)/gen/lib/linux_amd64/libsystem_thunk.a
- MOJO_SHELL_PATH := $(MOJO_BUILD_DIR)/mojo_shell
SKY_BUILD_DIR := $(SKY_DIR)/src/out/Debug
ETHER_BUILD_DIR := $(PWD)/gen/mojo/linux_amd64
@@ -63,41 +41,14 @@
V23_MOJO_FLAGS += --root-dir=/tmp/syncbase_data
endif
-GOPATH := $(V23_GOPATH):$(MOJO_DIR):$(MOJO_DIR)/third_party/go:$(MOJO_BUILD_DIR)/gen/go:$(PWD)/go:$(PWD)/gen/go
-
# NOTE(nlacasse): Running Go Mojo services requires passing the
# --enable-multiprocess flag to mojo_shell. This is because the Go runtime is
# very large, and can interfere with C++ memory if they are in the same
# process.
-MOJO_SHELL_FLAGS := -v --enable-multiprocess \
- --config-alias MOJO_BUILD_DIR=$(MOJO_BUILD_DIR) \
+MOJO_SHELL_FLAGS := $(MOJO_SHELL_FLAGS) \
--config-alias ETHER_DIR=$(PWD) \
--config-alias ETHER_BUILD_DIR=$(ETHER_BUILD_DIR)
-LDFLAGS := -shared
-
-# Compiles a Go program and links against the Mojo C library.
-# $1 is input filename.
-# $2 is output filename.
-define MOGO_BUILD
- mkdir -p $(dir $2)
- GOPATH="$(GOPATH)" \
- CGO_CFLAGS="-I$(MOJO_DIR)/src $(CGO_CFLAGS)" \
- CGO_CXXFLAGS="-I$(MOJO_DIR)/src $(CGO_CXXFLAGS)" \
- CGO_LDFLAGS="-L$(dir $(MOJO_SHARED_LIB)) -lsystem_thunk $(CGO_LDFLAGS)" \
- $(GOROOT)/bin/go build -o $2 -tags=mojo -ldflags="$(LDFLAGS)" -buildmode=c-shared $1
- rm -f $(basename $2).h
-endef
-
-# Generates go bindings from .mojom file.
-# $1 is input filename.
-# $2 is output directory.
-# $3 is language (go, dart, ...).
-define MOJOM_GEN
- mkdir -p $2
- $(MOJO_DIR)/src/mojo/public/tools/bindings/mojom_bindings_generator.py $1 -d . -o $2 -g $3
-endef
-
.DELETE_ON_ERROR:
all: test
@@ -106,7 +57,7 @@
build: $(ETHER_BUILD_DIR)/echo_server.mojo $(ETHER_BUILD_DIR)/syncbase_server.mojo
# Builds mounttabled, principal, and syncbased.
-bin: $(V23_GO_FILES) | env-check
+bin: $(V23_GO_FILES) | syncbase-env-check
v23 go build -a -o $@/mounttabled v.io/x/ref/services/mounttable/mounttabled
v23 go build -a -o $@/principal v.io/x/ref/cmd/principal
v23 go build -a -o $@/syncbased v.io/syncbase/x/ref/services/syncbase/syncbased
@@ -117,18 +68,13 @@
./bin/principal seekblessings --v23.credentials creds
touch $@
-# Builds the library that Mojo services must be linked with.
-$(MOJO_SHARED_LIB): | env-check
- mkdir -p $(dir $@)
- ar rcs $@ $(MOJO_BUILD_DIR)/obj/mojo/public/platform/native/system.system_thunks.o
-
.PHONY: gen-mojom
gen-mojom: dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart gen/go/src/mojom/echo/echo.mojom.go
gen-mojom: dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart gen/go/src/mojom/syncbase/syncbase.mojom.go
dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart: mojom/echo.mojom
dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart: mojom/syncbase.mojom
-dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart: | env-check
+dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart: | synbase-env-check
$(call MOJOM_GEN,$<,dart/lib/gen,dart)
# TODO(nlacasse): mojom_bindings_generator creates bad symlinks on dart
# files, so we delete them. Stop doing this once the generator is fixed.
@@ -137,11 +83,11 @@
gen/go/src/mojom/echo/echo.mojom.go: mojom/echo.mojom
gen/go/src/mojom/syncbase/syncbase.mojom.go: mojom/syncbase.mojom
-gen/go/src/mojom/echo/echo.mojom.go gen/go/src/mojom/syncbase/syncbase.mojom.go: | env-check
+gen/go/src/mojom/echo/echo.mojom.go gen/go/src/mojom/syncbase/syncbase.mojom.go: | synbase-env-check
$(call MOJOM_GEN,$<,gen,go)
gofmt -w $@
-$(ETHER_BUILD_DIR)/echo_server.mojo: $(GO_FILES) $(MOJO_SHARED_LIB) gen/go/src/mojom/echo/echo.mojom.go | env-check
+$(ETHER_BUILD_DIR)/echo_server.mojo: $(GO_FILES) $(MOJO_SHARED_LIB) gen/go/src/mojom/echo/echo.mojom.go | syncbase-env-check
$(call MOGO_BUILD,$(PWD)/go/src/echo_server.go,$@)
# TODO(nlacasse): These target-specific variables will affect this task and all
@@ -153,7 +99,7 @@
$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_CXXFLAGS := -I$(THIRD_PARTY_LIBS)/leveldb/include
$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_LDFLAGS := -L$(THIRD_PARTY_LIBS)/leveldb/lib -lleveldb -L$(THIRD_PARTY_LIBS)/snappy/lib -lsnappy
$(ETHER_BUILD_DIR)/syncbase_server.mojo: LDFLAGS := -X v.io/x/ref/runtime/internal.commandLineFlags '$(V23_MOJO_FLAGS)'
-$(ETHER_BUILD_DIR)/syncbase_server.mojo: $(GO_FILES) $(V23_GO_FILES) $(MOJO_SHARED_LIB) gen/go/src/mojom/syncbase/syncbase.mojom.go | env-check
+$(ETHER_BUILD_DIR)/syncbase_server.mojo: $(GO_FILES) $(V23_GO_FILES) $(MOJO_SHARED_LIB) gen/go/src/mojom/syncbase/syncbase.mojom.go | synbase-env-check
$(call MOGO_BUILD,v.io/syncbase/x/ref/services/syncbase/syncbased,$@)
# Formats dart files to follow dart style conventions.
@@ -179,36 +125,27 @@
cd sky_demo && pub get
.PHONY: run-syncbase-example
-run-syncbase-example: $(ETHER_BUILD_DIR)/syncbase_server.mojo dart/packages dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart | env-check
+run-syncbase-example: $(ETHER_BUILD_DIR)/syncbase_server.mojo dart/packages dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart | synbase-env-check
$(MOJO_DIR)/src/mojo/devtools/common/mojo_run --config-file $(PWD)/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) https://mojo.v.io/syncbase_example.dart
.PHONY: run-echo-example
-run-echo-example: $(ETHER_BUILD_DIR)/echo_server.mojo dart/packages dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart | env-check
+run-echo-example: $(ETHER_BUILD_DIR)/echo_server.mojo dart/packages dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart | synbase-env-check
$(MOJO_DIR)/src/mojo/devtools/common/mojo_run --config-file $(PWD)/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) https://mojo.v.io/echo_example.dart
.PHONY: run-sky-demo
run-sky-demo: MOJO_SHELL_FLAGS += --config-alias SKY_DIR=$(SKY_DIR) --config-alias SKY_BUILD_DIR=$(SKY_BUILD_DIR)
-run-sky-demo: $(ETHER_BUILD_DIR)/echo_server.mojo sky_demo/packages $(ETHER_BUILD_DIR)/syncbase_server.mojo dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart | env-check
+run-sky-demo: $(ETHER_BUILD_DIR)/echo_server.mojo sky_demo/packages $(ETHER_BUILD_DIR)/syncbase_server.mojo dart/lib/gen/dart-pkg/mojom/lib/mojo/echo.mojom.dart dart/lib/gen/dart-pkg/mojom/lib/mojo/syncbase.mojom.dart | synbase-env-check
ifndef SKY_DIR
$(error SKY_DIR is not set)
endif
$(MOJO_DIR)/src/mojo/devtools/common/mojo_run --config-file $(PWD)/sky_demo/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) 'mojo:window_manager https://mojo.v.io/sky_demo/lib/main.dart'
.PHONY: test
-test: dart/packages $(ETHER_BUILD_DIR)/echo_server.mojo $(ETHER_BUILD_DIR)/syncbase_server.mojo gen-mojom | env-check
+test: dart/packages $(ETHER_BUILD_DIR)/echo_server.mojo $(ETHER_BUILD_DIR)/syncbase_server.mojo gen-mojom | synbase-env-check
$(MOJO_DIR)/src/mojo/devtools/common/mojo_test --config-file $(PWD)/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) --shell-path $(MOJO_SHELL_PATH) tests
-.PHONY: env-check
-env-check:
-ifndef MOJO_DIR
- $(error MOJO_DIR is not set)
-endif
-ifndef V23_ROOT
- $(error V23_ROOT is not set)
-endif
-ifeq ($(wildcard $(MOJO_BUILD_DIR)),)
- $(error ERROR: $(MOJO_BUILD_DIR) does not exist. Please see README.md for instructions on compiling Mojo resources.)
-endif
+.PHONY: synbase-env-check
+syncbase-env-check: | mojo-env-check
ifeq ($(wildcard $(THIRD_PARTY_LIBS)),)
ifdef ANDROID
$(error ERROR: $(THIRD_PARTY_LIBS) does not exist or is empty. Please run "GOOS=android GOARCH=arm v23 profile install syncbase")
@@ -216,11 +153,6 @@
$(error ERROR: $(THIRD_PARTY_LIBS) does not exist or is empty. Please run "v23 profile install syncbase")
endif
endif
-ifdef ANDROID
-ifeq ($(wildcard $(ANDROID_NDK)),)
- $(error ERROR: $(ANDROID_NDK) does not exist. Please install android profile with "v23 profile install android")
-endif
-endif
.PHONY: clean
clean: