From efb1741a4912080c3c8b3368b68e78737d7c0ed9 Mon Sep 17 00:00:00 2001
From: Thomas Huth
Date: Sun, 1 Nov 2026 10:36:19 +0100
Subject: [PATCH] Add ENABLE_HATARI option to disable building main binary
---
CMakeLists.txt | 9 ++--
src/CMakeLists.txt | 112 ++++++++++++++++++++++++++-----------------
tests/CMakeLists.txt | 4 +-
3 files changed, 77 insertions(+), 48 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 205b40ba1..355228ff8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -52,6 +52,7 @@ endfunction (check_large_file)
# Conditional build features
# ##########################
+option(ENABLE_HATARI "Build the main Hatari executable" ON)
option(ENABLE_DSP_EMU "Enable DSP 56k emulator for Falcon mode" ON)
option(ENABLE_TRACING "Enable tracing messages for debugging" ON)
option(ENABLE_TOOLS "Build the Hatari tools" ON)
@@ -110,7 +111,7 @@ endif(ENABLE_OSX_BUNDLE)
# Check for libraries:
# ####################
-if(NOT DEFINED ENABLE_SDL3 OR ENABLE_SDL3)
+if(ENABLE_HATARI AND NOT DEFINED ENABLE_SDL3 OR ENABLE_SDL3)
find_package(SDL3 QUIET)
endif()
if(SDL3_FOUND)
@@ -119,7 +120,7 @@ if(SDL3_FOUND)
set(SDL2_LIBRARIES ${SDL3_LIBRARIES})
set(SDL2_LIBDIR $)
set(ENABLE_SDL3 1 CACHE BOOL "Use SDL3 instead of SDL2")
-else()
+elseif(ENABLE_HATARI)
find_package(SDL2)
if(NOT SDL2_FOUND)
message(FATAL_ERROR "SDL library not found!")
@@ -457,7 +458,9 @@ Libraries summary :
-------------------
")
-if(SDL3_FOUND)
+if(NOT ENABLE_HATARI)
+ message(" - sdl :\tnot building the main Hatari executable")
+elseif(SDL3_FOUND)
message(" - sdl :\tusing SDL3 ${SDL3_VERSION}")
else()
message(" - sdl :\tusing SDL2 ${SDL2_VERSION}")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4764e2172..111c72840 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -152,10 +152,12 @@ endif(ENABLE_LIBRETRO)
add_subdirectory(cpu)
add_subdirectory(debug)
add_subdirectory(falcon)
-add_subdirectory(gui-sdl)
-add_subdirectory(sdl)
-set(APP_TARGET_OBJECTS
+if(ENABLE_HATARI)
+ add_subdirectory(gui-sdl)
+ add_subdirectory(sdl)
+
+ set(APP_TARGET_OBJECTS
$
$
$
@@ -163,9 +165,12 @@ set(APP_TARGET_OBJECTS
$
$
$)
+endif(ENABLE_HATARI)
-# When building for macOS, add specific sources
-if(ENABLE_OSX_BUNDLE)
+if(NOT ENABLE_HATARI)
+ # When not building the main executable, then skip the following steps
+elseif(ENABLE_OSX_BUNDLE)
+ # When building for macOS, add specific sources
add_executable(${APP_NAME} MACOSX_BUNDLE ${GUIOSX_RSRCS} ${GUIOSX_DOCS}
${APP_TARGET_OBJECTS} ${GUIOSX_SOURCES})
target_compile_definitions(${APP_NAME} PRIVATE SDL_ENABLE_OLD_NAMES)
@@ -291,12 +296,7 @@ elseif(EMSCRIPTEN)
# Other targets, use default sources
else()
add_executable(${APP_NAME} ${APP_TARGET_OBJECTS})
-endif(ENABLE_OSX_BUNDLE)
-
-if(SDL2_OTHER_CFLAGS)
- target_compile_definitions(${APP_NAME} PRIVATE ${SDL2_OTHER_CFLAGS})
- # message(STATUS "Additional CFLAGS of SDL: ${SDL2_OTHER_CFLAGS}")
-endif(SDL2_OTHER_CFLAGS)
+endif()
if(ENABLE_LIBRETRO)
add_library(retro-hatari MODULE
@@ -308,91 +308,117 @@ if(ENABLE_LIBRETRO)
$)
endif(ENABLE_LIBRETRO)
-target_link_libraries(${APP_NAME} ${SDL2_LIBRARIES})
+if(ENABLE_HATARI)
+ if(SDL2_OTHER_CFLAGS)
+ target_compile_definitions(${APP_NAME} PRIVATE ${SDL2_OTHER_CFLAGS})
+ # message(STATUS "Additional CFLAGS of SDL: ${SDL2_OTHER_CFLAGS}")
+ endif(SDL2_OTHER_CFLAGS)
-if(Math_FOUND AND NOT APPLE)
- target_link_libraries(${APP_NAME} ${MATH_LIBRARY})
-endif()
+ target_link_libraries(${APP_NAME} ${SDL2_LIBRARIES})
+
+ if(Math_FOUND AND NOT APPLE)
+ target_link_libraries(${APP_NAME} ${MATH_LIBRARY})
+ endif()
+
+ if(X11_FOUND)
+ target_link_libraries(${APP_NAME} ${X11_LIBRARIES})
+ endif(X11_FOUND)
+
+ if(WIN32)
+ # Needed for socket() on Windows
+ target_link_libraries(${APP_NAME} ws2_32)
+ endif(WIN32)
+endif(ENABLE_HATARI)
if(Readline_FOUND)
- target_link_libraries(${APP_NAME} ${READLINE_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${READLINE_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${READLINE_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(Readline_FOUND)
if(ZLIB_FOUND)
- target_link_libraries(${APP_NAME} ${ZLIB_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${ZLIB_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${ZLIB_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(ZLIB_FOUND)
if(LibArchive_FOUND)
- target_link_libraries(${APP_NAME} ${LibArchive_LIBRARIES})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${LibArchive_LIBRARIES})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${LibArchive_LIBRARIES})
endif(ENABLE_LIBRETRO)
endif(LibArchive_FOUND)
if(PNG_FOUND)
- target_link_libraries(${APP_NAME} ${PNG_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${PNG_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${PNG_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(PNG_FOUND)
-if(X11_FOUND)
- target_link_libraries(${APP_NAME} ${X11_LIBRARIES})
-endif(X11_FOUND)
-
if(PortMidi_FOUND)
- target_link_libraries(${APP_NAME} ${PORTMIDI_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${PORTMIDI_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${PORTMIDI_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(PortMidi_FOUND)
if(CapsImage_FOUND)
- target_link_libraries(${APP_NAME} ${CAPSIMAGE_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${CAPSIMAGE_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${CAPSIMAGE_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(CapsImage_FOUND)
if(Udev_FOUND)
- target_link_libraries(${APP_NAME} ${UDEV_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${UDEV_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${UDEV_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(Udev_FOUND)
if(Capstone_FOUND)
- target_link_libraries(${APP_NAME} ${CAPSTONE_LIBRARY})
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} ${CAPSTONE_LIBRARY})
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari ${CAPSTONE_LIBRARY})
endif(ENABLE_LIBRETRO)
endif(Capstone_FOUND)
if(APPLE)
- target_link_libraries(${APP_NAME} "-framework Cocoa")
+ if(ENABLE_HATARI)
+ target_link_libraries(${APP_NAME} "-framework Cocoa")
+ endif(ENABLE_HATARI)
if(ENABLE_LIBRETRO)
target_link_libraries(retro-hatari "-framework Cocoa")
endif(ENABLE_LIBRETRO)
endif()
-if(WIN32)
- # Needed for socket() on Windows
- target_link_libraries(${APP_NAME} ws2_32)
-endif(WIN32)
-
-
-if(ENABLE_OSX_BUNDLE)
- install(TARGETS ${APP_NAME} BUNDLE DESTINATION /Applications)
-else()
- install(TARGETS ${APP_NAME} RUNTIME DESTINATION ${BINDIR})
- install(FILES hatari-icon.bmp DESTINATION ${DATADIR})
- if(TOS_IMG_FILE)
- install(FILES ${TOS_IMG_FILE} DESTINATION ${DATADIR})
- endif(TOS_IMG_FILE)
-endif(ENABLE_OSX_BUNDLE)
+if(ENABLE_HATARI)
+ if(ENABLE_OSX_BUNDLE)
+ install(TARGETS ${APP_NAME} BUNDLE DESTINATION /Applications)
+ else()
+ install(TARGETS ${APP_NAME} RUNTIME DESTINATION ${BINDIR})
+ install(FILES hatari-icon.bmp DESTINATION ${DATADIR})
+ if(TOS_IMG_FILE)
+ install(FILES ${TOS_IMG_FILE} DESTINATION ${DATADIR})
+ endif(TOS_IMG_FILE)
+ endif(ENABLE_OSX_BUNDLE)
+endif(ENABLE_HATARI)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index c496c1d94..7a28f2c75 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -6,7 +6,7 @@ if(ENABLE_LIBRETRO AND HAVE_DLFCN_H)
add_subdirectory(retro)
endif()
-if(UNIX)
+if(UNIX AND ENABLE_HATARI)
add_test(NAME command-fifo COMMAND
${CMAKE_CURRENT_SOURCE_DIR}/cmdfifo.sh $)
add_test(NAME config-file COMMAND
@@ -23,4 +23,4 @@ if(UNIX)
add_subdirectory(screen)
add_subdirectory(serial)
add_subdirectory(xbios)
-endif(UNIX)
+endif(UNIX AND ENABLE_HATARI)