- Visual Studio 2010
- zainstalowane najlepiej najnowsze WDK (także pod XP SP3)
- zainstalowane najlepiej najnowsze DirectX SDK
$(USERPROFILE)\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user
. Jego zawartość powinna wyglądać mniej więcej tak:
Chodzi o to by ścieżki dołączane przez VS2010 typu $(*Path) były na samym początku. Na tym etapie powinniśmy poustawiać odpowiednio ścieżki do WDK i DirectX SDK. Najlepiej zrobić to tutaj, dzięki czemu nie będziemy musieli konfigurować każdego projektu z osobna. Pobierz NASM, zainstaluj go i dodaj go do$(ExecutablePath);C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin;C:\Program Files (x86)\NASM $(IncludePath);C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include;C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Include;C:\DDK_7.1\inc\api $(ReferencePath) $(LibraryPath);C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib;C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\Lib\x86;C:\DDK_7.1\lib\wxp\i386 $(SourcePath) $(ExcludePath);C:\Program Files\Microsoft SDKs (x86)\Windows\v7.0A\Include
ExecutablePath
Pobieramy źródła WinUAE. Utwórz katalog winuae-base
. W nim katalog winuae
do którego wypakuj źródła.
Pobieramy także źródła WinUAE z repozytorium GIT http://github.com/tonioni/WinUAE.git
(patrz oficjalna strona projektu, sekcja Download). Ja użyłem do tego TortoiseGIT. Wymaga do działania msysgit. Podczas instalacji msysgit
wybierz Run Git From Windows Command Promp
. Kopiujemy katalog winuae-git/prowizard
, którego brakuje w oficjalnych źródłach 2.1.0.
Czas na pobranie mnóstwa pakietów wymaganych do poprawnej kompilacji WinUAE. Tutaj doskonałe źródło wiedzy na ten temat. Skorzystanie np. z OpenAL, obsługi sieci, drukarek, czyli funkcjonalności której te pakiety dostarczają, wymaga z reguły by WinUAE miał dostęp do odpowiednich bibliotek DLL. Nie są one wymagane w momencie startu, są ładowane dynamicznie w razie potrzeby. WinUAE radzi sobie dobrze z obsługą sytuacji gdy ich nie ma. Ja skupiam się w tylko na skompilowaniu WinUAE z minimalną liczbą zmian. Można i to z sukcesem skompilować WinUAE bez tych wszystkich pakietów. Podstawowe elementy takie jak CD, HDD, gry, dźwięk będą działać. Wymaga to jednak dużego nakładu pracy. OpenAL Pobieramy OpenAL 1.1 Core SDK. Instalujemy. Tworzymy katalog
winuae-base/openal
i kopiujemy tam al.h
, alc.h
, OpenAL32.lib
. Możemy odinstalować.
zlib
Pobieramy paczkę źródeł, wypakowujemy do winuae-base/zlib
UnRAR
Pobieramy UnRAR.dll
i do katalogu winuae-base/unrar
wypakowujemy unrar.h
.
WinPcap
Pobieramy Developer's Pack
i do wypakowujemy do katalogu winuae-base/winpcap
katalogi Include
i Lib
.
FreeType
Pobieramy Binaries
, do katalogu winuae-base/freetype
wypakowujemy katalogi Include
i Lib
. Ze struktury katalogów eliminujemy freetype2.
libpng
Pobieramy źródła i wypakowujemy do katalogu winuae-base/libpng
.
TVicPort
Pobieramy, instalujemy, do katalogu winuae-base/tvicport
kopiujemy TVicPort.h
. I w moim przypadku odinstalowujemy.
Catweasel
Pobieramy najnowszą wersję Catweasel ISA/MK3/MK4/MK4plus
. Do katalogu winuae-base/catweasel
wypakowujemy catweasl_usr.h
.
Ghostscritp
Pobieramy źródła i wypakowujemy do katalogu winuae-base/ghostscript
pliki errors.h
, iapi.h
, ierrors.h
.
PortAudio
Pobieramy wersję v19
. Wypakowujemy do katalogu winuae-base/portaudio
.
fdrawcmd
Pobieramy ten plik i zapisujemy do winuae-base/fdrawcmd
.
G15 LCD
Pobieramy sterowniki. Instalujemy je. Odnajdujemy LCDSDK_3.04.143.zip
. Do katalogu winuae-base/logitechlcd
wypakowujemy lglcd.h
i lglcd.lib
. Sterowniki możemy odinstalować.
WinIO
Do katalogu winuae-base/winio
wypakowujemy zawartość katalogu Source
.
ParaPort
Zawartość pliku nagłówkowego zapisujemy do winuae-base/paraport/paraport.h
(najlepiej skopiować go ze źródeł strony).
wnaspi32
Zapisuje do winuae-base/wnaspi32/wnaspi32.h
enet
Wypakowujemy do katalogu winuae-base/enet
.
Do katalogu
winuae-base/winuae/od-win32/winuae_msvc10/
kopiujemy plik solucji z repozytorium GIT. Otwieramy solucje.
Usuwamy projekt unpackers
.
Usuwamy pliki *.obj
z projektu winuae
. Tworzymy w projekcie folder asm
i dodajemy do niego pliki *.asm
, które te obj-ty generowały. Zaznaczamy je wszystkie i wybieramy ich właściwości. Wybieramy wszystkie konfiguracje. Jako Item Type
wybieramy Custom Build Tool
. Naciskamy zastosuj. W Custom Build Tool
ustawiamy:
Command Line: nasm.exe -O1 -f win32 -Xvc -o "$(IntDir)%(Filename).obj" "%(RootDir)%(Directory)\%(Filename).asm" -w-orphan-labels
Description: Compiling asm file %(Filename).asm
Outputs: $(IntDir)%(Filename).obj;%(Outputs)
Dla projektów build68k
, genblitter
, gencpu
, gencomp
dla Pre-Link-Event
i Post-Build Event
ujednolicamy wpisy dla wszystkich konfiguracji.
Dla build68k
zmieniamy by zamiast cpudefs.c
generowany był plik cpudefs.cpp
. Podobnie robimy dla projektu genblitter
i genlinetoscr
.
Ustawiamy zależności pomiędzy projektami: winuae
zależy od genblitter
, gencpu
, gencomp
, genlinetoscr
, prowizard
oraz gencpu
i gencomp
zależą od build68k
. We właściwościach projektu winuae
do referencji dodajemy prowizard
i ustawiamy Output File
na domyślne dla wszystkich konfiguracji.
Wybieramy konfiguracje Debug
. W właściwościach solucji w Configuration Properties
dla wszystkich konfiguracji włączamy w proces budowania tylko build68k
, gencpu
, gencomp
, genblitter
, genlinetoscr
, prowizard
, winuae
.
Budujemy build68k
, genblitter
- bez problemów.
Budujemy gencomp
, mamy błędy. W sysdeps.h
dodajemy przed #include <tchar.h>
wpis #include <windows.h>
. Budujemy ponownie.
Budujemy gencpu
bez problemu. Budujemy genlinetoscr
z problemami.
Dla projektów build68k
, gencpu
, gencomp
, genlinetoscr
, genblitter
dla wszystkich konfiguracji ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
, zaś Output File
na $(OutDir)\..\$(TargetName)$(TargetExt)
. Budujemy genlinetoscr
ponownie.
Budujemy prowizard
. Błędy. Kopiujemy z Release
do Debug
zawartość Additional Include Directories
. Budujemy ponownie.
Ujednolicamy dla wszystkich projektów zawartość Additional Include Directories
.
Z braku możliwości znalezienia lib-a do obsługi tabletu musiałem jego obsługę wyłączyć. W skórcie komentujemy #include <wintab.h>
, #include <pktdef.h>
i eliminujemy reszte błędów. Można także alternatywnie dodać nową definicje preprocesora do sysconfig.h
. Usuwamy z Linker/Additional Dependencies
wpis wintab32.lib
dla wszystkich konfiguracji. Usuwamy z Delay Loaded Dlls
wpis wintab32.dll
dla wszystkich konfiguracji.
Dla projektu winuae
ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
dla wszystkich konfiguracji. Ustawiamy Output File
na domyślne dla wszystkich konfiguracji.
Budujemy projekt winuae
. Same błędy związane z brakiem plików nagłówkowych. Uzupełniamy Additional Include Directories
o:
..\..\..\catweasel;..\..\..\enet\include;..\..\..\fdrawcmd;..\..\..\freetype\include;..\..\..\libpng;..\..\..\logitechlcd;..\..\..\openal;..\..\..\paraport;..\..\..\portaudio\include;..\..\..\tvicport;..\..\..\unrar;..\..\..\winio\Dll;..\..\..\winpcap\include;..\..\..\wnaspi32;..\..\..\zlib;%(AdditionalIncludeDirectories)
Pozostały nam 2 błędy kompilacji:
syntax error : identifier 'PARAPORT_INFO' d:\programowanie\c++\moje programy\winuae-base\winuae\od-win32\ioport.cpp
Usuwamy:
typedef BOOL (*getPortInfo)(HANDLE, PARAPORT_INFO*);
static getPortInfo pp_getportinfo;
pp_getportinfo = (getPortInfo)GetProcAddress (para, "getPortInfo");
Nic z tego nie korzysta. Co do drugiego błędu:
'Pa_OpenStream' : cannot convert parameter 7 from 'int (__cdecl *)(const void *,void *,unsigned long,const PaStreamCallbackTimeInfo *,PaStreamCallbackFlags,void *)' to 'PaStreamCallback (__stdcall *)' d:\programowanie\c++\moje programy\winuae-base\winuae\od-win32\sounddep\sound.cpp
Uzupełniamy w portaudio.h
deklarację PaStreamCallback
o __cdecl
.
Budujemy ponownie winuae
. Teraz to już tylko błędy linkowania.
Ujednolicamy Linker/Additional Dependencies
i Delay Loaded Dlls
dla wszystkich konfiguracji projektu winuae
. Uzupełniamy Additional Library Directories
dla wszystkich konfiguracji o:
..\..\..\logitechlcd;..\..\..\winpcap\Lib;..\..\..\openal;..\..\..\freetype\lib
Dodajemy do solucji WinIo.vcproj
. Dodajemy do referencji winuae
projekt WinIO
. Usuwamy winio.lib
z Linker/Additional Dependencies
. Dla projektu WinIO
ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
dla wszystkich konfiguracji. Upewnijmy się w solucji że odpowiednie konfiguracje zostały wybrane. Bardzo często się zdarza, że np. dla konfiguracji solucji Release WinIO
zostanie ustawiony na Debug
. Budujemy WinIO
.
Budujemy ponownie winuae
. Teraz zlib
. Robimy dokładnie to co poprzednio w przypadku WinIO
. Projekt to zlibstat.vcxproj
. Budujemy zlibstat
.
Budujemy winuae
. Teraz libpng
. Edytujemy libpng.vcxproj
. Usuwamy <import project="$(SolutionDir)\zlib.props">
. Dodajemy projekt do solucji. Ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
dla wszystkich konfiguracji. Target Name
zaś na $(ProjectName)
dla wszystkich konfiguracji. Ustawiamy Additional Include Directories
na ..\..\..\..\zlib
dla wszystkich konfiguracji. W właściwościach solucji ustawiamy Debug Library
i Release Library
dla odpowiednich konfiguracji. Dodajemy do referencji winuae
projekt libpng
. Usuwamy libpng.lib
z Linker/Additional Dependencies
. Budujemy libpng
.
Budujemy winuae
. Czas na portaudio
. Dodajemy do solucji portaudio.vcproj
. Dodajemy do referencji winuae
projekt portaudio
. Ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
dla wszystkich konfiguracji. Ustawiamy Output File
na domyślne dla wszystkich konfiguracji. Usuwamy portaudio_x86.lib
z Linker/Additional Dependencies
dla wszystkich konfiguracji. Budujemy portaudio
. Usuwamy z dysku jak i z projektu katalog ASIO
. Budujemy. Usuwamy portaudio.def
z projektu. Budujemy. Usuwamy dla wszystkich konfiguracji Module Definition File
. Dodajmy do symboli preprocesora dla wszystkich konfiguracji PA_NO_ASIO
. Zmieniamy w Delay Loaded Dlls
portaudio_x86.dll
na portaudio.dll
. Budujemy. Uwaga: po zmianie nazwy dll-ki nie skorzystamy już z oryginalnej.
Budujemy winuae
. Czas na enet
. Dodajemy do solucji enet.dsp
. Dodajemy do referencji winuae
projekt enet
. Ustawiamy Output Directory
i Intermediate Directory
na $(Configuration)\
dla wszystkich konfiguracji. Ustawiamy Output File
na domyślne dla wszystkich konfiguracji. Usuwamy enet.lib
z Linker/Additional Dependencies
dla wszystkich konfiguracji. Budujemy enet
.
Budujemy winuae
. Usuwamy prowizard.lib
z Linker/Additional Dependencies
dla wszystkich konfiguracji.
Budujemy winuae
. Czas na błędy typu unresolved externals
.
Dla projektu enet
, libpng
, prowizard
zmieniamy konwencje wywołań na stdcall
dla wszystkich konfiguracji.
Projekt portaudio
nie eksportuje żadnych symboli. Dodajemy pliki nagłówkowe do projektu portaudio
. Dodajemy na początek portaudio.h
#ifdef _USRDLL
#define DELC_EXTERN __declspec(dllexport)
#else
#define DELC_EXTERN __declspec(dllimport)
#endif
Dodajemy DELC_EXTERN
do każdej funkcji w portaudio.h
. Dodajemy _cdecl
do każdej funkcji. Czyścimy dla wszystkich konfiguracji Linker/Advanced/Import Library
.
Otwieramy pcap.h
, packet32.h
, remote-ext.h
i każdą funkcję raportowaną jako unresolved external
dekorujemy __cdecl
(a najlepiej wszystkie z tych plików).
W tym momencie jedyne błędy linkera jakie zostały to multiply symbol define
.
Dla projektów enet
, winuae
, portaudio
, prowizard
, libpng
, zlibstat
, winio
dla wszystkich konfiguracji poustawiajmy prawidłowo Runtime Library
.
Budujemy winuae
. I mamy plik wykonywalny.
Jeszcze jeśli idzie o Release
. Dodajemy do projektu zlibstat
do Pre_Build Event
:
cd ..\..\masmx86
bld_ml32.bat
Brak komentarzy:
Prześlij komentarz