From 4278d664473451f89386d27f7be04ca05db8d633 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 09:07:25 +0200 Subject: [PATCH 1/6] Initial changes to support parallel make with bcc64x --- templates/bmake.mpd | 11 +++++++++++ templates/bmakecommon.mpt | 1 + 2 files changed, 12 insertions(+) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index a8e1e302..f6c9adfd 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -42,6 +42,7 @@ EXEFLAGS = <%exeflags%> LINKER_DLL_ARGUMENTS = <%linker_dll_arguments%> LINKER_EXE_ARGUMENTS = <%linker_exe_arguments%> DEBUG_EXT = <%debug_ext%> +<%if(parallel_flags)%>PARALLEL_CFLAGS = <%parallel_flags%><%endif%> !else <%endfor%> !error You must select one of these compilers:<%foreach(compilers)%> <%normalize(uc(compiler))%><%endfor%> @@ -98,6 +99,8 @@ RC = <%rc%> LIBFLAGS = <%libflags%> CCFLAGS = $(CC_CFLAGS)<%if(type_is_binary)%> $(BINARY_FLAGS)<%endif%><%if(compile_flags)%> <%compile_flags%><%endif%> +.nosilent + <%if(use_vcl)%> STARTUP_LETTER = <%if(exename)%>w<%else%><%startup_letter%><%endif%> <%else%> @@ -314,10 +317,18 @@ generated: $(GENERATED_DIRTY) .path$(OBJ_EXT) = $(INTERMEDIATE) +!ifdef PARALLEL_CFLAGS +.path.cpp = $(CPPDIR) +.cpp$(OBJ_EXT): + if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" + $(CC) $(PARALLEL_CFLAGS) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -output-dir $(@D) -c {$? } + +!else .path.cpp = $(CPPDIR) .cpp$(OBJ_EXT): @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< +!endif .path.cxx = $(CPPDIR) .cxx$(OBJ_EXT): diff --git a/templates/bmakecommon.mpt b/templates/bmakecommon.mpt index 2adde99e..bee616a4 100644 --- a/templates/bmakecommon.mpt +++ b/templates/bmakecommon.mpt @@ -140,4 +140,5 @@ exeflags = -tR object_search_path = 0 linker_dll_arguments = $(DLLFLAGS) $(UC_LFLAGS) $(LFLAGS:\=/) $(OBJFILES:\=/) -o $(OUTPUTDIR:\=/)$(NAME)$(DLL_EXT) -Xlinker --out-implib -Xlinker $(OUTPUTDIR:\=/)$(NAME).lib $(LIBFILES:\=/) $(RESOURCE:\=/) linker_exe_arguments = $(EXEFLAGS) $(UC_LFLAGS) $(LFLAGS:\=/) $(OBJFILES:\=/) -o $(OUTPUTDIR:\=/)$(NAME)$(EXE_EXT) $(LIBFILES:\=/) $(RESOURCE:\=/) +parallel_flags = --jobs=0 } From 7e7f2315f3e28af120bc6e75cc63d49d557f2174 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 10:22:28 +0200 Subject: [PATCH 2/6] Don't hide commands, different way to create necessary directories --- templates/bmake.mpd | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index f6c9adfd..909f9197 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -219,8 +219,7 @@ CFLAGS = \ OUTPUTDIR = $(EXEOUTPUTDIR) all:<%if(prebuild)%> __prebuild__<%endif%> $(OUTPUTDIR)$(NAME)$(EXE_EXT)<%if(postbuild)%> __postbuild__<%endif%> -$(OUTPUTDIR)$(NAME)$(EXE_EXT): $(OBJFILES) $(RESOURCE) - @if not exist "$(OUTPUTDIR)" mkdir "$(OUTPUTDIR)" +$(OUTPUTDIR)$(NAME)$(EXE_EXT): $(INTERMEDIATE) $(OUTPUTDIR) $(OBJFILES) $(RESOURCE) <%if(prelink)%> <%eval(prelink)%> <%endif%> @@ -234,8 +233,7 @@ $(OUTPUTDIR)$(NAME)$(EXE_EXT): $(OBJFILES) $(RESOURCE) OUTPUTDIR = <%if(dllout)%><%dllout%><%else%><%libout%><%endif%>\\ all:<%if(prebuild)%> __prebuild__<%endif%> $(OUTPUTDIR)$(NAME)$(DLL_EXT)<%if(postbuild)%> __postbuild__<%endif%> -$(OUTPUTDIR)$(NAME)$(DLL_EXT): $(OBJFILES) $(RESOURCE) - @if not exist "$(OUTPUTDIR)" mkdir "$(OUTPUTDIR)" +$(OUTPUTDIR)$(NAME)$(DLL_EXT): $(INTERMEDIATE) $(OUTPUTDIR) $(OBJFILES) $(RESOURCE) <%if(prelink)%> <%eval(prelink)%> <%endif%> @@ -250,8 +248,7 @@ $(OUTPUTDIR)$(NAME)$(DLL_EXT): $(OBJFILES) $(RESOURCE) OUTPUTDIR = <%libout%>\\ all:<%if(prebuild)%> __prebuild__<%endif%> $(OUTPUTDIR)$(NAME)$(LIB_EXT)<%if(postbuild)%> __postbuild__<%endif%> -$(OUTPUTDIR)$(NAME)$(LIB_EXT): $(OBJFILES) - @if not exist "$(OUTPUTDIR)" mkdir "$(OUTPUTDIR)" +$(OUTPUTDIR)$(NAME)$(LIB_EXT): $(INTERMEDIATE) $(OUTPUTDIR) $(OBJFILES) $(TLIB) $(LIBFLAGS) $(OUTPUTDIR)$(NAME)$(LIB_EXT) @&&! + $(**: = &^ + ) @@ -315,45 +312,47 @@ all:<%if(prebuild)%> __prebuild__<%endif%> $(GENERATED_DIRTY)<%if(postbuild)%> _ generated: $(GENERATED_DIRTY) @-rem +$(INTERMEDIATE): + @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" + +<%if(exename || sharedname || staticname)%> +$(OUTPUTDIR): + @if not exist "$(OUTPUTDIR)" mkdir "$(OUTPUTDIR)" +<%endif%> + .path$(OBJ_EXT) = $(INTERMEDIATE) !ifdef PARALLEL_CFLAGS .path.cpp = $(CPPDIR) .cpp$(OBJ_EXT): - if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" $(CC) $(PARALLEL_CFLAGS) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -output-dir $(@D) -c {$? } !else .path.cpp = $(CPPDIR) .cpp$(OBJ_EXT): - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + (CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< !endif .path.cxx = $(CPPDIR) .cxx$(OBJ_EXT): - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< .path.cc = $(CPPDIR) .cc$(OBJ_EXT): - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< .path.C = $(CPPDIR) .C$(OBJ_EXT): - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< .path.c = $(CPPDIR) .c$(OBJ_EXT): - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< <%foreach(source_files)%> <%if(transdir(source_file) || flag_overrides(source_file, buildflags))%> -"$(INTERMEDIATE)\<%transdir(source_file)%><%basenoextension(source_file)%>$(OBJ_EXT)": - @if not exist "$(INTERMEDIATE)\<%transdir(source_file)%>" mkdir "$(INTERMEDIATE)\<%transdir(source_file)%>" +"$(INTERMEDIATE)\<%transdir(source_file)%><%basenoextension(source_file)%>$(OBJ_EXT)" + if not exist "$(INTERMEDIATE)\<%transdir(source_file)%>" mkdir "$(INTERMEDIATE)\<%transdir(source_file)%>" $(CC) <%if(flag_overrides(source_file, buildflags))%><%flag_overrides(source_file, buildflags)%> <%endif%>$(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) <%source_file%> <%endif%> <%endfor%> @@ -362,12 +361,12 @@ generated: $(GENERATED_DIRTY) .path.res = $(INTERMEDIATE) .path.rc = $(RESDIR) .rc.res: - @if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" - $(RC) $(RC_FLAGS) -fo$@ $< + if not exist "$(INTERMEDIATE)" mkdir "$(INTERMEDIATE)" + $(RC) $(RC_FLAGS) -fo$@ $< <%foreach(resource_files)%> <%if(transdir(resource_file))%> "$(INTERMEDIATE)\<%transdir(resource_file)%><%basenoextension(resource_file)%>.res": - @if not exist "$(INTERMEDIATE)\<%transdir(resource_file)%>" mkdir "$(INTERMEDIATE)\<%transdir(resource_file)%>" + if not exist "$(INTERMEDIATE)\<%transdir(resource_file)%>" mkdir "$(INTERMEDIATE)\<%transdir(resource_file)%>" $(RC) -fo$@ <%resource_file%> <%endif%> <%endfor%> From d71da943748632e139ddad23e83e09f2e9846fe7 Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 10:37:20 +0200 Subject: [PATCH 3/6] Introduce MPC_NUMBER_OF_PROCESSORS Makes it possible to configure the number of jobs from the user --- templates/bmake.mpd | 4 ++++ templates/bmakecommon.mpt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index 909f9197..3f0d22f8 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -99,6 +99,10 @@ RC = <%rc%> LIBFLAGS = <%libflags%> CCFLAGS = $(CC_CFLAGS)<%if(type_is_binary)%> $(BINARY_FLAGS)<%endif%><%if(compile_flags)%> <%compile_flags%><%endif%> +!ifndef MPC_NUMBER_OF_PROCESSORS +MPC_NUMBER_OF_PROCESSORS = $(NUMBER_OF_PROCESSORS) +!endif + .nosilent <%if(use_vcl)%> diff --git a/templates/bmakecommon.mpt b/templates/bmakecommon.mpt index bee616a4..08d4c330 100644 --- a/templates/bmakecommon.mpt +++ b/templates/bmakecommon.mpt @@ -140,5 +140,5 @@ exeflags = -tR object_search_path = 0 linker_dll_arguments = $(DLLFLAGS) $(UC_LFLAGS) $(LFLAGS:\=/) $(OBJFILES:\=/) -o $(OUTPUTDIR:\=/)$(NAME)$(DLL_EXT) -Xlinker --out-implib -Xlinker $(OUTPUTDIR:\=/)$(NAME).lib $(LIBFILES:\=/) $(RESOURCE:\=/) linker_exe_arguments = $(EXEFLAGS) $(UC_LFLAGS) $(LFLAGS:\=/) $(OBJFILES:\=/) -o $(OUTPUTDIR:\=/)$(NAME)$(EXE_EXT) $(LIBFILES:\=/) $(RESOURCE:\=/) -parallel_flags = --jobs=0 +parallel_flags = --jobs=$(MPC_NUMBER_OF_PROCESSORS) } From fecd66ec2ff30caa49f06ddda2fe23c94b6f526a Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 10:40:46 +0200 Subject: [PATCH 4/6] Fixed error --- templates/bmake.mpd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index 3f0d22f8..8dcae03c 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -334,7 +334,7 @@ $(OUTPUTDIR): !else .path.cpp = $(CPPDIR) .cpp$(OBJ_EXT): - (CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< + $(CC) $(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) $< !endif .path.cxx = $(CPPDIR) From 1a1f416f5e586883c690f99fb19c3ff44c6ba2af Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 10:52:20 +0200 Subject: [PATCH 5/6] Add back missing semicolon --- templates/bmake.mpd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index 8dcae03c..90435d7f 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -355,7 +355,7 @@ $(OUTPUTDIR): <%foreach(source_files)%> <%if(transdir(source_file) || flag_overrides(source_file, buildflags))%> -"$(INTERMEDIATE)\<%transdir(source_file)%><%basenoextension(source_file)%>$(OBJ_EXT)" +"$(INTERMEDIATE)\<%transdir(source_file)%><%basenoextension(source_file)%>$(OBJ_EXT)": if not exist "$(INTERMEDIATE)\<%transdir(source_file)%>" mkdir "$(INTERMEDIATE)\<%transdir(source_file)%>" $(CC) <%if(flag_overrides(source_file, buildflags))%><%flag_overrides(source_file, buildflags)%> <%endif%>$(DYN_FLAGS) $(STATIC_FLAGS) $(OCFLAGS) $(CG_CFLAGS) $(UC_CFLAGS) $(THREAD_FLAGS) $(CCFLAGS) $(CFLAGS) $(WARN_FLAGS) -c -o $(@D)\$(@F) <%source_file%> <%endif%> From 46be4ef078602b8316b79e3af330327827d754bb Mon Sep 17 00:00:00 2001 From: Johnny Willemsen Date: Wed, 6 Aug 2025 14:28:22 +0200 Subject: [PATCH 6/6] Default to jobs==0, meaning all cores --- templates/bmake.mpd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/bmake.mpd b/templates/bmake.mpd index 90435d7f..a51dbba9 100644 --- a/templates/bmake.mpd +++ b/templates/bmake.mpd @@ -100,7 +100,7 @@ LIBFLAGS = <%libflags%> CCFLAGS = $(CC_CFLAGS)<%if(type_is_binary)%> $(BINARY_FLAGS)<%endif%><%if(compile_flags)%> <%compile_flags%><%endif%> !ifndef MPC_NUMBER_OF_PROCESSORS -MPC_NUMBER_OF_PROCESSORS = $(NUMBER_OF_PROCESSORS) +MPC_NUMBER_OF_PROCESSORS = 0 !endif .nosilent