[Q] Custom kernel compile error!! - Android Q&A, Help & Troubleshooting

Believe me, I have searched here and googled high and low to help ...
if i've searched wrong and you know where the post i'm looking for is i will be more than
happy to read it.. point me to it!!
That being said.
Last week, i played around with getting a custom recovery built for INQ Cloud Touch..
is a nice little phone for it's price but lacks devs!
After compiling - flashing recompiling re-flashing for almost a week and on the verge of giving up ...
i realized, searched and found flash_image ... come to find out custom compile of recovery
was fine, fastboot did not like my device and wasn't flashing it properly.
So flash_image got the custom recovery working as suppose to, able to backup/restore ...
Flash roms.. however there are no roms.. best i could do was try roms from devices close to
this one, with no luck!
So i decided i would try my hand at making a 2.3.7 gingerbread rom.
of course stock is froyo 2.2.1 and before i can make the rom.. i need a kernel for gingerbread.
So i got the cm-kernel source using this guide:
http wiki DOT cyanogenmod DOT com/wiki/Building_Kernel_from_source
(sry wasn't allowed to post links)
[EDIT]
pulled my .config file using both
/proc/config.tgz
and the included script to pull it from the boot.img
[/EDIT]
Now, i been trying to get kernel compiled for the last 5 days.. and like i said, no lack of searching and reading...
Had first error, forgot what it was now, but i got it fixed and compile went on.
for the last 4 days i been facing this bad boy and can't find a fix for this to save my life.
Code:
LD .tmp_vmlinux1
arm-eabi-ld: no machine record defined
arm-eabi-ld: no machine record defined
arch/arm/mach-msm/built-in.o: In function `parse_tag_msm_partition':
/home/orgwiz/android/cm-kernel/cm-kernel/arch/arm/mach-msm/nand_partitions.c:126: undefined reference to `msm_nand_data'
drivers/built-in.o: In function `msm_i2c_recover_bus_busy':
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:276: undefined reference to `msm_set_i2c_mux'
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:314: undefined reference to `msm_set_i2c_mux'
drivers/built-in.o: In function `msm_i2c_probe':
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:492: undefined reference to `msm_set_i2c_mux'
make: *** [.tmp_vmlinux1] Error 1
I have a notepad full of things i have enabled/disabled and restored to original trying to find what is missing or shouldn't be there!
And help would be GREATLY APPRECIATED!

Well, I have very little linux knowledges, so I don't know if I will be able to help you, anyway send me a PM if you still need help with that, because it's really interesting what you are doing. There is no roms for this phone, I could not even find the original one. I have this phone, INQ cloud touch, and I made a big mistake, I removed the INQFacebook.apk and many others that were flashed in the rom, without making any buckup (I know, I'm idiot).
The thing is that I've been looking for the apks or the original rom with no luck, to restore them in my phone, as I cannot do anything from the phone, but I still have adb access so I can flash any file. On the phone obviously always pops up a messaging like "Application INQ Launcher (com.inqmobile.launcher.core) closed unspectly. Force to Close". I guess because it's trying to load some of the INQ applications I deleted, like INQFacebook.
So if you know where I could get those files to restore them in my mobile or if you know any official rom that I can flash using CWM (ClockworkMod Recovery) it would be very nice.
The list of apps I deleted are:
from SYSTEM/APP
Spotify
Vringo
Shazam
Facebook
INQFacebook...
INQFacebook...
GoodWLM...
from DATA/APP
com.spotify...
com.shazam...
com.facebook...
com.spbu.myhub...

Hi,
Well, even if was there and I wrote it I didn't realize that the whole thing was the default launcher, I just installed a new and set it as default and now the phone is ****ing perfect, and without the applications that I didn't want to have.

orgwiz said:
Believe me, I have searched here and googled high and low to help ...
if i've searched wrong and you know where the post i'm looking for is i will be more than
happy to read it.. point me to it!!
That being said.
Last week, i played around with getting a custom recovery built for INQ Cloud Touch..
is a nice little phone for it's price but lacks devs!
After compiling - flashing recompiling re-flashing for almost a week and on the verge of giving up ...
i realized, searched and found flash_image ... come to find out custom compile of recovery
was fine, fastboot did not like my device and wasn't flashing it properly.
So flash_image got the custom recovery working as suppose to, able to backup/restore ...
Flash roms.. however there are no roms.. best i could do was try roms from devices close to
this one, with no luck!
So i decided i would try my hand at making a 2.3.7 gingerbread rom.
of course stock is froyo 2.2.1 and before i can make the rom.. i need a kernel for gingerbread.
So i got the cm-kernel source using this guide:
http wiki DOT cyanogenmod DOT com/wiki/Building_Kernel_from_source
(sry wasn't allowed to post links)
[EDIT]
pulled my .config file using both
/proc/config.tgz
and the included script to pull it from the boot.img
[/EDIT]
Now, i been trying to get kernel compiled for the last 5 days.. and like i said, no lack of searching and reading...
Had first error, forgot what it was now, but i got it fixed and compile went on.
for the last 4 days i been facing this bad boy and can't find a fix for this to save my life.
Code:
LD .tmp_vmlinux1
arm-eabi-ld: no machine record defined
arm-eabi-ld: no machine record defined
arch/arm/mach-msm/built-in.o: In function `parse_tag_msm_partition':
/home/orgwiz/android/cm-kernel/cm-kernel/arch/arm/mach-msm/nand_partitions.c:126: undefined reference to `msm_nand_data'
drivers/built-in.o: In function `msm_i2c_recover_bus_busy':
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:276: undefined reference to `msm_set_i2c_mux'
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:314: undefined reference to `msm_set_i2c_mux'
drivers/built-in.o: In function `msm_i2c_probe':
/home/orgwiz/android/cm-kernel/cm-kernel/drivers/i2c/busses/i2c-msm.c:492: undefined reference to `msm_set_i2c_mux'
make: *** [.tmp_vmlinux1] Error 1
I have a notepad full of things i have enabled/disabled and restored to original trying to find what is missing or shouldn't be there!
And help would be GREATLY APPRECIATED!
Click to expand...
Click to collapse
Hi orgwiz,
Bug INQ for the kernel sources they are legally obligated to release them because of the GPL. Once you have the source then you should have correct board drivers. The way embedded development works is that INQ wrote really specific drivers stock cyanogen kernel only has stuff for supported devices. So even if you build it, it likely won't boot on your device. In terms of building a new kernel you may be able to get away using the same kernel but updated init scripts you can still have a decent port like that but your YMMV (worst case you'll have trouble with 3D drivers but I'm pretty sure most of your hardware should work fine with out changes). Try building a CM userland and seeing if you can get it to boot as a first step (its going to be difficult but its a 100% possible I was able to do it with a an Eclair kernel). At worst case you'll have to back fit changes to the Froyo kernel you can look around github and cherry pick commits. If you adventurous the other options is to forward fit all of INQ's changes to the CM kernel.

There's a backup of the stock rom available if you google for "Porting INQ Cloud Touch" on the cyanogenmod forums (I can't post links yet)
I'm also trying to do some dev on this phone but have mostly given up because I can't get anything to boot and I don't know of any way to get any form of debug messages. If anyone wants to help, let me know.
I didn't know that they were required to release the kernel sources, that will surely help so I've sent them an email.

This was my first android. It was a good little phone. But I killed it within a month. I had it rooted ( didn't make a backup ), was using a file explorer, and my thumb twitched deleting something the phone needed. The only thing I can get from it is emergency mode and adb mode when connected to the computer. I spent so much time looking for either an original Canadian rom or at least a custom one I could try to flash. I gave up eventually and moved on. I would still like to revive that droid if I could. Mainly to prove it ain't dead. lol. I'll keep checking in, good luck with your project. :good:

Error While Compiling Kernel Of REDMI 1s
Code:
[email protected]:~/android/kernel$ make zImage
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC drivers/input/touchscreen/ft5x06_ts.o
drivers/input/touchscreen/ft5x06_ts.c: In function 'ft5x06_get_factory_id':
drivers/input/touchscreen/ft5x06_ts.c:432:45: warning: 'ft5336_bootloader_ver' may be used uninitialized in this function [-Wuninitialized]
error, forbidden warning: ft5x06_ts.c:432
make[3]: *** [drivers/input/touchscreen/ft5x06_ts.o] Error 1
make[2]: *** [drivers/input/touchscreen] Error 2
make[1]: *** [drivers/input] Error 2
make: *** [drivers] Error 2

Related

Problems building openeclair for kaiser

I found these instructions from the androidspin.com website
http://androidspin.com/forum/showthread.php?t=2004
after following the steps,
I was getting this error:
build/core/product_config.mk:173: *** No matches for product "openeclair_dream_sapphire_us". Stop.
someone there posted some suggested fixes
http://androidspin.com/forum/showpost.php?p=10919&postcount=11
but I ran into problems with missing files when building.
then I found a suggestion from here
http://forum.xda-developers.com/showthread.php?t=586039
and that helped
(but it still seems that there are a lot of errors from missing ./unzip-files.sh's)
but now I cant get past this error:
Code:
as: unrecognized option `-Qy'
I know it is a simple fix, I have had this before for other builds.
but I cant figure out how I fixed it or what is actually the problem.
any ideas???
does anyone have a guide for building a kaiser eclair that is actually working?

[Q] trying to build a stock kernel from source

i have been trying to teach myself about kernels and followed this thread
http://forum.xda-developers.com/showthread.php?t=817387
im not sure where to get initramfs or if i need it.
if anyone who has built a kernel before can give me some pointers that'd be great
Dani897 said:
i have been trying to teach myself about kernels and followed this thread
http://forum.xda-developers.com/showthread.php?t=817387
im not sure where to get initramfs or if i need it.
if anyone who has built a kernel before can give me some pointers that'd be great
Click to expand...
Click to collapse
Man i have no idea i would try to reach out to the kernel gurus over in the captivate forum
Sent from my SAMSUNG-SGH-I997 using XDA Premium App
i asked glitterballs who linked me to that thread by stumpzy. i really am starting from scratch though. ive never compiled a kernel for anything before. at least now i know why the instructions in the readme file that comes in the source package didnt work. just a matter of editing one line in makefile. i tried to build it after that change but get errors.
Dani897 said:
i asked glitterballs who linked me to that thread by stumpzy. i really am starting from scratch though. ive never compiled a kernel for anything before. at least now i know why the instructions in the readme file that comes in the source package didnt work. just a matter of editing one line in makefile. i tried to build it after that change but get errors.
Click to expand...
Click to collapse
what errors?
/tmp/ccgqkvQY.s: Assembler messages:
/tmp/ccgqkvQY.s:2583: Error: can't resolve `.text' {.text section} - `.LFB1126' {.ARM.extab section}
make[1]: *** [arch/arm/kernel/process.o] Error 1
make: *** [arch/arm/kernel] Error 2
this is what i got without doing anything with .config.
another time after changing .config according to stumpzy's thread it went farther but had errors related to drivers, maybe the source isn't complete. i wish i had some background in this stuff, im just trying to teach myself and informations is hard to find if you dont know what you are looking for.
the above error appears to be from using the wrong toolchain. i tried one that unhelpful posted a while back but it doesnt seem to help at all. back to the one stumpzy posted
drivers/media/video/samsung/tv20/s5p_stda_grp.c: In function 's5ptvfb_set_par':
drivers/media/video/samsung/tv20/s5p_stda_grp.c:614:12: error: lvalue required as left operand of assignment
make[5]: *** [drivers/media/video/samsung/tv20/s5p_stda_grp.o] Error 1
make[4]: *** [drivers/media/video/samsung/tv20] Error 2
make[3]: *** [drivers/media/video/samsung] Error 2
make[2]: *** [drivers/media/video] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [drivers] Error 2
i get these errors when i try to use stumpzy's instructions
did you use
the samsung tree of the 2.6.35 tree on open source. The full release of the code for the infuse has a readme text that says how to use the make to get the kernel.
Thanks
Jon
I am still trying to get the Ubuntu up and running so I can learn more also. We had a bad storm and lost power during the upgrade so still working on the computer.
the readme is wrong. the makefile needs to be editied to use that toolchain and i still get the errors.
just install stumpzy's vm, if you want a gui on it then apt-get fluxbox or another window manager.
cool
okay still trying to get my workspace set will let you know what happens and pls keep me in the loop also.
using these two:
http://forum.xda-developers.com/showpost.php?p=5626300&postcount=3
and
http://forum.xda-developers.com/showthread.php?t=633246
the second one may work with the modifie kitchen
Thanks
Jon
I have a good idea: let's move this to Android's Chef Central, where all the Android devs roam.

[Q] Where to start?

Hello,
I want to compile Android from source. I want to just build a fully default Gingerbread that would run nice on my phone. I got the Android source, kernel source (kernel-2.6.32-U8800-Froyo) and now I don't know what to do next. I compiled the generic one already (lunch full-eng) and it ran fine on the emulator.
My most important question is, if I make it otapackage and flash it, would it start? If it doesn't, can I recover? What folders/files are essential if I make my own device for example in "device/huawei/u8800"
Also, where can I find a GOOD porting guide? I have found some that are old and not used anymore.
Some links
Start by going through source.android.com for the general basics if you havent already.
Also, even though Google removed the PDK (Platform Developer's Kit) from the site, it has been mirrored on kandroid here: http://www.kandroid.org/online-pdk/guide/index.html
The stuff in the the PDK, although inadequate, is still very important and explains how to create the necessary makefiles to add to the build, configuring for a new market, etc. etc.
Also,
watch these two videos over here. These were very helpful in my ROM development:
http://www.youtube.com/watch?v=1_H4AlQaNa0
http://www.youtube.com/watch?v=rFqELLB1Kk8
Learn to use github. It is helpful for you to keep track of your changes as well as incorporate others works into your own.
http://help.github.com/
Finally, Cyanogenmod repos are your BEST friend. Almost all major AOSP ROM devs owe some sort of thanks to those guys who have done so much. If you want to check out some of the code changes and patches that you want to incorporate look here on their gerrit:
review.cyanogenmod.com
If you want to look at the other changes that are actually in the cyanogenmod builds, best to look at their git repos here:
https://github.com/CyanogenMod
I am still learning right now while I create my ROM but your welcome to PM me if you have any questions
Glad someone helped. Now that ICS is available, I will build that instead. Now, I will follow the kandroid tutorial and add hardware_msm7x30 from cyanogenmod's repos. Then I'll make my own makefiles in the huawei/u8800 and I'll see if that works.
Also, some things I am not still clear. If I am not adding any recovery files, it shouldn't replace it, right? I want to make sure I can recover. However, my phone has a bootloader mode, which should still work, even if other's messed up. And the kernel, if I already have a compiled kernel for android 2.2, should it work for newer versions?
Thanks
Well AOSP as far as I know adds the stock recovery into the build so if you have a stock ROM, then you will lose your recovery (unless you change the source to skip the adding of recovery to otapackage).
Your bootloader should be fine. so you will theoretically be able to re-flash a custom recovery with fastboot as long as your bootloader is unlocked (assuming your phone is already rooted and has a custom rom, then it should be unlocked)
If you are using CM7 as base, then you dont have to worry about it as it is configured to NOT replace the recovery during the building and creating the otapackage.
The kernel should not be compatible as there were significant changes from Froyo and you should not use it. By the way, for now, work on the ROM first. Creating a custom kernel from scratch is hard work and should be left as the last task to do (assuming you know linux kernel development). Just use the stock pre-built kernel that comes with the source.
Also, according to Google:
Starting with IceCreamSandwich, the Android Open-Source Project can't be used from pure source code only, and requires additional hardware-related proprietary libraries to run, specifically for hardware graphics acceleration.
Click to expand...
Click to collapse
This means you need to find the correct hardware drivers first. Where to find that is beyond me. Check CM repos. It would be easy if everyone had a Nexus S/ Galaxy Nexus as the drivers are immediately available on source.android.com. Ah...well....
Personally, I am going to wait a few weeks before dabbling into ICS ROMs. Wait till CM7 comes out with a nightly for my nexus one and then rip the drivers from their ROM and use it for mine
I got ICS source and made the necessary Android.mk, AndroidProducts.mk, BoardConfig.mk and u8800(my device).mk, also vendorsetup.sh . Now, when I am trying to build it doesn't give me an error, more of a suggestion. It says to include "LOCAL_MODULE_TAGS := optional" in the hardware/msm7k/liblights/Android.mk. I added that, and tried again. Got that message again, but with other type /libril/Android.mk
About fastboot, I am not sure if my device has that. It can be turned on with volume up and down + power, but it boots to so called "pink screen". When I mount phone using usb to my pc, I can browse the recovery.img and other related stuff. If I have the otapackage, can I just take the recovery out from there or what should I modify in source? Add something to the makefiles?
Yeah I am pretty sure you should add the LOCAL_MODULE_TAGS to all of the relevant pre-built files. maybe they made the compiler less harsh in ICS when compared to the one for gingerbread. In gingerbread, it outright crashed the compile and asked you to add the tags.
According to Google engineers, here is the reason why they use these tags:
Short answer: lack of time.
The urgent concern was to prevent new modules from using a user tag
(implicitly or explicitly), and we took care of that. We haven't had
time to deal with the existing modules, there are over 1000 of those.
JBQ
Click to expand...
Click to collapse
By the way, I hope you have git setup and the changes you have made are being staged and commited to your repo in github. If you ever make a mistake that hardcore crashes your compile and you dont know what you did, git will be there for you to rollback the changes as well as keep track of everything you have done from commit to commit
As far as I know, CM repos dont have everything complete for a full build of ICS but I could be wrong.
So you are working with AOSP correct?
As for the fastboot every android phone should have a fastboot by default but I believe each phone has a slightly different version. I will post how my fastboot looks like in a bit.
As for the removal of recovery, there should be somewhere in either source, makefiles or argument for the otapackage command that should leave out the recovery when making update.zip. You could just remove the recovery from the update.zip, change the updater-script and repackage it but its not a clean solution and those changes should be done in a uniform manner so you dont repeat this step every time you do a new build.
Where exactly is it, I have yet to know. Still learning much of this myself.
I now completely understand what modes of turning on my phone has... First one is normal, second is recovery, third is update-bootloader(I can access all files with it too) and four being the fastboot. The custom recovery I have on has an issue that it wants to boot to charging mode when I type "adb reboot bootloader". I can get to fastboot with the custom ROM I have on right now though. I think I am safe if I have issues.
I edited msm7k Android.mk to remove libaudio and libgralloc (errors with those), and it compiles to the step where it says it has no rule to make kernel requied by boot.img. I have put into BoardConfig.mk the line TARGET_PREBUILT_KERNEL with my kernel. I don't understand, what's wrong now...
My goal is to simply get it booting up. I'll look into libraries and other later.
-e-
Got the kernel thing sorted out. Copied device.mk from tuna device and edited to fit my device. Also modified full_u8800.mk and made the call to inherit from device.mk. Compiling now and I think I got past that.
-e2-
Got it built successfully. Fastboot won't let it install, because it has no mount points. Added mount points and let's see...
Nice to see you are making progress.
Got it built, but the fastboot is kinda buggy in my device, maybe custom rom issue. I can't make otapackage, it says "no rule to make target otapackage". I have a possible fix, trying that later.
Otherwise, I read its possible to flash system.img from recovery via advanced restore, update.zip package or advanced flash_image, but I don't know. Will post results.
Sent from my u8800
-e-
Tried make otapackage again. It still says "make: *** No rule to make target `otapackage'. Stop.". Maybe some things are still missing, I don't know. adb flash_image command will always post -1 to me, update.zip didn't work, advanced restore is not for this. I have a compiled image and I can't wait to test it, but I can't flash it...
If nothing works I'll revert to stock ROM and try again.
Blefish said:
Got it built, but the fastboot is kinda buggy in my device, maybe custom rom issue. I can't make otapackage, it says "no rule to make target otapackage". I have a possible fix, trying that later.
Otherwise, I read its possible to flash system.img from recovery via advanced restore, update.zip package or advanced flash_image, but I don't know. Will post results.
Sent from my u8800
-e-
Tried make otapackage again. It still says "make: *** No rule to make target `otapackage'. Stop.". Maybe some things are still missing, I don't know. adb flash_image command will always post -1 to me, update.zip didn't work, advanced restore is not for this. I have a compiled image and I can't wait to test it, but I can't flash it...
If nothing works I'll revert to stock ROM and try again.
Click to expand...
Click to collapse
If you successfully compiled, take the boot.img and system.img and package them into a zip and use dsixda's kitchen to make it flashable
Blefish, is it possible for you to share your device/vendor structures somewhere? I just finished setting up a build machine for ICS (using Cyanogenmod's repos in my case), and made a working full-eng image that seems to boot just fine in the emulator, so I'm seemingly all ready to hack around our device's specifics. But I would rather not do duplicate work, so I decided to ask
I'm also grabbing Huawei's new 2.6.35-based package to get the new kernel config, can't wait for them to release the actual sources for the update.
I'll share them on GitHib once I get a working build. I haven't got much time, and I changed to CM9 alpha now (repo branch ics). Since we got a 2.3 update, my first task is to port the latest clockworkmod recovery and then the ICS.
Compiling Android is long task and I'll do it in weekends, but the recovery should be available sometime, it shouldn't be hard to port that.
Oh yeah, look up stockwell's, dzo's and genokolar's github, they have done the device configuration. You can get much help from there. This weekend I'll propably test the build, I got otapackage command working now (it needed some things I can't write on mobile).
Sent from my U8800 using Tapatalk

[TUTORIAL][AOSP_BUILD] How to fix "no rule to make target" error

Hi everyone !
After spending a lot of time trying to fix this error while building AOSP lollipop 5.1.1, I found a "magic" solution, that I was unable to find on xda or stackoverflow. Thus, I want to share this "fix" with you today, because I realized that a lot of people were having the same trouble without finding any solution.
So, what's the problem ? You want to build AOSP lollipop 5.1.1 for your device, for me it was a Nexus 5 (hammerhead). This is what should be done :
- repo sync google source
- download Nexus 5 binaries
- execute extract-*.sh files so that binaries are extracted
- source build/envsetup.sh
- lunch and select aosp_hammerhead
- make updatepackage -j# (# corresponding to the maximum number of jobs, according to your CPU)
Yet, after doing lunch, no include was done while doing "make". Therefore, there were lots of errors like "no rule to make target mkbootimg".
Then, I realized the problem was the "lunch" command. So, I opened a new terminal, and I only did the "source build/envsetup.sh" without the lunch, and then I exported the target like that :
> export TARGET_PRODUCT=aosp_hammerhead
And thanks to that, make udpatepackage worked !
Last tip, if you get some weird compiling error, after loosing your mind trying to find the solution, close your terminal, open a new one, source build/envsetup.sh and re-make again. Sometimes it does the work, don't ask me why
That's it ! Hope it helps =)
PS : Sorry if my English is bad
Thanks, bro... U saved my day

errors while building AOSP 5.1

Hello guys,
i decided to try building AOSP myself using the guide at: http://developer.sonymobile.com/kno...ld-aosp-lollipop-for-unlocked-xperia-devices/
however when i let it build with
source build/envsetup.sh && lunch
and then select sgp712 (mine is wifi) and then write
make –j 6 (8 core cpu with 2 cores turned off)
it works normally for a while spamming the including ./stuff/stuff and after a minute or two ends with
#### make failed to build some targets (01:53 (mm:ss)) ####(pic attached)
Anyone has any idea what could possibly be wrong or how i would go about fixing it?
nevermind it is supposed to be -j not the long line but the short one and its building now
Ah crap! After having to reinstall the whole system because a crash ruined it i now got this after a hour of building... System folder has some stuff in it but there are no .img files made yet if that helps with what could be to blame.. Any ideas on this one? If i need to tell some info that might help anyone figure out what is making it fail i'll be happy to do that.
I tried to cook the rom on my own too, but I haven't even come up to compilation. So, it's better to ask your question here. http://forum.xda-developers.com/z4-...-xperia-devices-project-t3178610/post65310749
Or on general xda topic devoted to cooking roms. It's interesting, roms by fxp and by Sony code are the same or not?
Also, I advice you to make twrp backup of your system. Thus, you lose nothing and can experiment boldly.

Categories

Resources