Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Cross Development using Makefile
2013-01-25 14:45
Burglar

Registered: Dec 2004
Posts: 1031
Cross Development using Makefile

Weekend didn't even start for most of you yet, but here it is ;)

Cross Development using Makefile

comments and improvements are of course very welcome.

enjoy and may your build times be short!

make -j16
 
... 37 posts hidden. Click here to view all posts....
 
2013-01-25 22:58
Hermit

Registered: May 2008
Posts: 208
Great to have this kind of topic here. thx for it, must save a lot of googling time for some people.

Might be useful to mention 'for' loops for command-line tools that doesn't support batch processing (if it doesn't affect the purity of the article for 'make'). I'm not sure about CC1541 but I couldn't find a correct batch processing to assemble the SID-Wizard d64 image with executables and examples, so I ended up solving it by 'for' loops lately.
This btw possibly makes the makefile platform-dependent (btw it's already platform-dependent due to slashes/back-slashes I guess, or it might provide bash commands in certain toolchains - e.g.: cmake).

Based on the basic form to iterate through directory:
in linux-bash: for <variable> in <directory/filetype-filter> ; do <commands - if more, they're separated by semicolons> ; done ;
in M$ batch : for %%<variable> in (<directory\filetype-filter>) do (<batch commands to perform)>)

An extract from my current makefiles how I do it (though there might be a better way, dunno):
for sng2swm I use this (bash syntax):
for inputfile in $(EXASWMDIR)/sng-imports/*.sng ; do $(BINARYDIR)/$(SNG-CONVERTER) $$inputfile $${inputfile%.*}.swm.prg $(KUSS) ; done ;

for M$-batch:
for %%i in (%EXASWMDIR%\sng-imports\*.sng) do ( %SNG-CONVERTER% %%i %%~dpni.swm.prg > nul )

for cc1541 I use this (on previously created .d64 file):
for inputfile in $(EXASWMDIR)/*.swm.prg ; do outputfile=$${inputfile##*/} ; \
$(CBMDISK) -attach $@ -write $$inputfile $${outputfile%.*} ; done;

in M$-batch:
for %%i in (%EXASWMDIR%\*.swm.prg) do (
%CBMDISK% -attach %BINARYDIR%\%APPNAME1%-%APPVERSION%-disk.d64 -write %%i %%~ni > nul
)

It is worth to mention the other small tools to enhance readibility:
\ in bash-based makefile performs a line-break
$${..#..%.} commands in bash can be used for string-alterations (e.g. cutting the extension, etc..) - it has simpler form in batch, e.g. %%~ni

I however couldn't find out the proper way to give the dependencies of the files used by the 'for' loops. For instance I used "$(EXASWMDIR)/" as folder-content dependency but it didn't worked in the way I exactly wanted.

Kinda out-of-topic, but I'd be glad to have a Turbo Chameleon 64 programming topic at Codebase64. I tried experimenting with its VGA mode based on its good documentation, but some working source code could always make brainwork easier, e.g. to see what is the preferred order for writing registers...
2013-01-25 23:48
Cruzer

Registered: Dec 2001
Posts: 1048
Looks excellent, Burglar! I have no excuse for not trying it out now.
2013-01-26 12:17
Burglar

Registered: Dec 2004
Posts: 1031
@Cruzer, great ;) if you run into any problems, gimme a shout.

@Hermit, using for loops like you are, you're just redoing everything
whenever you need to build. Also when it isn't needed.

Let me enhance your sng2swm building:

SNG2SWM=bin/sng2swm
SNGSRC=$(shell find ./sng-imports -name '*.sng')
SWMOBJ=$(SNGSRC:.sng=.swm.prg)

%.swm.prg: %.sng
	$(SNG2SWM) $< $@

all: $(SWMOBJ)

clean:
	rm -f $(SWMOBJ)


Now, "make all" will convert all .sng files to .swm.prg.
If you modify or add one, then that's the only one that will be converted
when you run "make all" again.
You can now also build in parallel.

The c1541 (thats what you use, cc1541 is a different tool by JackAsser)
issue is more complex as there is only one targetfile with multiple inputfiles.
So for now, I'll just advice to write it out in the Makefile.
Will save some headaches ;)
2013-01-27 09:43
Dr.j

Registered: Feb 2003
Posts: 276
Hey There Burglar
I am a newcommer in Building shell commands to build files
and i didn't get into the bottom line of this thread.
sorry for the "pain-in-the ass" question:
where can i find this tool "MakeFile" ? didn't see any d/l . or is it a text file we edit ? i always used batch (MS) commands like "XXX.BAT"
and i got old one for compiling from Kickass and run in Winvice , can you show me Batch commands (MS) to
crunch with exomizer and to create/edit file with cc1541
with some info. about the commands ?

2013-01-27 09:55
Shine

Registered: Jul 2012
Posts: 327
Hi Alex,

maybe you looking for:

http://gnuwin32.sourceforge.net/packages/make.htm
2013-01-27 11:18
Dr.j

Registered: Feb 2003
Posts: 276
Thanks Andy :-)
I gonna d/l it soon .
2013-01-27 13:51
chatGPZ

Registered: Dec 2001
Posts: 11108
dr.j has brought up an important point .... if you are stuck on windows for some reason, you need a "how to install and use cygwin" tutorial aswell, else even simple stuff like rm -f might not work correctly =)

(and dont even think about using make without a proper bash shell. yes it works for some simple stuff. BUT it will make your head explode once you get to the more advanced stuff, trust me)
2013-01-27 14:30
JackAsser

Registered: Jun 2002
Posts: 1989
Quote: dr.j has brought up an important point .... if you are stuck on windows for some reason, you need a "how to install and use cygwin" tutorial aswell, else even simple stuff like rm -f might not work correctly =)

(and dont even think about using make without a proper bash shell. yes it works for some simple stuff. BUT it will make your head explode once you get to the more advanced stuff, trust me)


Actually you get quite far by installing nmake from microsoft and then unixtools for windows. But then again cygwin is a more general approach, pity the io-wrapper is so damn slow.
2013-01-27 14:49
chatGPZ

Registered: Dec 2001
Posts: 11108
"Actually you get quite far by installing nmake from microsoft and then unixtools for windows."
lets say you can make some things work. until you notice that some things only work halfway as intended. and then you will encounter something that doesnt work at all and install cygwin. =)

and ofcourse nmake works differently from gnu make. not to say it seriously sucks arse :)
2013-01-27 15:30
JackAsser

Registered: Jun 2002
Posts: 1989
:P
Previous - 1 | 2 | 3 | 4 | 5 | 6 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Exile/Anubis
Guests online: 134
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 The Ghost  (9.6)
9 Wonderland XIV  (9.6)
10 Bromance  (9.6)
Top onefile Demos
1 It's More Fun to Com..  (9.8)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 Rainbow Connection  (9.5)
6 TRSAC, Gabber & Pebe..  (9.5)
7 Onscreen 5k  (9.5)
8 Wafer Demo  (9.5)
9 Dawnfall V1.1  (9.5)
10 Quadrants  (9.5)
Top Groups
1 Oxyron  (9.3)
2 Nostalgia  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Booze  (9.7)
3 Stormbringer  (9.7)
4 Fungus  (9.6)
5 Grim Reaper  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.046 sec.