bmk 3 - Chirpy Chipmunk
BlitzMax Forums/Brucey's Modules/bmk 3 - Chirpy Chipmunk
| ||
I've created a update for bmk_ng on github for a somewhat re-engineered version of bmk. You can find it here : https://github.com/bmx-ng/bmk The main change is a rewritten dependency resolver, which now allows for several useful features : * proper parallel build of source, from modules to app. * no longer required to specifically build modules. They will be built as needed for your app. * progress percentage indicator, as a whole for all required source. It scales to the number of cores on your box, so the more the merrier. Caveats : * May not work as described above :-p * May crash or not link your apps correctly. Feel free to file a bug report with relevant information. Remember to always back up your stuff before playing with new toys! :o) |
| ||
Updated Caveats above as it is now capable of building with legacy BlitzMax (i.e. the official one which generates asm). |
| ||
Sounds interesting... |
| ||
Can I get a compiled exe of that somewhere? I don't want to break anything. |
| ||
Updated original post as testing on the branch indicates that generally it seems to be working as expected now across platforms. The branch code has now been pushed into master (gone live, if you will). Can I get a compiled exe of that somewhere? You can download the source to somewhere and build it with your standard version of BlitzMax. Then copy over the bmk.exe, make.bmk and core.bmk into your bin folder. I suggest backing up your original bmk.exe first though - and any make.bmk you may have there if you are already using my bmk If it doesn't work, then you simply put the old stuff back, and rebuild. To gain much out of this, you need to build bmk with threading enabled. That will create a bmk.mt binary, which you will need to rename before putting it in your bin folder. The program scales with the number of available cores, so the more, the merrier. |
| ||
Thanks for your input. Recompiling all stuff went well and is überfast compared to the normal bmk.exe. :) But I get an error message when I want to compile my own code now: C:/BlitzMax/bin/ld.exe: cannot find -lwinpthread Could be because I'm using TDM-GCC 4.9.2.? |
| ||
Just tried replacing my standard bmk.exe and rebuilding modules, and got:Building Modules [ 0%] Compiling:glue.cpp [ 0%] Compiling:glue.cpp [ 0%] Compiling:freeimageglue.cpp [ 0%] Compiling:DeprecationMgr.cpp [ 0%] Compiling:BitmapAccess.cpp [ 0%] Compiling:CacheFile.cpp [ 0%] Compiling:ColorLookup.cpp [ 0%] Compiling:Conversion.cpp I:/Development/DevTools/Blitz/BlitzMax/mod/bah.mod/freeimage.mod/src/FreeImage/Conversion.cpp: In function 'FIBITMAP* FreeImage_ColorQuantizeEx(FIBITMAP*, FREE_IMAGE_QUANTIZE, int, int, RGBQUAD*)': I:/Development/DevTools/Blitz/BlitzMax/mod/bah.mod/freeimage.mod/src/FreeImage/Conversion.cpp:387:26: error: exception handling disabled, use -fexceptions to enable Build Error: failed to compile I:/Development/DevTools/Blitz/BlitzMax/mod/bah.mod/freeimage.mod/src/FreeImage/Conversion.cpp Process complete I built bmk.bmx with standard BlitzMax build, then put bmk.exe into standard BlitzMax -> bin. Is that right? Building as non-threaded, non-GUI, non-debug from MaxIDE... |
| ||
I built bmk.bmx with standard BlitzMax build, then put bmk.exe into standard BlitzMax -> bin. Is that right? I'm just rubbish at explaining things, I think ;-) Did you also copy core.bmk and make.bmk ? (these are lua files that implement some of bmk's functionality) |
| ||
cannot find -lwinpthread There is a libwinpthread.a in x86_64-w64-mingw32\lib32 (or whatever is the 32-bit equivalent folder, if you are using the 32-bit version of 4.9.2). You probably need to copy that into your BlitzMax/lib folder. |
| ||
I seems I need to try building against more different configurations of BlitzMax... |
| ||
It works, but new issues with pixmaps on buttons and custom.o file: |
| ||
What's a custom.o file? |
| ||
By the way -- Chirpy Chipmunk? What's next, Dorky Dolphin? Delirious Dingo? |
| ||
Jeepers! Built it properly and the speed difference is amazing! I had indeed missed out copying the two .bmk files (I had old ones in there), but on sorting that it Rebuilt All Modules... just as slowly as BMK-original. Then I realised I needed to build as multi-threaded (I'd assumed single-threaded would spawn a bunch of processes), and that's when it really took off! Pegged out my six cores at 98% and just flew through Rebuild All Modules -- brilliant job! |
| ||
What's next, Dorky Dolphin? Delirious Dingo? *shrug* |
| ||
Hi, seems a nice addition. As I tried it out received an error trying to compile this: SuperStrict Import "C:\Blitzmax\Source\Functions\helper_functions.bmx" Print "Hello world!"Error was: Building untitled1 [ 99%] Processing:untitled1.bmx [ 99%] Compiling:untitled1.bmx.gui.debug.win32.x86.s flat assembler version 1.69.14 (1048575 kilobytes memory) 3 passes, 2411 bytes. [100%] Linking:untitled1.debug.exe C:/BlitzMax/tmp/.bmx/untitled1.bmx.gui.debug.win32.x86.o:(code+0x36): undefined reference to `__bb_functions_helper_functions' Build Error: Failed to link C:/BlitzMax/tmp/untitled1.debug.exe Process complete Can anyone confirm this or is it just me ? -Henri |
| ||
I really want to give this a try but can't work out how to actually do it? :( Can you give an incredibly simple step by step guide on how to compile and get everything working? I'm on a mac and have blitzmax 1.5 here with the community IDE I have no idea on where to start, what to download, what environment to run, how to compile, etc :( |
| ||
Get the source from https://github.com/bmx-ng/bmk Backup the original bmk (location: Blitzmax/bin) Open the bmk.bmx in the IDE, build with threading enabled. Copy the built bmk.mt to blitzmax/bin folder, rename to bmk. Also copy core.bmk & make.bmk from the source folder to blitzmax/bin. Rebuild modules.. Would also recomend getting Brucey's updated brl & pub modules from https://github.com/maxmods Also back up the original module folder(s) just in case. Oh, if you don't have git, there's always the "Download ZIP" button over to the right on each repo.. Ole JR |
| ||
ok, sorta got thing working now So,this should generate 64bit code now? I need to compile a lot of secondary files now ;/ ok, get a compile, with the [ xx%] processing:etc This all goes well until one file (of mine) which then just sits there looking at me at 90% I remember Brucey mentioning about not using byte pointers or something - this file uses byte pointers - what is the solution? |
| ||
This alone isn't for 64bit, just faster x86 combiles.. |
| ||
ok, no problem :) thanks |
| ||
*shrug* -+ Brucey +- Don't get me wrong, -- it's cute, just curious. ;-) |
| ||
wow talk about fast! no matter which MinGW I change it to (currently using TDM64 4.9.2-3) or even when I swapped it to 4.8.1-3 it always seems to fail when attempting to link pub.win32 for me. I have the brl and pub modules from brucey's git repository and I have updated bcc also, any idea what I am doing wrong? Also has anyone else noticed the slight text irregularity in digesteroids 64 bit builds that appears at the top after playing a game, the score hud at the top shrinks down in size a few times until it goes back to the menu and then it is all good again until you play another game then it happens all over again. It is more noticeable in the tempest 64 bit build from samples also where it tries to display the vector font, the 32 bit builds however do not appear to have any problems, regardless it is wicked fast and damn impressive! Brucey you are amazing mate! Building Modules [ 59%] Processing:appstub.bmx [ 61%] Processing:map.bmx [ 63%] Processing:opengl.bmx [ 63%] Processing:commctrl.bmx [ 63%] Processing:richedit.bmx [ 64%] Linking: c:\4.9.2-3/bin/ld.exe: cannot open output file -Lc:\4.9.2-3/lib/gcc/x86_64-w64-mingw32/4.9.2/32: Invalid argument Build Error: Failed to link Process complete |
| ||
-Lc:\4.9.2-3/lib/gcc/x86_64-w64-mingw32/4.9.2/32 I probably need to wrap all the paths in a call the RealPath()... It is more noticeable in the tempest 64 bit build from samples also where it tries to display the vector font, the 32 bit builds however do not appear to have any problems Could be a 64-bit porting issue - somewhere. |
| ||
It works, but new issues with pixmaps on buttons and custom.o file It's now correctly handling .o imports, so the pixmaps and app icon are displayed now. Thanks for letting me test your app ! Interestingly, I dropped the required modules into the mod dir and simply did an app build from the IDE. Since the new bmk is now resolving dependencies automagically, it built those new modules for me before compiling the app itself ;-) |
| ||
Can anyone confirm this or is it just me ? The latest path resolving changes appear to fix your Import issue. |
| ||
@braxton You should only see "Linking:" when building an application, and generally it is the *last* thing to happen in a build, so I'd expect it to be around the 100% mark in the process. Your output appears to imply that it wants to link half-way through the modules build (as part of pub.win32), so there's something different with your configuration that it can't handle for some reason. How are you specifying your MinGW ? In the MINGW environment variable? |
| ||
Hi Brucey, yes I am setting it via the MinGW environment variable, and I am doing it like so to test your absolutely smashing bmk! @Echo Off Set BlitzMax=c:\blitzmax_NG Set MinGW=%blitzmax%\MinGW32 rem Set MinGW=c:\4.9.2-3 Set Path=%MinGW%\bin Echo %BlitzMax% Echo %MinGW% MaxIDE-ng.exe I found that if I did not set the MinGW environment variable then I could only rebuild all modules from a command prompt as it is greyed out in the menu. I have pasted 2 sample command prompt build all outputs below. I have tried this with a threaded and non threaded bcc and it produces the same result, still floored that it is so wicked fast! MaxIDE-ng: [ 63%] Archiving:openal.debug.win32.x86.a [ 63%] Processing:opengl.bmx [ 63%] Archiving:opengles.debug.win32.x86.a [ 63%] Archiving:stdc.debug.win32.x86.a [ 63%] Processing:commctrl.bmx [ 63%] Processing:richedit.bmx [ 64%] Archiving:zlib.debug.win32.x86.a [ 64%] Linking: C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/openal.mod/openal.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/opengles.mod/opengles.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/stdc.mod/stdc.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/zlib.mod/zlib.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ld.exe: cannot open output file -LC:/BlitzMax_NG/MinGW32/lib/gcc/x86_64-w64-mingw32/4.9.2/32: Invalid argument Build Error: Failed to link Process complete Command Prompt: [ 63%] Archiving:openal.debug.win32.x86.a [ 63%] Processing:opengl.bmx [ 63%] Archiving:opengles.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: [ creating C:/BlitzMax_NG/mod/pub.mo6d/openal.mod/ope3nal.debug.win32.x%86.a] ArchiviC:/BlitzMax_NG/MinnGW32g/bin/ar.e:xe: stcreating C:/BlidtzcMax_NG/mod/pub.mod/opengles.mod/opengles.debug.win32.x86.a.debug.win32.x86.a [ 63%] Processing:commctrl.bmx [ 63%] Processing:richedit.bmx C:/BlitzMax_NG/MinGW32/bin/ar.exe: [ creating C:/BlitzMax_NG/mod/pub.mod/stdc.mod/stdc.debug.win32.x86.a64 %] Archiving:zlib.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/zlib.mod/zlib.debug.win32.x86.a [ 64%] Linking: C:/BlitzMax_NG/MinGW32/bin/ld.exe: cannot open output file -LC:/BlitzMax_NG/MinGW32/lib/gcc/x86_64-w64-mingw32/4.9.2/32: Invalid argument Build Error: Failed to link [ 63%] Archiving:opengles.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/[ar.exe: 6creating C:/BlitzMax_NG/mod/pub3.mod/openal.mod/oC:/BlitzMax_NG/MinGW32/bin/ar.expenal.debug.win32.x86.a%e: ]creating C:/BlitzMax_NG/mod/pub.mo d/opengles.mod/opeAngles.debug.rwin32.x86.ac h iving:stdc.debug.win32.x86.a [ 63%] Processing:commctrl.bmx [ 63%] Processing:richedit.bmx :/BlitzMax_NG/ng:zlib.debug.win32.x86.aC MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/stdc.mod/stdc.debug.win32.x86.a C:/BlitzMax_NG/MinGW32/bin/ar.exe: creating C:/BlitzMax_NG/mod/pub.mod/zlib.mod/zlib.debug.win32.x86.a [ 64%] Linking: C:/BlitzMax_NG/MinGW32/bin/ld.exe: cannot open output file -LC:/BlitzMax_NG/MinGW32/lib/gcc/x86_64-w64-mingw32/4.9.2/32: Invalid argument Build Error: Failed to link |
| ||
Brucey's BMK will by default look for minGW inside a MinGW32 folder in the root of your blitzmax folder. (e.g. c:\programming\blitzmax\MinGW32 ) |
| ||
That is true only if it detects the new bcc. Otherwise it defaults to whatever you've been using previously (i.e. the requirement for MinGW files in BlitzMax/lib and bin). I could probably change it to work the same for all bcc's, then you could drop a MinGW install into MinGW32 and hopefully it would just ignore everything in lib and bin... [ 64%] Linking: I just noticed there's no filename after the colon there. That explains the specific error message. I've committed a further file check during linking which may shed light on your apparently broken configuration ;-) Some things which may help determine the exact problem... * You can rebuild a specific module : bmk makemods -a pub.win32 * You can verbose build with -v flag : bmk makemods -a -v pub.win32 |
| ||
Hi Brucey, Thank you so much, I just updated and I was able to track it down a little further to sdl.mod, after renaming the folder to exclude it all other modules rebuilt just fine and so fast :) I am definitely in awe, the new core changes are totally awesome! Build Error: Did not expect to link against C:/BlitzMax_NG/mod/sdl.mod/sdlmax2d.mod/sdlmax2d.bmx |
| ||
btw, you don't really need to build modules now - ever. (unless perhaps you are working on modules, in which case you might want to build a specific one from time to time). Simply build an app. It should build everything else that's required (if it thinks it needs compiled). Build Error: Did not expect to link against C:/BlitzMax_NG/mod/sdl.mod/sdlmax2d.mod/sdlmax2d.bmx Thanks. Looks like an error in that file. Apologies for the problems. |
| ||
Hi Brucey, Thank you again and please don't apologise I love using BlitzMax and testing out your extreme cutting edge versions and enhancements you are amazing! I did not realise that you no longer need to rebuild all modules that is very cool! |
| ||
I am just getting this error when trying to recompile modules:[string "function bmk_source_type(...)..."]:5: attempt to concatenate local 'arg0' (a userdata value)ERROR I build `bmk.bmx` on OS X 10.10.3 Yosemite and placed it in `bin` |
| ||
You need to build it as non-GUI (console), and also copy make.bmk and core.bmk into the bin dir. You will get the greatest benefit by compiling it with threading enabled. |
| ||
But I get an error message when I want to compile my own code now: C:/BlitzMax/bin/ld.exe: cannot find -lwinpthread If you have Monkey installed: This file is located in the MonkeyX77a\MinGW\lib folder. |
| ||
I've just tried a fresh install as follows and I get an error! * Install GIT for Windows (Git-1.9.5-preview20150319.exe) * Install a fresh copy of Blitzmax v1.50 into C:\BlitzMax-NG * Install a fresh copy of MinGW-get into C:\MinGW using the Installer (mingw-get-setup.exe) without the GUI. * Install the required MinGW packages from the command line: mingw-get install mingw32-base mingw-get install mingw32-gcc-g++* Download, Compile and Install BMK-NG: cd /d C:\Blitzmax-NG git clone https://github.com/bmx-ng/bmk bmx-ng\src\bmk bin\bmk makeapp -r -h bmx-ng\src\bmk\bmk.bmx rename bin\bmk.exe bin\bmk_BRL.exe copy bmx-ng\src\bmk\bmk.exe bin\ copy bmx-ng\src\bmk\core.bmk bin\ copy bmx-ng\src\bmk\make.bmk bin\* Update Blitzmax-NG with MinGW Library files: copy /Y c:\mingw\lib\*.* lib\* Obtain missing libwinpthread.a from Monkey folder: copy C:\MonkeyX77a\MinGW\lib\libwinpthread.a lib\ Unfortunately this give me the following error when Linking: C:/BlitzMax-NG/lib/libmingw32.a(setargv.o):(.text+0x147): undefined reference to `__mingw_glob' C:/BlitzMax-NG/lib/libmingw32.a(setargv.o):(.text+0x243): undefined reference to `__mingw_glob' I've tried replacing the brl linker with the one from MinGW\bin but that doesn't make any difference and produces another error. Any suggestions? Si... PS: I'm testing this on 64bit Windows 7. |
| ||
Ok I've fixed the above error. It seems that the new versions of crt2.o and libmingw32.a are causing the problem so I've ammended the procedure as follows: * Install GIT for Windows (Git-1.9.5-preview20150319.exe) * Install a fresh copy of Blitzmax v1.50 into C:\BlitzMax-NG * Install a fresh copy of MinGW-get into C:\MinGW using the Installer (mingw-get-setup.exe) without the GUI. * Install the required MinGW packages from the command line: mingw-get install mingw32-base mingw-get install mingw32-gcc-g++* Download, Compile and Install BMK-NG: cd /d C:\Blitzmax-NG git clone https://github.com/bmx-ng/bmk bmx-ng\src\bmk bin\bmk makeapp -r -h bmx-ng\src\bmk\bmk.bmx copy /Y bin\bmk.exe bin\bmk_BRL.exe copy /Y bmx-ng\src\bmk\bmk.exe bin\ copy bmx-ng\src\bmk\core.bmk bin\ copy bmx-ng\src\bmk\make.bmk bin\* Backup two library files that cause "undefined reference to `__mingw_glob'" error if not exist tmp\nul mkdir tmp copy /Y lib\crt2.o tmp\ copy /Y lib\libmingw32.a tmp\* Update Blitzmax-NG with MinGW Library files: copy /Y c:\mingw\lib\*.* lib\* Restore BRL versions of backed up files: copy /Y tmp\crt2.o lib\ copy /Y tmp\libmingw32.a lib\* Obtain missing libwinpthread.a from Monkey folder: copy C:\MonkeyX77a\MinGW\lib\libwinpthread.a lib\ Si... |
| ||
You can also create a folder called MinGW32 in your BlitzMax folder, and drop a copy of TDM's MinGW into it : (perhaps tdm64-gcc-4.9.2-3.exe from http://tdm-gcc.tdragon.net/download) Run the exe and extract it directly into that folder, so you end up with MinGW32/bin etc. Everything else should *just work*, and you don't need anything in BlitzMax/lib or any MinGW files in BlitzMax/bin. |
| ||
Ooh, now that is a useful resource. I've installed it into C:\BlitzMax-NG\MinGW32. Deleted C:\BlitzMax-NG\lib folder Deleted ar.exe and ld.exe from C:\BlitzMax-NG\bin. and it fails to link... @Brucey: Do I need your new BCC? |
| ||
Do I need your new BCC? Ah, yes, apologies for that... I've updated bmk (to 3.03) to enable support for a local MinGW32 directory with both versions of BCC. My local setup here is working - BlitzMax/bin with official bcc.exe, my bmk.exe, core.bmk and make.bmk - and nothing else in bin or lib. It should fallback to the MINGW environment variable if it doesn't find a local installation of it. Please let me know if you have any issues with it. Specifically, different versions of MinGW. I've only been using/testing the TDM builds. |
| ||
@Brucey: I re-installed and re-run the installation script above with various combinations: Original BCC, BMK-NG and using C:\MinGW MINGW= (Which worked before): Cannot find a valid GCC compiler. Please check your paths and environment. MINGW=C:\MinGW It uses LD.EXE and lib\* from the C:\MinGW folder instead of the local ones in the Blitzmax-NG directory and gives this error: C:/MinGW/lib/libmingw32.a(setargv.o):(.text+0x147): undefined reference to `__mingw_glob' C:/MinGW/lib/libmingw32.a(setargv.o):(.text+0x243): undefined reference to `__mingw_glob' C:\MinGW/bin/ld.exe: C:/MinGW/lib/libmingw32.a(setargv.o): bad reloc address 0x20 in section `.eh_frame' Build Error: Failed to link This error is caused by libmingw32.a and crt2.o. If you copy the original ones to c:\MINGW\LIB then is works again, but is not ideal. Original BCC, BMK-NG and using C:\BlitzMax-NG\MINGW32 (I Deleted ar.exe and ld.exe from /bin and renamed lib\ folder) It fails because it is unable to find content of LIB folder; The state of the environment variable MINGW makes no difference to the error. I'll test BCC-NG next... Si... |
| ||
Using BCC-NG gives me the following error in DEBUG mode:[ 51%] Processing:winmm.bmx Compile Error: Expression has no scope [C:/BlitzMax-NG/mod/brl.mod/appstub.mod/debugger_mt.stdio.bmx;640;0] Build Error: failed to compile (-1) C:/BlitzMax-NG/mod/brl.mod/appstub.mod/debugger_mt.stdio.bmx In Release mode: Hope this helps, Si... |
| ||
I missed a couple of changes... it's working here now, building with the x64 version of TDM 4.9 and the official bcc, with BlitzMax/mingw32. (obviously, only building for x86). Also tested with MINGW set, and 32-bit TDM 4.7. Using BCC-NG... You can't. It's not a drop-in replacement like bmk. |
| ||
Cheers Brucey; Getting there... * Fresh Blitzmax 150 install, Fresh TDM MinGW. Fresh BMK 3.0.3 Download. * Compiled BMK with BRL BMK, Multi-Threaded, Release. Copied it along with core.bmk, make.bmk, custom.bmk and resources\* to bin\. * Deleted bin\ar.exe, bin\ld.exe and lib\* Complied this basic code: print "Hello World"and I got the following errors: It does the same in Debug and Release modes. Am I going to need your updated PUB.MOD? |
| ||
libpng 1.2 is very old... but you could try uncommenting this line in libpng.bmx :'Import "pngvcrd.c" Your other option is to use an older version of MinGW :-) If you go for the updated pub.mod, you'll need the updated brl.mod too. ( https://github.com/maxmods ) That has libpng 1.6.7. It could probably do with a bump itself up to the latest (1.6.17) - they are always improving/patching it. |
| ||
If I use the new PUB.MOD and BRL.MOD: (original) BCC reports an exception and crashes. I get the following message:Building untitled1 [ 48%] Processing:blitz.bmx Build Error: failed to compile (-1073741819) C:/BlitzMax/mod/brl.mod/blitz.mod/blitz.bmx I'll take another look tomorrow evening (Got to get up at 4 tomorrow for work!). Cheers, Si... |
| ||
I've just done a couple of "clean" tests using BlitzMax 1.50 installers. One on XP and one on Windows 7... * Replace bmk with bmk ng (and core/make bmk files) * Replace brl.mod and pub.mod with those from https://github.com/maxmods * Install TDM MinGW 4.9 into BlitzMax/MinGW32 * Open MaxIDE and create a small example app : SuperStrict Framework BRL.StandardIO Print "Hello World" * Build and Run. That appears to work well for me. Note, you *will* need the latest sources from maxmods, as I patched an issue with MemExtend today - which caused a crash app startup using MinGW 4.9. |