b0933fe431
File uid and gid configuration for builtin fs, if set-user-ID bit is set in the file permissions, then the euid of process set as file uid. Use the confiuration to emulate builtin app set. MODE must octal number and use similar with linux chmod OCTAL-MODE FILE UID = 2000 GID = 3000 MODE = 06555 Signed-off-by: fangxinyong <fangxinyong@xiaomi.com>
171 lines
5.3 KiB
Plaintext
171 lines
5.3 KiB
Plaintext
############################################################################
|
|
# apps/Make.defs
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership. The
|
|
# ASF licenses this file to you 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.
|
|
#
|
|
############################################################################
|
|
|
|
TOPDIR ?= $(APPDIR)/import
|
|
include $(TOPDIR)/Make.defs
|
|
|
|
# Application Directories
|
|
|
|
# BUILDIRS is the list of top-level directories containing Make.defs files
|
|
# CLEANDIRS is the list of all top-level directories containing Makefiles.
|
|
# It is used only for cleaning.
|
|
|
|
BUILDIRS := $(dir $(wildcard $(APPDIR)/*/Make.defs))
|
|
BUILDIRS := $(filter-out $(APPDIR)/import/,$(BUILDIRS))
|
|
CONFIGDIRS := $(filter-out $(APPDIR)/builtin/,$(BUILDIRS))
|
|
CONFIGDIRS := $(filter-out $(dir $(wildcard $(APPDIR)/*/Kconfig)),$(CONFIGDIRS))
|
|
CLEANDIRS := $(dir $(wildcard $(APPDIR)/*/Makefile))
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
BUILDIRS := $(subst /,\,$(BUILDIRS))
|
|
CONFIGDIRS := $(subst /,\,$(CONFIGDIRS))
|
|
CLEANDIRS := $(subst /,\,$(CLEANDIRS))
|
|
endif
|
|
|
|
# CONFIGURED_APPS is the application directories that should be built in
|
|
# the current configuration.
|
|
|
|
CONFIGURED_APPS :=
|
|
|
|
define Add_Application
|
|
include $(1)Make.defs
|
|
endef
|
|
|
|
$(foreach BDIR, $(BUILDIRS), $(eval $(call Add_Application,$(BDIR))))
|
|
|
|
# File extensions
|
|
|
|
CXXEXT ?= .cxx
|
|
RUSTEXT ?= .rs
|
|
ZIGEXT ?= .zig
|
|
|
|
# Library path
|
|
|
|
LIBPATH ?= $(TOPDIR)$(DELIM)staging
|
|
|
|
# The install path
|
|
|
|
BINDIR ?= $(APPDIR)$(DELIM)bin
|
|
|
|
# The final build target
|
|
|
|
BIN ?= $(APPDIR)$(DELIM)libapps$(LIBEXT)
|
|
WBIN ?= $(APPDIR)$(DELIM)wasm$(DELIM)libwasm$(LIBEXT)
|
|
|
|
# Tools
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
MKKCONFIG ?= $(APPDIR)$(DELIM)tools$(DELIM)mkkconfig.bat
|
|
else
|
|
MKKCONFIG ?= $(APPDIR)$(DELIM)tools$(DELIM)mkkconfig.sh
|
|
endif
|
|
|
|
# Builtin Registration
|
|
|
|
BUILTIN_REGISTRY = $(APPDIR)$(DELIM)builtin$(DELIM)registry
|
|
DEPCONFIG = $(TOPDIR)$(DELIM).config
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
|
|
define REGISTER
|
|
$(Q) echo Register: $1
|
|
$(Q) echo { "$(subst ",,$(1))", $2, $3, $(patsubst ,0,$(subst ",,$(4))), $(patsubst ,0,$(5)), $(patsubst ,0,$(6)), $(patsubst ,0555,$(7))}, > "$(BUILTIN_REGISTRY)$(DELIM)$1.bdat"
|
|
$(Q) echo int $(subst ",,$(4))(int argc, char *argv[]); > "$(BUILTIN_REGISTRY)$(DELIM)$1.pdat"
|
|
|
|
$(Q) touch $(BUILTIN_REGISTRY)$(DELIM).updated"
|
|
endef
|
|
else
|
|
define REGISTER
|
|
$(Q) echo Register: $1
|
|
$(Q) echo { "$(subst ",,$(1))", $2, $3, $(subst ",,$(4)) }, > "$(BUILTIN_REGISTRY)$(DELIM)$1.bdat"
|
|
$(Q) echo int $(subst ",,$(4))(int argc, char *argv[]); > "$(BUILTIN_REGISTRY)$(DELIM)$1.pdat"
|
|
|
|
$(Q) touch $(BUILTIN_REGISTRY)$(DELIM).updated"
|
|
endef
|
|
endif
|
|
else
|
|
ifeq ($(CONFIG_SCHED_USER_IDENTITY),y)
|
|
define REGISTER
|
|
$(Q) echo "{ \"$1\", $2, $3, $(patsubst ,0,$(4)), $(patsubst ,0,$(5)), $(patsubst ,0,$(6)), $(patsubst ,0555,$(7)) }," > "$(BUILTIN_REGISTRY)$(DELIM)$1.bdat"
|
|
$(Q) if [ ! -z $4 ]; then \
|
|
echo "int $4(int argc, char *argv[]);" > "$(BUILTIN_REGISTRY)$(DELIM)$1.pdat"; \
|
|
fi;
|
|
$(Q) touch "$(BUILTIN_REGISTRY)$(DELIM).updated"
|
|
endef
|
|
else
|
|
define REGISTER
|
|
$(Q) echo "Register: $1"
|
|
$(Q) echo "{ \"$1\", $2, $3, $4 }," > "$(BUILTIN_REGISTRY)$(DELIM)$1.bdat"
|
|
$(Q) if [ ! -z $4 ]; then \
|
|
echo "int $4(int argc, char *argv[]);" > "$(BUILTIN_REGISTRY)$(DELIM)$1.pdat"; \
|
|
fi;
|
|
$(Q) touch "$(BUILTIN_REGISTRY)$(DELIM).updated"
|
|
endef
|
|
endif
|
|
endif
|
|
|
|
# Standard include path
|
|
|
|
CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)include"
|
|
CXXFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)include"
|
|
|
|
NUTTXLIB ?= $(call CONVERT_PATH,$(TOPDIR)$(DELIM)staging)
|
|
|
|
# Function to get entry index
|
|
|
|
define GETINDEX
|
|
$(eval i=1)
|
|
$(eval entry=)
|
|
$(foreach e,$(2), \
|
|
$(if $(filter $(notdir $(1)),$(notdir $(e))), \
|
|
$(eval entry=$(1)), \
|
|
$(if $(entry), \
|
|
,$(eval i=$(shell expr $(i) + 1)) \
|
|
) \
|
|
) \
|
|
)
|
|
$(i)
|
|
endef
|
|
|
|
# SPLITVARIABLE - Split long variables into specified batches
|
|
# Usage: $(call SPLITVARIABLE, variable-def, variable-ref, batch-size)
|
|
#
|
|
# Example: VAR:= a b c x y z foo bar
|
|
# $(call SPLITVARIABLE, VAR, $(VAR), 3)
|
|
# $(foreach, num, $(VAR_TOTAL), $(shell echo $(VAR_$(num))))
|
|
# Return new variable definition:
|
|
# $(variable-def)_TOTAL : total split sequence , start with 1.
|
|
# $(variable-def)_$(num) : newly defined variable , ended with batch num.
|
|
# In the case above:
|
|
# $(VAR_TOTAL) = 1 2 3
|
|
# $(VAR_1) = a b c
|
|
# $(VAR_2) = x y z
|
|
# $(VAR_3) = foo bar
|
|
|
|
define SPLITVARIABLE
|
|
$(eval PREFIX = $(1))
|
|
$(eval BATCH_SIZE = $(3))
|
|
$(eval TOTAL_BATCH = $(shell expr $(words $(2)) / $(BATCH_SIZE) + 1))
|
|
$(eval $(PREFIX)_TOTAL = $(shell seq 1 $(TOTAL_BATCH)))
|
|
$(foreach idx, $($(PREFIX)_TOTAL), \
|
|
$(eval FROMINDEX=$(shell expr 1 + $(idx) \* $(BATCH_SIZE) - $(BATCH_SIZE))) \
|
|
$(eval $(PREFIX)_$(idx)=$(wordlist $(FROMINDEX), $(shell expr $(FROMINDEX) + $(BATCH_SIZE) - 1), $(2))) \
|
|
)
|
|
endef
|