11CPP = c++ # المترجم
2- # CPPFLAGS = -Wall - std=c++20 # معاملات الترجمة
3- CPPFLAGS = -w -O3 -std=c++20 # بدون تحذيرات، مع التشغيل على نظام aarch64a
4- # CPPFLAGS = -O3 -std=c++20
2+ CPPFLAGS = -std=c++20
3+ RELEASE_FLAGS = -O2 -w
4+ DEBUG_FLAGS = -O0 -g
55# -g تخزين معلومات debug
66# -Wall طباعة معظم التنبيهات
77# -w عدم طباعة التنبيهات
@@ -11,34 +11,33 @@ BUILD_DIR = build
1111OBJ_DIR = $(BUILD_DIR ) /obj
1212TARGET = $(BUILD_DIR ) /alif
1313
14- SOURCES = $(wildcard $(SOURCE_DIR ) /Alif/* .cpp) \
15- $(wildcard $(SOURCE_DIR ) /AlifCore/Objects/* .cpp) \
14+
15+ SOURCES = $(wildcard $(SOURCE_DIR ) /Alif/* .cpp) \
16+ $(wildcard $(SOURCE_DIR ) /AlifCore/Objects/* .cpp) \
1617 $(wildcard $(SOURCE_DIR ) /AlifCore/Objects/dtoa/* .cpp) \
17- $(wildcard $(SOURCE_DIR ) /Modules/* .cpp) \
18- $(wildcard $(SOURCE_DIR ) /Modules/_io/* .cpp) \
18+ $(wildcard $(SOURCE_DIR ) /Modules/* .cpp) \
19+ $(wildcard $(SOURCE_DIR ) /Modules/_io/* .cpp) \
1920
20- INCLUDES = -I$(SOURCE_DIR ) /Alif \
21- -I$(SOURCE_DIR ) /AlifCore/Include/Core \
22- -I$(SOURCE_DIR ) /AlifCore/Include/Main \
21+ INCLUDES = -I$(SOURCE_DIR ) /Alif \
22+ -I$(SOURCE_DIR ) /AlifCore/Include/Core \
23+ -I$(SOURCE_DIR ) /AlifCore/Include/Main \
2324 -I$(SOURCE_DIR ) /AlifCore/Include/Main/Atomics \
2425 -I$(SOURCE_DIR ) /AlifCore/Include/Main/mimalloc \
2526 -I$(SOURCE_DIR ) /AlifCore/Include/Main/StringLib \
2627 -I$(SOURCE_DIR ) /AlifCore/Include/Main/FrozenModules \
27- -I$(SOURCE_DIR ) /AlifCore/Objects/clinic \
28- -I$(SOURCE_DIR ) /Modules/_io \
29- -I$(SOURCE_DIR ) /Modules/_io/clinic \
28+ -I$(SOURCE_DIR ) /AlifCore/Objects/clinic \
29+ -I$(SOURCE_DIR ) /Modules/_io \
30+ -I$(SOURCE_DIR ) /Modules/_io/clinic \
31+
32+
33+ # تحديد اعلام بناء البرنامج
34+ release : CPPFLAGS += $(RELEASE_FLAGS )
35+ debug : CPPFLAGS += $(DEBUG_FLAGS )
36+
37+ all : release
38+ release : $(TARGET )
39+ debug : $(TARGET )
3040
31- # مرحلة إنشاء الملفات المطلوبة
32- ifeq ($(wildcard $(BUILD_DIR ) ) ,)
33- $(BUILD_DIR ) :
34- mkdir -p $@
35- mkdir -p $(OBJ_DIR )
36- mkdir -p $(OBJ_DIR ) /Alif
37- mkdir -p $(OBJ_DIR ) /AlifCore/Objects
38- mkdir -p $(OBJ_DIR ) /AlifCore/Objects/dtoa
39- mkdir -p $(OBJ_DIR ) /Modules
40- mkdir -p $(OBJ_DIR ) /Modules/_io
41- endif
4241
4342# تقوم هذه التعليمة بأخذ كل ملفات المصدر المنتهية ب .cpp
4443# وتستبدلها بالملفات المنتهية ب .o
@@ -60,9 +59,8 @@ CPPFLAGS += $(addprefix ,$(INCLUDES))
6059# يتم استخدام العلامة النسبية % لتحديد الجزء المتغير من الاسم
6160# (على سبيل المثال، file1 في file1.cpp و file1.o).
6261$(OBJ_DIR ) /% .o : $(SOURCE_DIR ) /% .cpp | $(OBJ_DIR )
63- $(CPP ) $(CPPFLAGS ) -c $< -o $@
64-
65-
62+ @echo " ترجمة.." $<
63+ @$(CPP ) $(CPPFLAGS ) -c $< -o $@
6664
6765# يقوم بتحديد قاعدة لربط ملفات الكائنات (OBJECTS)
6866# إلى ملف الهدف النهائي (TARGET).
@@ -73,19 +71,39 @@ $(OBJ_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(OBJ_DIR)
7371# يتم استخدام العلامة النسبية | لتأكيد أن مسار الكائنات (BUILD_DIR)
7472# يجب أن يكون موجودًا قبل بدء عملية الربط.
7573$(TARGET ) : $(OBJECTS ) | $(BUILD_DIR )
76- $(CPP ) $^ -o $@
74+ @echo " جاري الربط..."
75+ @$(CPP ) $^ -o $@
76+ @echo " تم البناء بنجاح"
7777
78+ # إنشاء الملفات المطلوبة
79+ ifeq ($(wildcard $(BUILD_DIR ) ) ,)
80+ $(BUILD_DIR ) :
81+ @mkdir -p $@
82+ $(OBJ_DIR ) :
83+ @mkdir -p $@
84+ @mkdir -p $(OBJ_DIR ) /Alif
85+ @mkdir -p $(OBJ_DIR ) /AlifCore/Objects
86+ @mkdir -p $(OBJ_DIR ) /AlifCore/Objects/dtoa
87+ @mkdir -p $(OBJ_DIR ) /Modules
88+ @mkdir -p $(OBJ_DIR ) /Modules/_io
89+ endif
7890
79- all : $(TARGET )
8091
8192clean :
8293 rm -rf $(BUILD_DIR )
8394
84- .PHONY : all clean
95+ .PHONY : all clean release debug
8596
8697
8798# تقوم هذه التعليمة بإضافة أمر الى make
8899# حيث يصبح make -j(nproc)
89100# وذلك لبناء اللغة بإستخدام ممرات متعددة multithread
90101MAKEFLAGS += -j$(shell nproc)
91102
103+ help :
104+ @echo " نظام بناء لغة ألف النسخة الخامسة"
105+ @echo " طريقة البناء:"
106+ @echo " make # لبناء اللغة في وضع الإصدار"
107+ @echo " make release # لبناء اللغة في وضع الإصدار"
108+ @echo " make debug # لبناء اللغة في وضع تتبع الاخطاء"
109+ @echo " make clean # لحذف جميع ملفات البناء"
0 commit comments