Index: sdk_build/data/cpp/Makefile |
diff --git a/sdk_build/data/cpp/Makefile b/sdk_build/data/cpp/Makefile |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a3023c1dcd878698c27d9cdf927ad194f739d8be |
--- /dev/null |
+++ b/sdk_build/data/cpp/Makefile |
@@ -0,0 +1,151 @@ |
+# Copyright 2016 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+# This is a simplistic sample Makefile for building a Mojo application. It |
+# produces output in the out subdirectory (which it creates if necessary), and |
+# produces "debug" builds. It assumes that the mojom tool and clang have been |
+# obtained by running mojo_sdk_setup/setup.sh. |
+# |
+# Note: It is very primitive, and doesn't try to correctly handle dependencies. |
+# |
+# TODO(vtl): Even so, it could use a lot of improvements. |
+# TODO(vtl): Should probably support other toolchains, when appropriate. |
+ |
+# Default target --------------------------------------------------------------- |
+ |
+all: default |
+ |
+# Build directories ------------------------------------------------------------ |
+ |
+OUT_DIR := out |
+GEN_DIR := $(OUT_DIR)/gen |
+OBJ_DIR := $(OUT_DIR)/obj |
+ |
+$(OUT_DIR): |
+ mkdir -p $(OUT_DIR) |
+ |
+$(GEN_DIR): | $(OUT_DIR) |
+ mkdir -p $(GEN_DIR) |
+ |
+$(OBJ_DIR): | $(OUT_DIR) |
+ mkdir -p $(OBJ_DIR) |
+ |
+# Tools ------------------------------------------------------------------------ |
+ |
+MOJOM_BINDINGS_GENERATOR := \ |
+ mojo/public/tools/bindings/mojom_bindings_generator.py |
+ |
+CC := toolchain/clang/bin/clang |
+CFLAGS := -m64 -march=x86-64 -fPIC -fvisibility=hidden -fno-strict-aliasing \ |
+ -pthread -O0 -g2 -Wall -Werror -I. -I$(GEN_DIR) |
+ |
+CXX := toolchain/clang/bin/clang++ |
+CXXFLAGS := $(CFLAGS) -std=c++11 -fno-rtti -fno-exceptions |
+ |
+CXX_MAKE_SO_FLAGS := $(CXXFLAGS) -shared -ldl -Wl,--fatal-warnings \ |
+ -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro -Wl,-z,defs |
+ |
+# Build patterns --------------------------------------------------------------- |
+ |
+$(GEN_DIR)/%.mojom.cc $(GEN_DIR)/%.mojom.h $(GEN_DIR)/%.mojom-internal.h: \ |
+ %.mojom | $(GEN_DIR) |
+ $(MOJOM_BINDINGS_GENERATOR) --use_bundled_pylibs -d . -I . -o $(GEN_DIR) \ |
+ --no-gen-imports --no-generate-type-info $< |
+ |
+$(OBJ_DIR)/%.o: %.c |
+ mkdir -p $(@D) |
+ $(CC) $(CFLAGS) -o $@ -c $< |
+ |
+$(OBJ_DIR)/%.o: %.cc |
+ mkdir -p $(@D) |
+ $(CXX) $(CXXFLAGS) -o $@ -c $< |
+ |
+# "Functions" (to use with $(call function_name,...)) -------------------------- |
+ |
+# Function to get a list of generated .cc files from a list of .mojom files. |
+cc_files_from_mojom_files = $(patsubst %.mojom,$(GEN_DIR)/%.mojom.cc,$(1)) |
+ |
+# Function to get a list of generated .o files from a list of .c files. |
+o_files_from_c_files = $(patsubst %.c,$(OBJ_DIR)/%.o,$(1)) |
+ |
+# Function to get a list of generated .o files from a list of .cc files. |
+o_files_from_cc_files = $(patsubst %.cc,$(OBJ_DIR)/%.o,$(1)) |
+ |
+# Target: mojo_public.a -------------------------------------------------------- |
+ |
+MOJO_PUBLIC_MOJOM_FILES := \ |
+ $(wildcard mojo/public/interfaces/application/*.mojom) \ |
+ $(wildcard mojo/public/interfaces/bindings/*.mojom) \ |
+ $(wildcard mojo/public/interfaces/network/*.mojom) |
+MOJO_PUBLIC_MOJOM_CC_FILES := \ |
+ $(call cc_files_from_mojom_files,$(MOJO_PUBLIC_MOJOM_FILES)) |
+MOJO_PUBLIC_C_FILES := \ |
+ $(wildcard mojo/public/c/bindings/lib/*.c) |
+MOJO_PUBLIC_CC_FILES := \ |
+ $(wildcard mojo/public/cpp/application/lib/*.cc) \ |
+ $(wildcard mojo/public/cpp/bindings/lib/*.cc) \ |
+ $(wildcard mojo/public/cpp/environment/lib/*.cc) \ |
+ $(wildcard mojo/public/cpp/system/lib/*.cc) \ |
+ $(wildcard mojo/public/cpp/utility/lib/*.cc) |
+# We have to choose *one* implementation of |Environment|, so remove the |
+# logging-only environment. |
+MOJO_PUBLIC_CC_FILES := \ |
+ $(filter-out mojo/public/cpp/environment/lib/logging_only_environment.cc, \ |
+ $(MOJO_PUBLIC_CC_FILES)) |
+ |
+$(MOJO_PUBLIC_CC_FILES): $(MOJO_PUBLIC_MOJOM_CC_FILES) |
vardhan
2016/02/29 20:56:37
what about header file dependencies, since a lot o
viettrungluu
2016/02/29 21:02:54
Blah blah blah. Apparently, you can't read -- see
vardhan
2016/02/29 21:11:54
that's uncalled for -- please practice courtesy wh
|
+ |
+# TODO(vtl): We could really update the archive instead of re-creating it each |
+# time. |
+$(OUT_DIR)/mojo_public.a: \ |
+ $(MOJO_PUBLIC_MOJOM_CC_FILES) \ |
+ $(call o_files_from_cc_files,$(MOJO_PUBLIC_MOJOM_CC_FILES)) \ |
+ $(call o_files_from_c_files,$(MOJO_PUBLIC_C_FILES)) \ |
+ $(call o_files_from_cc_files,$(MOJO_PUBLIC_CC_FILES)) \ |
+ | $(OUT_DIR) |
+ rm -f $@ |
+ ar rc $@ $(filter %.o,$^) |
+ |
+# Target: mojo_system_thunks.o ------------------------------------------------- |
+ |
+# TODO(vtl): Support other thunk libraries. |
+ |
+$(OBJ_DIR)/mojo_system_thunks.o: \ |
+ $(OBJ_DIR)/mojo/public/platform/native/system_thunks.o |
+ cp $^ $@ |
+ |
+# Targets: hello_mojo_client.mojo and hello_mojo_server.mojo ------------------- |
+ |
+EXAMPLES_HELLO_MOJO_MOJOM_FILES := \ |
+ $(wildcard examples/hello_mojo/*.mojom) |
+EXAMPLES_HELLO_MOJO_MOJOM_CC_FILES := \ |
+ $(call cc_files_from_mojom_files,$(EXAMPLES_HELLO_MOJO_MOJOM_FILES)) |
+ |
+EXAMPLES_HELLO_MOJO_CLIENT_CC_FILES := \ |
+ examples/hello_mojo/hello_mojo_client.cc |
+$(EXAMPLES_HELLO_MOJO_CLIENT_CC_FILES): $(EXAMPLES_HELLO_MOJO_MOJOM_CC_FILES) |
+$(OUT_DIR)/hello_mojo_client.mojo: \ |
+ $(OUT_DIR)/mojo_public.a \ |
+ $(OBJ_DIR)/mojo_system_thunks.o \ |
+ $(call o_files_from_cc_files,$(EXAMPLES_HELLO_MOJO_MOJOM_CC_FILES)) \ |
+ $(call o_files_from_cc_files,$(EXAMPLES_HELLO_MOJO_CLIENT_CC_FILES)) |
+ $(CXX) $(CXX_MAKE_SO_FLAGS) \ |
+ -Wl,--whole-archive $(filter %.o,$^) -Wl,-no-whole-archive \ |
+ $(filter %.a,$^) -o $@ |
+ |
+EXAMPLES_HELLO_MOJO_SERVER_CC_FILES := \ |
+ examples/hello_mojo/hello_mojo_server.cc |
+$(EXAMPLES_HELLO_MOJO_SERVER_CC_FILES): $(EXAMPLES_HELLO_MOJO_MOJOM_CC_FILES) |
+$(OUT_DIR)/hello_mojo_server.mojo: \ |
+ $(OUT_DIR)/mojo_public.a \ |
+ $(OBJ_DIR)/mojo_system_thunks.o \ |
+ $(call o_files_from_cc_files,$(EXAMPLES_HELLO_MOJO_MOJOM_CC_FILES)) \ |
+ $(call o_files_from_cc_files,$(EXAMPLES_HELLO_MOJO_SERVER_CC_FILES)) |
+ $(CXX) $(CXX_MAKE_SO_FLAGS) \ |
+ -Wl,--whole-archive $(filter %.o,$^) -Wl,-no-whole-archive \ |
+ $(filter %.a,$^) -o $@ |
+ |
+# Default targets -------------------------------------------------------------- |
+ |
+default: $(OUT_DIR)/hello_mojo_client.mojo $(OUT_DIR)/hello_mojo_server.mojo |