Here it goes!
find a ROM that is designed for the same CPU type and the same phone manufacturer. Any stock Gingerbread, ICS, or CyanogenMod 7/9 ROM should work, but you’ll have to make sure your phone can handle the ROM – no ICS for an HTC Hero, for example. Also, your Port ROM's original Phone should have the same RESOLUTION with that of your phone's.
You will need:
**a compression program (WinZip or 7zip and etc)
**the ROM you want to port to your phone (let’s call it the "Port ROM")
**a ROM designed for your phone (let’s call it"Base ROM")
On your PC, extract the .ZIP files containing the two ROMs, and navigate to /system/app in your extracted Port ROM and copy stk.apk, vpnservices.apk, camera.apk, and bluetooth.apk into a temporary directory somewhere else on your PC.
Now, delete the following folders from your Port ROM and replace them with the ones from your Base ROM: /data, /system/app, /system/framework, /system/fonts and /system/media.
From your Base ROM, copy /system/lib/libandroid_runtime.so to the system/lib/ directory of your Port ROM, overwriting the file.
Next up, move the .APKs you copied earlier back into the /system/app directory of your Port ROM.
Open up /system/lib in your Port ROM and copy all the files and folders. Paste them into the Base’s /system/lib directory, replacing all. Then go back to the Port ROM and delete the /system/lib folder, and replace it with the /system/lib folder from the Base ROM.
Next, navigate to the /system/etc/init.d folder in the Port ROM and do the same copy-from-Port, paste-to-Base, delete-from-Port, copy-from-Base, paste-to-Port shuffle as before.
Navigate to /system/etc/permissions and do that same copy-paste dance one more time.
open system/build.prop from both the port and the base ROM in Notepad++. Update the Base build.prop to match the values for “ro.build.description=” and “ro.build.fingerprint=” from your Port. Now save the Base build.prop, exit Notepad++, and copy the Base build.prop into the Port ROM, overwriting the Port build.prop.
In Notepad++, open \META-INF\com\google\android\updater-script from both your base and port ROMs. Edit the Port’s script to be like the Base’s updater-script: specifically, change, edit, or add the sections for permissions, ui_prints, asserts, run_programs, and installing the kernel. Don’t change any of the symlinks. In the Port script, make sure that the ‘format’ values are appropriate for your device (compare them to the Base script).
Finally, make sure that your kernel is specifically for your device.
And that’s it! Your base ROM is now ready to be zipped and installed on your device via Clockwork Mod!
CUSTOM ROM FOLDERS EXPLAINED
List of Resolution for Smartphones
How to change Kernel of ROM Before installation in its zip file.
[GUIDE][How to Make CWM Recovery Flashable Zip file without Computer]