mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-12-02 17:29:34 +01:00
147 lines
4.4 KiB
Makefile
147 lines
4.4 KiB
Makefile
include app_configuration.mk
|
|
|
|
# Default build type.
|
|
BUILD=debug
|
|
|
|
FLUTTER_MANAGED_DIR=flutter
|
|
FLUTTER_EPHEMERAL_DIR=$(FLUTTER_MANAGED_DIR)/ephemeral
|
|
|
|
# Configuration provided via flutter tool.
|
|
FLUTTER_CONFIG_FILE=$(FLUTTER_EPHEMERAL_DIR)/generated_config.mk
|
|
include $(FLUTTER_CONFIG_FILE)
|
|
|
|
# Dependency locations
|
|
FLUTTER_APP_DIR=$(CURDIR)/..
|
|
FLUTTER_APP_BUILD_DIR=$(FLUTTER_APP_DIR)/build
|
|
|
|
OUT_DIR=$(FLUTTER_APP_BUILD_DIR)/linux
|
|
OBJ_DIR=$(OUT_DIR)/obj/$(BUILD)
|
|
|
|
# Libraries
|
|
FLUTTER_LIB_NAME=flutter_linux_glfw
|
|
FLUTTER_LIB=$(FLUTTER_EPHEMERAL_DIR)/lib$(FLUTTER_LIB_NAME).so
|
|
|
|
# Tools
|
|
FLUTTER_BIN=$(FLUTTER_ROOT)/bin/flutter
|
|
LINUX_BUILD=$(FLUTTER_ROOT)/packages/flutter_tools/bin/tool_backend.sh
|
|
|
|
# Resources
|
|
ICU_DATA_NAME=icudtl.dat
|
|
ICU_DATA_SOURCE=$(FLUTTER_EPHEMERAL_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))
|
|
ALL_LIBS_OUT=$(FLUTTER_LIB_OUT) \
|
|
$(foreach lib,$(EXTRA_BUNDLED_LIBRARIES),$(BUNDLE_LIB_DIR)/$(notdir $(lib)))
|
|
|
|
# Add relevant code from the wrapper library, which is intended to be statically
|
|
# built into the client.
|
|
# Use abspath for the wrapper root, which can contain relative paths; the
|
|
# intermediate build files will be based on the source path, which will cause
|
|
# issues if they start with one or more '../'s.
|
|
WRAPPER_ROOT=$(abspath $(FLUTTER_EPHEMERAL_DIR)/cpp_client_wrapper_glfw)
|
|
WRAPPER_SOURCES= \
|
|
$(WRAPPER_ROOT)/flutter_window_controller.cc \
|
|
$(WRAPPER_ROOT)/plugin_registrar.cc \
|
|
$(WRAPPER_ROOT)/engine_method_result.cc
|
|
|
|
# Use abspath for extra sources, which may also contain relative paths (see
|
|
# note above about WRAPPER_ROOT).
|
|
SOURCES=main.cc window_configuration.cc \
|
|
flutter/generated_plugin_registrant.cc \
|
|
$(WRAPPER_SOURCES) $(abspath $(EXTRA_SOURCES))
|
|
|
|
# Headers
|
|
WRAPPER_INCLUDE_DIR=$(WRAPPER_ROOT)/include
|
|
INCLUDE_DIRS=$(FLUTTER_EPHEMERAL_DIR) $(WRAPPER_INCLUDE_DIR)
|
|
|
|
# Build settings
|
|
ifneq ($(strip $(SYSTEM_LIBRARIES)),)
|
|
EXTRA_CPPFLAGS+=$(patsubst -I%,-isystem%,$(shell pkg-config --cflags $(SYSTEM_LIBRARIES)))
|
|
EXTRA_LDFLAGS+=$(shell pkg-config --libs $(SYSTEM_LIBRARIES))
|
|
endif
|
|
CXX=clang++
|
|
CPPFLAGS.release=-DNDEBUG
|
|
CPPFLAGS.profile=$(CPPFLAGS.release)
|
|
CXXFLAGS.release=-O2
|
|
CXXFLAGS.profile=$(CXXFLAGS.release)
|
|
CXXFLAGS=-std=c++14 -Wall -Werror $(CXXFLAGS.$(BUILD)) $(EXTRA_CXXFLAGS)
|
|
CPPFLAGS=$(patsubst %,-I%,$(INCLUDE_DIRS)) \
|
|
$(CPPFLAGS.$(BUILD)) $(EXTRA_CPPFLAGS)
|
|
LDFLAGS=-L$(BUNDLE_LIB_DIR) \
|
|
-l$(FLUTTER_LIB_NAME) \
|
|
$(EXTRA_LDFLAGS) \
|
|
-Wl,-rpath=\$$ORIGIN/lib
|
|
|
|
# Intermediate files.
|
|
OBJ_FILES=$(SOURCES:%.cc=$(OBJ_DIR)/%.o)
|
|
DEPENDENCY_FILES=$(OBJ_FILES:%.o=%.d)
|
|
|
|
# Targets
|
|
|
|
.PHONY: all
|
|
all: $(BIN_OUT) bundle
|
|
|
|
# Add the plugin targets, and their associated settings.
|
|
include $(FLUTTER_MANAGED_DIR)/generated_plugins.mk
|
|
EXTRA_BUNDLED_LIBRARIES+=$(PLUGIN_LIBRARIES)
|
|
EXTRA_LDFLAGS+=$(PLUGIN_LDFLAGS)
|
|
EXTRA_CPPFLAGS+=$(PLUGIN_CPPFLAGS)
|
|
|
|
# This is a phony target because the flutter tool cannot describe
|
|
# its inputs and outputs yet.
|
|
.PHONY: sync
|
|
sync: $(FLUTTER_CONFIG_FILE)
|
|
$(LINUX_BUILD) linux-x64 $(BUILD)
|
|
|
|
.PHONY: bundle
|
|
bundle: $(ICU_DATA_OUT) $(ALL_LIBS_OUT) bundleflutterassets
|
|
|
|
$(BIN_OUT): $(OBJ_FILES) $(ALL_LIBS_OUT)
|
|
mkdir -p $(@D)
|
|
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OBJ_FILES) $(LDFLAGS) -o $@
|
|
|
|
$(WRAPPER_SOURCES) $(FLUTTER_LIB) $(ICU_DATA_SOURCE) $(FLUTTER_ASSETS_SOURCE) \
|
|
$(PLUGIN_TARGETS): | sync
|
|
|
|
# Plugin library bundling pattern.
|
|
$(BUNDLE_LIB_DIR)/%: $(OUT_DIR)/%
|
|
mkdir -p $(BUNDLE_LIB_DIR)
|
|
cp $< $@
|
|
|
|
$(FLUTTER_LIB_OUT): $(FLUTTER_LIB)
|
|
mkdir -p $(@D)
|
|
cp $< $@
|
|
|
|
$(ICU_DATA_OUT): $(ICU_DATA_SOURCE)
|
|
mkdir -p $(@D)
|
|
cp $< $@
|
|
|
|
-include $(DEPENDENCY_FILES)
|
|
|
|
$(OBJ_DIR)/%.o : %.cc | sync
|
|
mkdir -p $(@D)
|
|
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -c $< -o $@
|
|
|
|
# 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 other files (e.g., adding a new font to pubspec.yaml).
|
|
.PHONY: bundleflutterassets
|
|
bundleflutterassets: $(FLUTTER_ASSETS_SOURCE)
|
|
mkdir -p $(BUNDLE_DATA_DIR)
|
|
rsync -rpu --delete $(FLUTTER_ASSETS_SOURCE) $(BUNDLE_DATA_DIR)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf $(OUT_DIR); \
|
|
cd $(FLUTTER_APP_DIR); \
|
|
$(FLUTTER_BIN) clean
|