ether: Makefile cleanups.

The biggest change is the removal of leveldb and snappy compilation,
which can be done through the 'v23 profile' tool as of go/vcl/14673.

Change-Id: I81ae15a5f68bd3612726a6805ddc077cce9070ad
diff --git a/Makefile b/Makefile
index d41428c..85ae827 100644
--- a/Makefile
+++ b/Makefile
@@ -16,8 +16,6 @@
 	V23_MOJO_FLAGS += --name=syncbase_mojo --v23.namespace.root=/$(MOUNTTABLE_ADDR)
 endif
 
-GO_BUILD_TAGS := mojo
-
 ifdef ANDROID
 	# Configure compiler and linker for Android.
 	export GOROOT := $(MOJO_DIR)/src/third_party/go/tool/android_arm
@@ -25,7 +23,6 @@
 	export GOOS := android
 	export GOARCH := arm
 	export GOARM := 7
-	GO_BUILD_TAGS += android
 
 	ANDROID_NDK := $(V23_ROOT)/third_party/android/ndk-toolchain
 
@@ -39,8 +36,7 @@
 
 	ETHER_BUILD_DIR := $(PWD)/gen/mojo/android
 
-	LEVELDB_OUT_DIR := $(PWD)/gen/lib/android/leveldb
-	SNAPPY_OUT_DIR := $(PWD)/gen/lib/android/snappy
+	THIRD_PARTY_LIBS := $(V23_ROOT)/third_party/cout/android_arm
 
 	# NOTE(nlacasse): Trying to write to a directory that the app does not have
 	# permission to causes a crash with no stack trace.  Because of this, we
@@ -60,16 +56,12 @@
 
 	ETHER_BUILD_DIR := $(PWD)/gen/mojo/linux_amd64
 
-	LEVELDB_OUT_DIR := $(V23_ROOT)/third_party/cout/linux_amd64/leveldb
-	SNAPPY_OUT_DIR := $(V23_ROOT)/third_party/cout/linux_amd64/snappy
+	THIRD_PARTY_LIBS := $(V23_ROOT)/third_party/cout/linux_amd64
 
 	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
-CGO_CFLAGS := -I$(MOJO_DIR)/src
-CGO_CXXFLAGS := -I$(MOJO_DIR)/src
-CGO_LDFLAGS := -L$(dir $(MOJO_SHARED_LIB)) -lsystem_thunk
 
 # NOTE(nlacasse): Running Go Mojo services requires passing the
 # --enable-multiprocess flag to mojo_shell.  This is because the Go runtime is
@@ -80,9 +72,6 @@
 	--config-alias ETHER_DIR=$(PWD) \
 	--config-alias ETHER_BUILD_DIR=$(ETHER_BUILD_DIR)
 
-LEVELDB_SRC_DIR := $(V23_ROOT)/third_party/csrc/leveldb
-SNAPPY_SRC_DIR := $(V23_ROOT)/third_party/csrc/snappy-1.1.2
-
 LDFLAGS := -shared
 
 # Compiles a Go program and links against the Mojo C library.
@@ -91,10 +80,10 @@
 define MOGO_BUILD
 	mkdir -p $(dir $2)
 	GOPATH="$(GOPATH)" \
-	CGO_CFLAGS="$(CGO_CFLAGS)" \
-	CGO_CXXFLAGS="$(CGO_CXXFLAGS)" \
-	CGO_LDFLAGS="$(CGO_LDFLAGS)" \
-	$(GOROOT)/bin/go build -o $2 -tags="$(GO_BUILD_TAGS)" -ldflags="$(LDFLAGS)" -buildmode=c-shared $1
+	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
 
@@ -128,30 +117,7 @@
 	mkdir -p $(dir $@)
 	ar rcs $@ $(MOJO_BUILD_DIR)/obj/mojo/public/platform/native/system.system_thunks.o
 
-ifdef ANDROID
-# Builds leveldb library for Android.
-$(LEVELDB_OUT_DIR)/lib/libleveldb.a: export TARGET_OS := OS_ANDROID_CROSSCOMPILE
-$(LEVELDB_OUT_DIR)/lib/libleveldb.a: export PREFIX := $(LEVELDB_OUT_DIR)/lib
-$(LEVELDB_OUT_DIR)/lib/libleveldb.a: | env-check
-	mkdir -p $(dir $@)
-	cd $(LEVELDB_SRC_DIR) && make clean && make all
-	# Delete the dynamic libraries, to prevent ld from linking leveldb
-	# dynamically.
-	rm $(LEVELDB_OUT_DIR)/lib/*.so*
-
-# Builds snappy library for Android.
-$(SNAPPY_OUT_DIR)/lib/libsnappy.a: | env-check
-	mkdir -p $(dir $@)
-	cd $(SNAPPY_SRC_DIR) && make clean && ./configure --prefix=$(SNAPPY_OUT_DIR) --build=x86_64-unknown-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi && make install
-	# Delete the dynamic libraries, to prevent ld from linking snappy
-	# dynamically.
-	rm $(SNAPPY_OUT_DIR)/lib/*.so*
-endif
-
 .PHONY: gen-mojom
-# TODO(nlacasse): The echo_client and echo_server are currently used to test
-# compilation and mojom binding generation.  We should remove them once they
-# are no longer needed.
 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
 
@@ -159,8 +125,9 @@
 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
 	$(call MOJOM_GEN,$<,dart/lib/gen,dart)
-	# TODO(nlacasse): Figure out why mojom_bindings_generator creates these bad
-	# symlinks on dart files.
+	# TODO(nlacasse): mojom_bindings_generator creates bad symlinks on dart
+	# files, so we delete them.  Stop doing this once the generator is fixed.
+	# See https://github.com/domokit/mojo/issues/386
 	rm -f dart/lib/gen/mojom/$(notdir $@)
 
 gen/go/src/mojom/echo/echo.mojom.go: mojom/echo.mojom
@@ -177,11 +144,11 @@
 # variables have their original value, so everything works.  Once we have a
 # prereq that requires the original value, we will need to re-work these
 # variables.
-$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_CFLAGS += -I$(LEVELDB_SRC_DIR)/include -I$(SNAPPY_SRC_DIR)/include
-$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_CXXFLAGS += -I$(LEVELDB_SRC_DIR)/include -I$(SNAPPY_SRC_DIR)/include
-$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_LDFLAGS += -lsystem_thunk -L$(LEVELDB_OUT_DIR)/lib -lleveldb -L$(SNAPPY_OUT_DIR)/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) $(LEVELDB_OUT_DIR)/lib/libleveldb.a $(SNAPPY_OUT_DIR)/lib/libsnappy.a gen/go/src/mojom/syncbase/syncbase.mojom.go | env-check
+$(ETHER_BUILD_DIR)/syncbase_server.mojo: CGO_CFLAGS := -I$(THIRD_PARTY_LIBS)/leveldb/include
+$(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
 	$(call MOGO_BUILD,v.io/syncbase/x/ref/services/syncbase/syncbased,$@)
 
 # Formats dart files to follow dart style conventions.
@@ -227,16 +194,17 @@
 ifeq ($(wildcard $(MOJO_BUILD_DIR)),)
 	$(error ERROR: $(MOJO_BUILD_DIR) does not exist.  Please see README.md for instructions on compiling Mojo resources.)
 endif
+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")
+	else
+		$(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
-ifeq ($(wildcard $(LEVELDB_SRC_DIR)),)
-	$(error ERROR: $(LEVELDB_SRC_DIR) does not exist.  Please install syncbase profile with "v23 profile install syncbase")
-endif
-ifeq ($(wildcard $(SNAPPY_SRC_DIR)),)
-	$(error ERROR: $(SNAPPY_SRC_DIR) does not exist.  Please install syncbase profile with "v23 profile install syncbase")
-endif
+	ifeq ($(wildcard $(ANDROID_NDK)),)
+		$(error ERROR: $(ANDROID_NDK) does not exist.  Please install android profile with "v23 profile install android")
+	endif
 endif
 
 .PHONY: clean
@@ -244,6 +212,6 @@
 	rm -rf gen/mojo gen/go
 
 .PHONY: veryclean
-veryclean:
+veryclean: clean
 	rm -rf gen
 	rm -rf dart/{lib/gen,packages,.packages,pubspec.lock}