From fa7c70c19e4f3636c058a2a89d52adc4da0066f9 Mon Sep 17 00:00:00 2001 From: Marlon Beijer Date: Thu, 18 Aug 2022 01:39:45 +0200 Subject: [PATCH 1/2] Begin trying to fix AmigaOS4 support --- CMakeLists.txt | 9 + cmake/FindSDL.cmake | 195 ------------------ platforms/ppc-amigaos/prep.sh | 36 ++-- src/milkyplay/AudioDriverBase.cpp | 2 +- src/milkyplay/XModule.h | 2 +- .../drivers/amiga/AudioDriver_Amiga.h | 2 +- src/ppui/BasicTypes.h | 5 +- src/ppui/CMakeLists.txt | 60 ++++-- src/ppui/osinterface/amiga/PPMutex.h | 10 +- src/ppui/osinterface/amiga/PPPath_Amiga.h | 20 +- .../osinterface/posix/PPSystemString_POSIX.h | 2 +- src/tracker/CMakeLists.txt | 33 ++- 12 files changed, 128 insertions(+), 248 deletions(-) delete mode 100644 cmake/FindSDL.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index ea6cd01a..d68c73f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,6 +189,15 @@ elseif(WIN32) endif() elseif(AMIGA OR AROS) install(FILES ${PROJECT_SOURCE_DIR}/resources/packaging/amigaos/milkytracker.info DESTINATION .) + + if(AMIGAOS4 OR MORPHOS) + if(AMIGAOS4) + #add_custom_command() + endif() + + find_package(SDL 2.0 REQUIRED) + find_package(OpenGL REQUIRED) + endif() # AROS will provide the SDL dependency via makefile. else() diff --git a/cmake/FindSDL.cmake b/cmake/FindSDL.cmake deleted file mode 100644 index 2459bcf8..00000000 --- a/cmake/FindSDL.cmake +++ /dev/null @@ -1,195 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# FindSDL -# ------- -# -# Locate SDL library -# -# This module defines -# -# :: -# -# SDL_LIBRARY, the name of the library to link against -# SDL_FOUND, if false, do not try to link to SDL -# SDL_INCLUDE_DIR, where to find SDL.h -# SDL_VERSION_STRING, human-readable string containing the version of SDL -# -# -# -# This module responds to the flag: -# -# :: -# -# SDL_BUILDING_LIBRARY -# If this is defined, then no SDL_main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the proper link flags -# as part of the returned SDL_LIBRARY variable. -# -# -# -# Don't forget to include SDLmain.h and SDLmain.m your project for the -# OS X framework based version. (Other versions link to -lSDLmain which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# -# Additional Note: If you see an empty SDL_LIBRARY_TEMP in your -# configuration and no SDL_LIBRARY, it means CMake did not find your SDL -# library (SDL.dll, libsdl.so, SDL.framework, etc). Set -# SDL_LIBRARY_TEMP to point to your SDL library, and configure again. -# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this -# value as appropriate. These values are used to generate the final -# SDL_LIBRARY variable, but when these values are unset, SDL_LIBRARY -# does not get created. -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. l.e.galup 9-20-02 -# -# Modified by Eric Wing. Added code to assist with automated building -# by using environmental variables and providing a more -# controlled/consistent search behavior. Added new modifications to -# recognize OS X frameworks and additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL -# guidelines. Added a search for SDLmain which is needed by some -# platforms. Added a search for threads which is needed by some -# platforms. Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of SDL_LIBRARY to -# override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL/SDL.h to just SDL.h -# This needed to change because "proper" SDL convention is #include -# "SDL.h", not . This is done for portability reasons -# because not all systems place things in SDL/ (see FreeBSD). - -find_path(SDL_INCLUDE_DIR SDL.h - HINTS - ENV SDLDIR - PATH_SUFFIXES SDL SDL12 SDL11 - # path suffixes to search inside ENV{SDLDIR} - include/SDL include/SDL12 include/SDL11 include os-includeppc os-includeppc/SDL -) - -message(STATUS "SDL dir: ${SDL_INCLUDE_DIR}") - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(VC_LIB_PATH_SUFFIX lib/x64) -else() - set(VC_LIB_PATH_SUFFIX lib/x86) -endif() - -# SDL-1.1 is the name used by FreeBSD ports... -# don't confuse it for the version number. -find_library(SDL_LIBRARY_TEMP - NAMES SDL SDL-1.1 SDL_wos - HINTS - ENV SDLDIR - PATH_SUFFIXES lib ppc-amigaos/newlib/lib ${VC_LIB_PATH_SUFFIX} -) - -# Hide this cache variable from the user, it's an internal implementation -# detail. The documented library variable for the user is SDL_LIBRARY -# which is derived from SDL_LIBRARY_TEMP further below. -set_property(CACHE SDL_LIBRARY_TEMP PROPERTY TYPE INTERNAL) - -if(NOT SDL_BUILDING_LIBRARY) - if(NOT SDL_INCLUDE_DIR MATCHES ".framework") - # Non-OS X framework versions expect you to also dynamically link to - # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms - # seem to provide SDLmain for compatibility even though they don't - # necessarily need it. - find_library(SDLMAIN_LIBRARY - NAMES SDLmain SDLmain-1.1 - HINTS - ENV SDLDIR - PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} - PATHS - /sw - /opt/local - /opt/csw - /opt - ) - endif() -endif() - -# SDL may require threads on your system. -# The Apple build may not need an explicit flag because one of the -# frameworks may already provide it. -# But for non-OSX systems, I will use the CMake Threads package. -if(NOT APPLE AND NOT (AMIGA AND WARPOS) AND NOT (AMIGA AND AMIGAOS3)) - find_package(Threads) -endif() - -# MinGW needs an additional link flag, -mwindows -# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -mwindows -if(MINGW) - set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW") -endif() - -if(SDL_LIBRARY_TEMP) - # For SDLmain - if(SDLMAIN_LIBRARY AND NOT SDL_BUILDING_LIBRARY) - list(FIND SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" _SDL_MAIN_INDEX) - if(_SDL_MAIN_INDEX EQUAL -1) - set(SDL_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" ${SDL_LIBRARY_TEMP}) - endif() - unset(_SDL_MAIN_INDEX) - endif() - - # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. - # CMake doesn't display the -framework Cocoa string in the UI even - # though it actually is there if I modify a pre-used variable. - # I think it has something to do with the CACHE STRING. - # So I use a temporary variable until the end so I can set the - # "real" variable in one-shot. - if(APPLE) - set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") - endif() - - # For threads, as mentioned Apple doesn't need this. - # In fact, there seems to be a problem if I used the Threads package - # and try using this line, so I'm just skipping it entirely for OS X. - if(NOT APPLE) - set(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - endif() - - # For MinGW library - if(MINGW) - set(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) - endif() - - # Set the final string here so the GUI reflects the final state. - set(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") -endif() - -if(SDL_INCLUDE_DIR AND EXISTS "${SDL_INCLUDE_DIR}/SDL_version.h") - file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL_INCLUDE_DIR}/SDL_version.h" SDL_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$") - string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MAJOR "${SDL_VERSION_MAJOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL_VERSION_MINOR "${SDL_VERSION_MINOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL_VERSION_PATCH "${SDL_VERSION_PATCH_LINE}") - set(SDL_VERSION_STRING ${SDL_VERSION_MAJOR}.${SDL_VERSION_MINOR}.${SDL_VERSION_PATCH}) - unset(SDL_VERSION_MAJOR_LINE) - unset(SDL_VERSION_MINOR_LINE) - unset(SDL_VERSION_PATCH_LINE) - unset(SDL_VERSION_MAJOR) - unset(SDL_VERSION_MINOR) - unset(SDL_VERSION_PATCH) -endif() - -#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) - -#FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL -# REQUIRED_VARS SDL_LIBRARY SDL_INCLUDE_DIR -# VERSION_VAR SDL_VERSION_STRING) - diff --git a/platforms/ppc-amigaos/prep.sh b/platforms/ppc-amigaos/prep.sh index 7f5fc2b0..c25de2fd 100755 --- a/platforms/ppc-amigaos/prep.sh +++ b/platforms/ppc-amigaos/prep.sh @@ -33,20 +33,32 @@ cp -fvr MiniGL/SDK/local/common/include/* ${SYSROOT}/include/ cp -fvr MiniGL/SDK/local/newlib/lib/* ${SYSROOT}/lib/ cd "${SUBMODULES}" +#SDL2.0 +rm -rf SDL2 +mkdir -p "${SUBMODULES}"/SDL2 +cd "${SUBMODULES}"/SDL2 +wget http://os4depot.net/share/library/misc/sdl2.lha -O sdl2.lha +lha -x sdl2.lha +mkdir -p ${SYSROOT}/usr/include +mkdir -p ${SYSROOT}/usr/lib +rm -rf ${SYSROOT}/include/SDL +cp -fvr SDL2/SDK/local/newlib/include/* ${SYSROOT}/include/ +mv -fv ${SYSROOT}/include/SDL2 ${SYSROOT}/include/SDL +cp -fvr SDL2/SDK/local/newlib/lib/* ${SYSROOT}/lib/ +mv -fv ${SYSROOT}/lib/libSDL2-2.0.so ${SYSROOT}/lib/libSDL.so +mv -fv ${SYSROOT}/lib/libSDL2.a ${SYSROOT}/lib/libSDL.a +cd "${SUBMODULES}" # SDL1.2 -if [ ! -d "${SUBMODULES}/SDL" ]; then - git clone https://github.com/AmigaPorts/SDL.git "${SUBMODULES}"/SDL -fi -cd "${SUBMODULES}"/SDL -git checkout SDL-1.2-AmigaOS3 -git pull -rm -rf "${SUBMODULES}"/SDL/build -mkdir -p "${SUBMODULES}"/SDL/build -cd "${SUBMODULES}"/SDL/build -cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${SYSROOT} -DTOOLCHAIN_COMMON="${M68K_COMMON} -O3 -fno-exceptions -w -DBIG_ENDIAN -DAMIGA -fpermissive -std=c++14" -cmake --build . --config Release --target install -- -j$(getconf _NPROCESSORS_ONLN) -cd "${SUBMODULES}" +#if [ ! -d "${SUBMODULES}/SDL-2.0" ]; then +# git clone https://github.com/AmigaPorts/SDL-2.0.git "${SUBMODULES}"/SDL-2.0 +#fi +#cd "${SUBMODULES}"/SDL-2.0 +#cd "${SUBMODULES}"/SDL-2.0 +#ln -sf /opt/ppc-amigaos/usr/include/GL ./include/GL +#ln -sf /opt/ppc-amigaos/usr/include/mgl ./include/mgl +#make -f Makefile.amigaos4 -j$(getconf _NPROCESSORS_ONLN) +#cd "${SUBMODULES}" # Zziplib #rm -rf "${SUBMODULES}"/zziplib/build diff --git a/src/milkyplay/AudioDriverBase.cpp b/src/milkyplay/AudioDriverBase.cpp index c03bc55a..0eb441b2 100644 --- a/src/milkyplay/AudioDriverBase.cpp +++ b/src/milkyplay/AudioDriverBase.cpp @@ -46,7 +46,7 @@ # include #endif -#if defined(__AMIGA__) +#if defined(__amigaos3__) extern "C" void usleep(unsigned long microseconds); #endif diff --git a/src/milkyplay/XModule.h b/src/milkyplay/XModule.h index 60bc25d3..05a240bf 100644 --- a/src/milkyplay/XModule.h +++ b/src/milkyplay/XModule.h @@ -39,7 +39,7 @@ #include "XMFile.h" #ifdef __AMIGA__ -# include +# include #endif #include "tmm.h" diff --git a/src/milkyplay/drivers/amiga/AudioDriver_Amiga.h b/src/milkyplay/drivers/amiga/AudioDriver_Amiga.h index 69e5317f..22af5500 100644 --- a/src/milkyplay/drivers/amiga/AudioDriver_Amiga.h +++ b/src/milkyplay/drivers/amiga/AudioDriver_Amiga.h @@ -13,7 +13,7 @@ #include "ProxyProcessor.h" #include -#include +#include #include #include diff --git a/src/ppui/BasicTypes.h b/src/ppui/BasicTypes.h index 7deca5ab..a7d90be9 100644 --- a/src/ppui/BasicTypes.h +++ b/src/ppui/BasicTypes.h @@ -40,10 +40,9 @@ typedef signed int pp_int32; #endif #if !defined(__PPUI_WINDOWS__) - #include - #include + #include + #include #include - #include #include #include "VirtualKeys.h" #include "PPSystemString_POSIX.h" diff --git a/src/ppui/CMakeLists.txt b/src/ppui/CMakeLists.txt index c793c8c2..495b77dc 100644 --- a/src/ppui/CMakeLists.txt +++ b/src/ppui/CMakeLists.txt @@ -142,27 +142,47 @@ elseif(WIN32) win32 ) elseif(AROS OR AMIGA) - enable_language(ASM_VASM) + if(AMIGAOS3) + enable_language(ASM_VASM) + + target_sources(ppui + PRIVATE + # Sources + amiga/DisplayDevice_Amiga.cpp + amiga/DisplayDevice_Amiga.asm + + # Headers + amiga/DisplayDevice_Amiga.h + ) + else() + target_sources(ppui + PRIVATE + # Sources + sdl/DisplayDeviceFB_SDL.cpp + sdl/DisplayDevice_SDL.cpp - target_sources(ppui - PRIVATE - # Sources - amiga/DisplayDevice_Amiga.cpp - amiga/DisplayDevice_Amiga.asm + # Headers + sdl/DisplayDeviceFB_SDL.h + sdl/DisplayDevice_SDL.h + ) - # Headers - amiga/DisplayDevice_Amiga.h - ) - target_include_directories(ppui - PUBLIC - osinterface/amiga - osinterface/posix - amiga - ) - target_include_directories(ppui - PRIVATE - ${PROJECT_SOURCE_DIR}/include/amiga - ) + target_include_directories(ppui + PUBLIC + sdl + ${SDL_INCLUDE_DIRS} + ${OPENGL_INCLUDE_DIR} + ) + endif() + target_include_directories(ppui + PUBLIC + osinterface/amiga + osinterface/posix + amiga + ) + target_include_directories(ppui + PRIVATE + ${PROJECT_SOURCE_DIR}/include/amiga + ) else() target_sources(ppui PRIVATE @@ -177,7 +197,7 @@ else() target_include_directories(ppui PUBLIC sdl - ${SDL2_INCLUDE_DIRS} + ${SDL_INCLUDE_DIRS} ) endif() diff --git a/src/ppui/osinterface/amiga/PPMutex.h b/src/ppui/osinterface/amiga/PPMutex.h index b948909d..276056af 100644 --- a/src/ppui/osinterface/amiga/PPMutex.h +++ b/src/ppui/osinterface/amiga/PPMutex.h @@ -24,7 +24,15 @@ #define PPMUTEX__H #include -#include +#include + +#ifdef __amigaos4__ +#define AllocMem IExec->AllocMem +#define FreeMem IExec->FreeMem +#define InitSemaphore IExec->InitSemaphore +#define ObtainSemaphore IExec->ObtainSemaphore +#define ReleaseSemaphore IExec->ReleaseSemaphore +#endif class PPMutex { diff --git a/src/ppui/osinterface/amiga/PPPath_Amiga.h b/src/ppui/osinterface/amiga/PPPath_Amiga.h index 8840b370..c3fcc762 100644 --- a/src/ppui/osinterface/amiga/PPPath_Amiga.h +++ b/src/ppui/osinterface/amiga/PPPath_Amiga.h @@ -25,8 +25,24 @@ #include "PPPath.h" -#include -#include +#include +#include + +#ifdef __amigaos4__ +#define AddPart IDOS->AddPart +#define Lock IDOS->Lock +#define LockDosList IDOS->LockDosList +#define UnLockDosList IDOS->UnLockDosList +#define UnLock IDOS->UnLock +#define NextDosEntry IDOS->NextDosEntry +#define ExNext IDOS->ExNext +#define NameFromLock IDOS->NameFromLock +#define AllocDosObject IDOS->AllocDosObject +#define FreeDosObject IDOS->FreeDosObject +#define Examine IDOS->Examine +#define ParentDir IDOS->ParentDir +#define AllocMem IExec->AllocMem +#endif class PPPathEntry_Amiga : public PPPathEntry { diff --git a/src/ppui/osinterface/posix/PPSystemString_POSIX.h b/src/ppui/osinterface/posix/PPSystemString_POSIX.h index ece423c6..10944b7b 100644 --- a/src/ppui/osinterface/posix/PPSystemString_POSIX.h +++ b/src/ppui/osinterface/posix/PPSystemString_POSIX.h @@ -144,7 +144,7 @@ class PPSystemString pp_int32 compareToNoCase(const PPSystemString& str) const { - return strcasecmp(strBuffer, str.strBuffer); + return strcasecmp((const char*)strBuffer, (const char*)str.strBuffer); } void toUpper() diff --git a/src/tracker/CMakeLists.txt b/src/tracker/CMakeLists.txt index 150070cb..f917c259 100644 --- a/src/tracker/CMakeLists.txt +++ b/src/tracker/CMakeLists.txt @@ -284,17 +284,28 @@ elseif(WIN32) win32/Win32_resource.h ) elseif(AROS OR AMIGA) - target_sources(tracker PRIVATE - # Sources - amiga/Amiga_KeyTranslation.cpp - amiga/Amiga_Main.cpp - amiga/Amiga_StackSwap.cpp - amiga/AmigaApplication.cpp - - # Headers - amiga/Amiga_KeyTranslation.h - amiga/AmigaApplication.h - ) + if(AMIGAOS3) + target_sources(tracker PRIVATE + # Sources + amiga/Amiga_KeyTranslation.cpp + amiga/Amiga_Main.cpp + amiga/Amiga_StackSwap.cpp + amiga/AmigaApplication.cpp + + # Headers + amiga/Amiga_KeyTranslation.h + amiga/AmigaApplication.h + ) + else() + target_sources(tracker PRIVATE + # Sources + sdl/SDL_KeyTranslation.cpp + sdl/SDL_Main.cpp + + # Headers + sdl/SDL_KeyTranslation.h + ) + endif() target_include_directories(tracker PRIVATE ${PROJECT_SOURCE_DIR}/include/amiga From 5e1ade3402127bc884b2ba056be1fe11e55f45ce Mon Sep 17 00:00:00 2001 From: Marlon Beijer Date: Thu, 18 Aug 2022 01:43:25 +0200 Subject: [PATCH 2/2] Re-enable ppc-amigaos build target --- JenkinsEnv.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/JenkinsEnv.json b/JenkinsEnv.json index 48d6578b..a160fab0 100644 --- a/JenkinsEnv.json +++ b/JenkinsEnv.json @@ -7,6 +7,14 @@ "Dockerfile": "", "BuildIfSuccessful": "", "BuildParam": "-DM68K_CPU=68040 -DM68K_FPU=hard" - } + }, + { + "DockerRoot": "amigadev", + "DockerImage": "crosstools", + "DockerTag": "ppc-amigaos", + "Dockerfile": "", + "BuildIfSuccessful": "", + "BuildParam": "" + } ] }