From f928e7c0fab2703d5e857cb61cc07ccd78dbfc9d Mon Sep 17 00:00:00 2001 From: Cameron Armstrong Date: Thu, 28 Dec 2023 07:53:32 +0800 Subject: [PATCH] Get working ror libnix and clib2 --- CMakeLists.txt | 56 ++++++++++++++++++++++++++++----------------- README.md | 4 +++- apps/CMakeLists.txt | 2 +- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bba3b7b0..41c0d89c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,10 +45,6 @@ include(CMakePackageConfigHelpers) option(BUILD_SHARED_LIBS "Default to building shared libraries" ON) option(BUILD_STATIC_LIBS "Default to building static libraries" ON) -if (BUILD_SHARED_LIBS) - add_definitions(-D JSON_C_DLL) -endif() - # Generate a release merge and test it to verify the correctness of republishing the package. ADD_CUSTOM_TARGET(distcheck COMMAND make package_source @@ -73,20 +69,34 @@ option(DISABLE_JSON_PATCH "Disable JSON patch (RFC6902) support." option(NEWLOCALE_NEEDS_FREELOCALE "Work around newlocale bugs in old FreeBSD by calling freelocale" OFF) option(BUILD_APPS "Default to building apps" ON) - -if (UNIX OR MINGW OR CYGWIN) +if (UNIX OR MINGW OR CYGWIN OR AMIGA) list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) endif() if (${CMAKE_SYSTEM_NAME} STREQUAL "AmigaOS") - set(AMIGA 1) + set(AMIGA ON) set(DISABLE_THREAD_LOCAL_STORAGE ON) set(ENABLE_THREADING OFF) + set(BUILD_SHARED_LIBS OFF) + set(BUILD_APPS OFF) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) if ($ENV{CROSS_PFX} STREQUAL "m68k-amigaos") - set(AMIGA_M68K 1) + set(AMIGA_M68K ON) + set(BUILD_TESTING OFF) message(STATUS "Building for Motorola 68k AmigaOS") + if (${M68K_CRT} STREQUAL "newlib") + set(NEWLIB ON) + elseif(${M68K_CRT} STREQUAL "clib2") + set(CLIB2 ON) + elseif(${M68K_CRT} STREQUAL "nix20") + set(NIX20 ON) + elseif(${M68K_CRT} STREQUAL "nix13") + set(NIX13 ON) + else() + set(NEWLIB ON) + endif() elseif ($ENV{CROSS_PFX} STREQUAL "ppc-amigaos") - set(AMIGA_PPC 1) + set(AMIGA_PPC ON) message(STATUS "Building for PowerPC AmigaOS") else() message(FATAL_ERROR "Unsupported AmigaOS target") @@ -95,6 +105,10 @@ else() message(STATUS "Building for ${CMAKE_SYSTEM_NAME}") endif() +if (BUILD_SHARED_LIBS) + add_definitions(-D JSON_C_DLL) +endif() + if (UNIX OR AMIGA) list(APPEND CMAKE_REQUIRED_LIBRARIES m) endif() @@ -129,7 +143,7 @@ check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) # for getrusage check_include_file("dlfcn.h" HAVE_DLFCN_H) check_include_file("endian.h" HAVE_ENDIAN_H) check_include_file("limits.h" HAVE_LIMITS_H) -if (NOT AMIGA) +if (NOT AMIGA_M68K) check_include_file("locale.h" HAVE_LOCALE_H) endif() check_include_file("memory.h" HAVE_MEMORY_H) @@ -169,17 +183,17 @@ endif() check_symbol_exists(vasprintf "stdio.h" HAVE_VASPRINTF) check_symbol_exists(vsnprintf "stdio.h" HAVE_VSNPRINTF) check_symbol_exists(vprintf "stdio.h" HAVE_VPRINTF) -if (NOT AMIGA) +if (NOT AMIGA_M68K) check_symbol_exists(arc4random "stdlib.h" HAVE_ARC4RANDOM) - if (NOT HAVE_ARC4RANDOM AND DISABLE_EXTRA_LIBS STREQUAL "OFF") - check_include_file(bsd/stdlib.h HAVE_BSD_STDLIB_H) - if (HAVE_BSD_STDLIB_H) - list(APPEND CMAKE_REQUIRED_LIBRARIES "bsd") - unset(HAVE_ARC4RANDOM CACHE) - check_symbol_exists(arc4random "bsd/stdlib.h" HAVE_ARC4RANDOM) - if (NOT HAVE_ARC4RANDOM) - list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "bsd") - endif() +endif() +if (NOT HAVE_ARC4RANDOM AND DISABLE_EXTRA_LIBS STREQUAL "OFF") + check_include_file(bsd/stdlib.h HAVE_BSD_STDLIB_H) + if (HAVE_BSD_STDLIB_H) + list(APPEND CMAKE_REQUIRED_LIBRARIES "bsd") + unset(HAVE_ARC4RANDOM CACHE) + check_symbol_exists(arc4random "bsd/stdlib.h" HAVE_ARC4RANDOM) + if (NOT HAVE_ARC4RANDOM) + list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "bsd") endif() endif() endif() @@ -221,7 +235,7 @@ endif() if (HAVE_SYS_RANDOM_H) check_symbol_exists(getrandom "sys/random.h" HAVE_GETRANDOM) endif() -if (HAVE_SYS_RESOURCE_H AND NOT AMIGA) +if (HAVE_SYS_RESOURCE_H) check_symbol_exists(getrusage "sys/resource.h" HAVE_GETRUSAGE) endif() diff --git a/README.md b/README.md index b974bd4c..60f3b93b 100644 --- a/README.md +++ b/README.md @@ -288,12 +288,14 @@ docker run --rm \ -e USER=$( id -u ) -e GROUP=$( id -g ) \ -it sacredbanana/amiga-compiler:m68k-amigaos bash cd json-c-build -cmake .. +cmake -DM68K_CRT=newlib .. make ``` libjson-c.a will get created in the json-c-build directory. +You can change newlib to nix20, nix13 or clib2 if you would like to build the library suited for libnix or clib2 instead. Newlib is default. + To build for PowerPC Amiga: ``` diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index c278b025..f7c9dec6 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -95,7 +95,7 @@ endif() # end "standalone mode" block # --------------------------------- check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) # for getrusage -if (HAVE_SYS_RESOURCE_H AND NOT AMIGA) +if (HAVE_SYS_RESOURCE_H) check_symbol_exists(getrusage "sys/resource.h" HAVE_GETRUSAGE) endif() -- 2.47.3