123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- # Copyright 2018 Google LLC
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # Example-specific variables.
- # To modify this Makefile for a different application, these are the values
- # that are mostly likely to need to be changed.
- # Executable name.
- BINARY_NAME=flutter_desktop_example
- # The C++ code for the embedder application.
- SOURCES=flutter_embedder_example.cc
- # Default build type. For a release build, set BUILD=release.
- # Currently this only sets NDEBUG, which is used to control the flags passed
- # to the Flutter engine in the example shell, and not the complation settings
- # (e.g., optimization level) of the C++ code.
- BUILD=debug
- # Dependency locations
- FLUTTER_APP_DIR=$(CURDIR)/..
- FLUTTER_APP_BUILD_DIR=$(FLUTTER_APP_DIR)/build
- FLUTTER_ROOT:=$(shell cat $(CURDIR)/.generated_flutter_root)
- FLUTTER_ARTIFACT_CACHE_DIR=$(FLUTTER_ROOT)/bin/cache/artifacts/engine/linux-x64
- OUT_DIR=$(FLUTTER_APP_BUILD_DIR)/linux
- CACHE_DIR=$(OUT_DIR)/cache
- FLUTTER_LIBRARY_COPY_DIR=$(CACHE_DIR)/flutter_library
- FLUTTER_LIB_NAME=flutter_linux
- FLUTTER_LIB=$(FLUTTER_LIBRARY_COPY_DIR)/lib$(FLUTTER_LIB_NAME).so
- # Tools
- FLUTTER_BIN=$(FLUTTER_ROOT)/bin/flutter
- # Resources
- ICU_DATA_NAME=icudtl.dat
- ICU_DATA_SOURCE=$(FLUTTER_ARTIFACT_CACHE_DIR)/$(ICU_DATA_NAME)
- FLUTTER_ASSETS_NAME=flutter_assets
- FLUTTER_ASSETS_SOURCE=$(FLUTTER_APP_BUILD_DIR)/$(FLUTTER_ASSETS_NAME)
- # Bundle structure
- BUNDLE_OUT_DIR=$(OUT_DIR)/$(BUILD)
- BUNDLE_DATA_DIR=$(BUNDLE_OUT_DIR)/data
- BUNDLE_LIB_DIR=$(BUNDLE_OUT_DIR)/lib
- BIN_OUT=$(BUNDLE_OUT_DIR)/$(BINARY_NAME)
- ICU_DATA_OUT=$(BUNDLE_DATA_DIR)/$(ICU_DATA_NAME)
- FLUTTER_LIB_OUT=$(BUNDLE_LIB_DIR)/$(notdir $(FLUTTER_LIB))
- # Add relevant code from the wrapper library, which is intended to be statically
- # built into the client.
- WRAPPER_ROOT=$(FLUTTER_LIBRARY_COPY_DIR)/cpp_client_wrapper
- WRAPPER_SOURCES= \
- $(WRAPPER_ROOT)/flutter_window_controller.cc \
- $(WRAPPER_ROOT)/plugin_registrar.cc \
- $(WRAPPER_ROOT)/engine_method_result.cc
- SOURCES+=$(WRAPPER_SOURCES)
- # Headers
- WRAPPER_INCLUDE_DIR=$(WRAPPER_ROOT)/include
- INCLUDE_DIRS=$(FLUTTER_LIBRARY_COPY_DIR) $(WRAPPER_INCLUDE_DIR)
- # The stamp file created by copy_flutter_files.
- FLUTTER_COPY_STAMP_FILE=$(FLUTTER_LIBRARY_COPY_DIR)/.last_copied_flutter_version
- # The Flutter engine version file.
- FLUTTER_ENGINE_VERSION_FILE=$(FLUTTER_ROOT)/bin/internal/engine.version
- # Build settings
- CXX=g++ -std=c++14
- CXXFLAGS.release=-DNDEBUG
- CXXFLAGS=-Wall -Werror $(CXXFLAGS.$(BUILD))
- CPPFLAGS=$(patsubst %,-I%,$(INCLUDE_DIRS))
- LDFLAGS=-L$(BUNDLE_LIB_DIR) \
- -l$(FLUTTER_LIB_NAME) \
- -Wl,-rpath=\$$ORIGIN/lib
- # Targets
- .PHONY: all
- all: $(BIN_OUT) bundle
- .PHONY: bundle
- bundle: $(ICU_DATA_OUT) $(FLUTTER_LIB_OUT) bundleflutterassets
- $(BIN_OUT): $(SOURCES) $(FLUTTER_LIB_OUT)
- mkdir -p $(@D)
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LDFLAGS) -o $@
- $(WRAPPER_SOURCES) $(FLUTTER_LIB) $(ICU_DATA_SOURCE): $(FLUTTER_COPY_STAMP_FILE)
- # When the Flutter engine version changes, the local copy of engine artifacts
- # needs to be updated.
- $(FLUTTER_COPY_STAMP_FILE): $(FLUTTER_ENGINE_VERSION_FILE)
- $(FLUTTER_BIN) precache --linux --no-android --no-ios
- rm -rf $(FLUTTER_LIBRARY_COPY_DIR)
- mkdir -p $(FLUTTER_LIBRARY_COPY_DIR)
- cp $(FLUTTER_ARTIFACT_CACHE_DIR)/*.h $(FLUTTER_LIBRARY_COPY_DIR)/
- cp $(FLUTTER_ARTIFACT_CACHE_DIR)/*.so $(FLUTTER_LIBRARY_COPY_DIR)/
- cp -r $(FLUTTER_ARTIFACT_CACHE_DIR)/cpp_client_wrapper \
- $(FLUTTER_LIBRARY_COPY_DIR)/
- touch $(FLUTTER_COPY_STAMP_FILE)
- $(FLUTTER_LIB_OUT): $(FLUTTER_LIB)
- mkdir -p $(BUNDLE_LIB_DIR)
- cp $(FLUTTER_LIB) $(BUNDLE_LIB_DIR)
- $(ICU_DATA_OUT): $(ICU_DATA_SOURCE)
- mkdir -p $(dir $(ICU_DATA_OUT))
- cp $(ICU_DATA_SOURCE) $(ICU_DATA_OUT)
- # Fully re-copy the assets directory on each build to avoid having to keep a
- # comprehensive list of all asset files here, which would be fragile to changes
- # in the Flutter example (e.g., adding a new font to pubspec.yaml would require
- # changes here).
- .PHONY: bundleflutterassets
- bundleflutterassets: $(FLUTTER_ASSETS_SOURCE)
- mkdir -p $(BUNDLE_DATA_DIR)
- rsync -rpu --delete $(FLUTTER_ASSETS_SOURCE) $(BUNDLE_DATA_DIR)
- # PHONY since the Makefile doesn't have all the dependency information necessary
- # to know if 'build bundle' needs to be re-run.
- .PHONY: $(FLUTTER_ASSETS_SOURCE)
- $(FLUTTER_ASSETS_SOURCE):
- cd $(FLUTTER_APP_DIR); \
- $(FLUTTER_BIN) build bundle $(FLUTTER_BUNDLE_FLAGS)
- .PHONY: clean
- clean:
- rm -rf $(OUT_DIR); \
- cd $(FLUTTER_APP_DIR); \
- $(FLUTTER_BIN) clean
|