b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2)) |
| 2 | |
| 3 | PKG_USE_NINJA ?= 1 |
| 4 | HOST_USE_NINJA ?= 1 |
| 5 | ifeq ($(PKG_USE_NINJA),1) |
| 6 | PKG_BUILD_PARALLEL ?= 1 |
| 7 | endif |
| 8 | ifeq ($(HOST_USE_NINJA),1) |
| 9 | HOST_BUILD_PARALLEL ?= 1 |
| 10 | endif |
| 11 | PKG_INSTALL:=1 |
| 12 | |
| 13 | ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) |
| 14 | MAKE_FLAGS+=VERBOSE=1 |
| 15 | HOST_MAKE_FLAGS+=VERBOSE=1 |
| 16 | endif |
| 17 | |
| 18 | CMAKE_BINARY_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) |
| 19 | CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) |
| 20 | HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) |
| 21 | HOST_CMAKE_BINARY_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) |
| 22 | MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .) |
| 23 | |
| 24 | ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) |
| 25 | cmake_tool=$(firstword $(TOOLCHAIN_BIN_DIRS))/$(1) |
| 26 | else |
| 27 | cmake_tool=$(shell command -v $(1)) |
| 28 | endif |
| 29 | |
| 30 | ifeq ($(CONFIG_CCACHE),) |
| 31 | CMAKE_C_COMPILER_LAUNCHER:= |
| 32 | CMAKE_CXX_COMPILER_LAUNCHER:= |
| 33 | CMAKE_C_COMPILER:=$(call cmake_tool,$(TARGET_CC)) |
| 34 | CMAKE_CXX_COMPILER:=$(call cmake_tool,$(TARGET_CXX)) |
| 35 | |
| 36 | CMAKE_HOST_C_COMPILER:=$(HOSTCC) |
| 37 | CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX) |
| 38 | else |
| 39 | CCACHE:=$(STAGING_DIR_HOST)/bin/ccache |
| 40 | CMAKE_C_COMPILER_LAUNCHER:=$(CCACHE) |
| 41 | CMAKE_CXX_COMPILER_LAUNCHER:=$(CCACHE) |
| 42 | CMAKE_C_COMPILER:=$(TARGET_CC_NOCACHE) |
| 43 | CMAKE_CXX_COMPILER:=$(TARGET_CXX_NOCACHE) |
| 44 | |
| 45 | CMAKE_HOST_C_COMPILER:=$(HOSTCC_NOCACHE) |
| 46 | CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX_NOCACHE) |
| 47 | endif |
| 48 | CMAKE_AR:=$(call cmake_tool,$(TARGET_AR)) |
| 49 | CMAKE_NM:=$(call cmake_tool,$(TARGET_NM)) |
| 50 | CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB)) |
| 51 | |
| 52 | CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_ROOT_DIR) |
| 53 | CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST) |
| 54 | CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions |
| 55 | CMAKE_HOST_INSTALL_PREFIX = $(HOST_BUILD_PREFIX) |
| 56 | |
| 57 | ifeq ($(HOST_USE_NINJA),1) |
| 58 | CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Ninja" |
| 59 | |
| 60 | define Host/Compile/Default |
| 61 | +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) $(1) |
| 62 | endef |
| 63 | |
| 64 | define Host/Install/Default |
| 65 | +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) install |
| 66 | endef |
| 67 | |
| 68 | define Host/Uninstall/Default |
| 69 | +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) uninstall |
| 70 | endef |
| 71 | else |
| 72 | CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Unix Makefiles" |
| 73 | endif |
| 74 | |
| 75 | ifeq ($(PKG_USE_NINJA),1) |
| 76 | CMAKE_OPTIONS += -DCMAKE_GENERATOR="Ninja" |
| 77 | |
| 78 | define Build/Compile/Default |
| 79 | +$(NINJA) -C $(CMAKE_BINARY_DIR) $(1) |
| 80 | endef |
| 81 | |
| 82 | define Build/Install/Default |
| 83 | +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(CMAKE_BINARY_DIR) install |
| 84 | endef |
| 85 | else |
| 86 | CMAKE_OPTIONS += -DCMAKE_GENERATOR="Unix Makefiles" |
| 87 | endif |
| 88 | |
| 89 | define Build/Configure/Default |
| 90 | mkdir -p $(CMAKE_BINARY_DIR) |
| 91 | (cd $(CMAKE_BINARY_DIR); \ |
| 92 | CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ |
| 93 | CXXFLAGS="$(TARGET_CXXFLAGS) $(EXTRA_CXXFLAGS)" \ |
| 94 | LDFLAGS="$(TARGET_LDFLAGS) $(EXTRA_LDFLAGS)" \ |
| 95 | cmake \ |
| 96 | --no-warn-unused-cli \ |
| 97 | -DCMAKE_SYSTEM_NAME=Linux \ |
| 98 | -DCMAKE_SYSTEM_VERSION=1 \ |
| 99 | -DCMAKE_SYSTEM_PROCESSOR=$(ARCH) \ |
| 100 | -DCMAKE_BUILD_TYPE=$(if $(CONFIG_DEBUG),Debug,Release) \ |
| 101 | -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ |
| 102 | -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ |
| 103 | -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ |
| 104 | -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \ |
| 105 | -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ |
| 106 | -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \ |
| 107 | -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ |
| 108 | -DCMAKE_ASM_COMPILER="$(CMAKE_C_COMPILER)" \ |
| 109 | -DCMAKE_EXE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \ |
| 110 | -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ |
| 111 | -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ |
| 112 | -DCMAKE_AR="$(CMAKE_AR)" \ |
| 113 | -DCMAKE_NM="$(CMAKE_NM)" \ |
| 114 | -DCMAKE_RANLIB="$(CMAKE_RANLIB)" \ |
| 115 | -DCMAKE_FIND_ROOT_PATH="$(CMAKE_FIND_ROOT_PATH)" \ |
| 116 | -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \ |
| 117 | -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ |
| 118 | -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ |
| 119 | -DCMAKE_STRIP=: \ |
| 120 | -DCMAKE_INSTALL_PREFIX=/usr \ |
| 121 | -DDL_LIBRARY=$(STAGING_DIR) \ |
| 122 | -DCMAKE_PREFIX_PATH=$(STAGING_DIR) \ |
| 123 | -DCMAKE_SKIP_RPATH=TRUE \ |
| 124 | -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ |
| 125 | -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ |
| 126 | -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ |
| 127 | -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ |
| 128 | -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ |
| 129 | -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ |
| 130 | $(CMAKE_OPTIONS) \ |
| 131 | $(CMAKE_SOURCE_DIR) \ |
| 132 | ) |
| 133 | endef |
| 134 | |
| 135 | define Build/InstallDev/cmake |
| 136 | $(INSTALL_DIR) $(1) |
| 137 | $(CP) $(PKG_INSTALL_DIR)/* $(1)/ |
| 138 | endef |
| 139 | |
| 140 | Build/InstallDev = $(if $(CMAKE_INSTALL),$(Build/InstallDev/cmake)) |
| 141 | |
| 142 | define Host/Configure/Default |
| 143 | mkdir -p "$(HOST_CMAKE_BINARY_DIR)" |
| 144 | (cd $(HOST_CMAKE_BINARY_DIR); \ |
| 145 | CFLAGS="$(HOST_CFLAGS)" \ |
| 146 | CXXFLAGS="$(HOST_CFLAGS)" \ |
| 147 | LDFLAGS="$(HOST_LDFLAGS)" \ |
| 148 | cmake \ |
| 149 | --no-warn-unused-cli \ |
| 150 | -DCMAKE_BUILD_TYPE=Release \ |
| 151 | -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ |
| 152 | -DCMAKE_C_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ |
| 153 | -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ |
| 154 | -DCMAKE_CXX_COMPILER="$(CMAKE_HOST_CXX_COMPILER)" \ |
| 155 | -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ |
| 156 | -DCMAKE_ASM_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ |
| 157 | -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ |
| 158 | -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ |
| 159 | -DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ |
| 160 | -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ |
| 161 | -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ |
| 162 | -DCMAKE_FIND_ROOT_PATH="$(CMAKE_HOST_FIND_ROOT_PATH)" \ |
| 163 | -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \ |
| 164 | -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ |
| 165 | -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ |
| 166 | -DCMAKE_STRIP=: \ |
| 167 | -DCMAKE_INSTALL_PREFIX=$(CMAKE_HOST_INSTALL_PREFIX) \ |
| 168 | -DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \ |
| 169 | -DCMAKE_SKIP_RPATH=TRUE \ |
| 170 | -DCMAKE_INSTALL_LIBDIR=lib \ |
| 171 | -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ |
| 172 | -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ |
| 173 | -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ |
| 174 | -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ |
| 175 | -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ |
| 176 | -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ |
| 177 | -DBUILD_SHARED_LIBS=OFF \ |
| 178 | $(CMAKE_HOST_OPTIONS) \ |
| 179 | $(HOST_CMAKE_SOURCE_DIR) \ |
| 180 | ) |
| 181 | endef |
| 182 | |
| 183 | MAKE_FLAGS += \ |
| 184 | CMAKE_COMMAND='$$(if $$(CMAKE_DISABLE_$$@),:,$(STAGING_DIR_HOST)/bin/cmake)' \ |
| 185 | CMAKE_DISABLE_cmake_check_build_system=1 |