182 lines
4.6 KiB
Plaintext
Executable File
182 lines
4.6 KiB
Plaintext
Executable File
# By YZBruh
|
|
|
|
# Copyright 2024 Partition Manager
|
|
#
|
|
# 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.
|
|
|
|
#####
|
|
# sub-make for building package
|
|
#####
|
|
|
|
THIS_IS = src
|
|
|
|
include ../Makefile.inc
|
|
|
|
ifeq ($(INC_OLDENV),true)
|
|
include $(BUILD)/config/oldenv.mk
|
|
endif
|
|
|
|
INCLUDE_DIR := $(realpath ../include)
|
|
PMT_INCDIR := $(INCLUDE_DIR)/pmt
|
|
|
|
# the presence of all source files that are on this list will be checked
|
|
SRCS_REQ := \
|
|
place-holder/debug.c \
|
|
place-holder/help.c \
|
|
place-holder/get_stat.c \
|
|
place-holder/lang_tools.c \
|
|
place-holder/languages.c \
|
|
place-holder/partitiontool.c \
|
|
place-holder/pmt.c \
|
|
place-holder/root.c \
|
|
place-holder/tools.c \
|
|
place-holder/version.c
|
|
|
|
# objects to be used when executable file is created
|
|
OBJS_EXEC := \
|
|
$(SOURCE_DIR)/$(TARGET).o \
|
|
$(SOURCE_DIR)/help.o \
|
|
$(SOURCE_DIR)/version.o \
|
|
$(SOURCE_DIR)/get_stat.o \
|
|
$(SOURCE_DIR)/tools.o \
|
|
$(SOURCE_DIR)/lang_tools.o \
|
|
$(SOURCE_DIR)/languages.o
|
|
|
|
HEADERS_REQ := \
|
|
$(PMT_INCDIR)/pmt/ExternC.h \
|
|
$(PMT_INCDIR)/pmt/Deprecates.h \
|
|
$(PMT_INCDIR)/pmt/HelpMessages.h \
|
|
$(PMT_INCDIR)/pmt/pmt.h \
|
|
$(PMT_INCDIR)/pmt/StringKeys.h \
|
|
$(PMT_INCDIR)/pmt/VersionVars.h
|
|
|
|
PROGRESS_LIST := \
|
|
welcome \
|
|
wait \
|
|
$(SRCS_REQ) \
|
|
$(HEADERS_REQ) \
|
|
pr_obj \
|
|
$(OBJS) \
|
|
make_outdirs \
|
|
pr_sts \
|
|
$(STATIC_LIBS) \
|
|
make_executable \
|
|
wait \
|
|
end_progress
|
|
|
|
define check_hf
|
|
@ [ ! -f "$1" ] \
|
|
&& $(E_NS) " ==> Couldn't found required header file: include/pmt/`basename $1`" \
|
|
&& exit 1
|
|
endef
|
|
|
|
# all target for building
|
|
all: $(PROGRESS_LIST)
|
|
|
|
welcome:
|
|
@ rm -f $(BUILD)/config/oldenv.mk
|
|
@ echo " ---- Partition Manager Builder ---- " \
|
|
&& $(E_NS)
|
|
$(E) " - Version: $(VERSION)"
|
|
$(E) " - Version code: $(VERSION_CODE)" \
|
|
&& $(E_NS)
|
|
$(E) " -------------------------------- " \
|
|
&& $(E_NS)
|
|
@ if [ -f $(SOURCE_DIR)/debug.o ]; then \
|
|
$(E_NS) " - Please clean up before you build it." && echo; \
|
|
$(E_NS) " ----------------------------------- "; \
|
|
exit 1; \
|
|
fi
|
|
$(E) " - Checking required source files..."
|
|
|
|
pr_obj:
|
|
$(E) " - Building objects..."
|
|
|
|
pr_sts:
|
|
$(E) " - Making static libraries..."
|
|
|
|
wait:
|
|
@ sleep 2
|
|
|
|
make_outdirs:
|
|
@ rm -rf $(IN_OUT_DIR)
|
|
@ mkdir $(BINARY_DIR)
|
|
@ mkdir $(PACKAGE_DIR)
|
|
@ mkdir $(STATICLIB_DIR)
|
|
|
|
place-holder/%.c:
|
|
$(E) " CHK $(SOURCE_DIRNAME)/`basename $@`"
|
|
@ if [ ! -f "$(SOURCE_DIR)/`basename $@`" ]; then \
|
|
$(E_NS) " ==> Couldn't found required source file: $(SOURCE_DIRNAME)/`basename $@`"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
$(PMT_INCDIR)/%.h:
|
|
$(E) " CHK include/pmt/`basename $@`"
|
|
@ if [ ! -f "$(INCLUDE_DIR)/pmt/`basename $@`" ]; then \
|
|
$(E_NS) " ==> Couldn't found required header file: include/pmt/`basename $@`"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
$(SOURCE_DIR)/%.o: $(SOURCE_DIR)/%.c
|
|
$(E) " CC $(SOURCE_DIRNAME)/`basename $@`"
|
|
@ $(CC) $(CFLAGS) -c "$<" || exit 1
|
|
|
|
$(TARGET)_%:
|
|
$(E) " AR lib$@.a"
|
|
@ $(AR) rcs "lib$@.a" "$(SOURCE_DIR)/$$(echo "$@" | cut -d'_' -f2).o"
|
|
|
|
make_executable:
|
|
$(E) " - Making executable file..."
|
|
$(E) " LD $(TARGET)"
|
|
@ $(CC) $(CFLAGS) -L$(SOURCE_DIR) $(foreach st,$(STATIC_LIBS),$(shell echo -n -l$(st) )) -o $(TARGET) $(OBJS_EXEC) || exit 1
|
|
|
|
end_progress:
|
|
@ abort_build() { \
|
|
[ -d "$(PACKAGE_DIR)" ] \
|
|
&& rm -rf "$(PACKAGE_DIR)"; \
|
|
[ -d "$(BINARY_DIR)" ] \
|
|
&& rm -rf "$(BINARY_DIR)"; \
|
|
[ -d "$(STATICLIB_DIR)" ] \
|
|
&& rm -rf "$(STATICLIB_DIR)"; \
|
|
exit 1; \
|
|
}; \
|
|
mv $(TARGET) $(BINARY_DIR) || abort_build; \
|
|
mv *.a $(STATICLIB_DIR) || abort_build; \
|
|
$(E_NS) " - Generating package..."; \
|
|
cp $(BINARY_DIR)/$(TARGET) $(PACKAGE_DIR) || abort_build; \
|
|
$(E_NS) " XZ $(OUT_DIRNAME)/package/$(TARGET)-`date +%Y%m%d`.xz"
|
|
xz $(PACKAGE_DIR)/$(TARGET) || abort_build; \
|
|
sleep 1; \
|
|
mv $(PACKAGE_DIR)/$(TARGET).xz $(PACKAGE_DIR)/$(TARGET)-`date +%Y%m%d`.xz || abort_build
|
|
$(E) " - Success" && $(E_NS)
|
|
@ sleep 1
|
|
$(E) " ----------------------------------- "
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(eval STATICLIBS = $(wildcard $(SOURCE_DIR)/*.a))
|
|
$(eval OBJS = $(wildcard $(SOURCE_DIR)/*.o))
|
|
$(info Cleaning files...)
|
|
$(foreach obj, \
|
|
$(OBJS), \
|
|
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(obj))) \
|
|
$(call erase,$(obj)) \
|
|
)
|
|
$(foreach lib, \
|
|
$(STATICLIBS), \
|
|
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(lib))) \
|
|
$(call erase,$(lib)) \
|
|
)
|
|
|
|
# end |