Skip to content

Instantly share code, notes, and snippets.

@darkoverlordofdata
Created November 7, 2023 00:26
Show Gist options
  • Save darkoverlordofdata/0125c648cd5b846471711f30094f0f99 to your computer and use it in GitHub Desktop.
Save darkoverlordofdata/0125c648cd5b846471711f30094f0f99 to your computer and use it in GitHub Desktop.
cmake file gnustep module

Put this in ~/.local/lib/cmake/GNUStep

add to CMakeLists.txt:

include ( CMakeToolsHelpers OPTIONAL )
list ( APPEND CMAKE_MODULE_PATH ~/.local/lib/cmake/GNUstep )
find_package ( GNUstep REQUIRED )

link_directories ( ${GNUSTEP_LIBRARY_DIRS} )

include_directories ( AFTER ${GNUSTEP_INCLUDE_DIRS} )

add_executable (
    ${APP_NAME}
    Source/main.m
    ...
   )
   
target_link_libraries ( ${APP_NAME} ${GNUSTEP_LIBRARIES} )
set ( GNUSTEP_FOUND True )
enable_language( OBJC )
##
#
# gnustep-config --objc-flags
#
# set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -MMD" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -MP" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGNUSTEP" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGNUSTEP_BASE_LIBRARY=1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGNU_GUI_LIBRARY=1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGNUSTEP_RUNTIME=1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -D_NONFRAGILE_ABI=1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGNUSTEP_BASE_LIBRARY=1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fno-strict-aliasing" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fexceptions" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fobjc-exceptions" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -D_NATIVE_OBJC_EXCEPTIONS" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -pthread" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fPIC" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -Wall" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGSWARN" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DGSDIAGNOSE" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -Wno-import" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -g" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -O2" )
IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fobjc-runtime=gnustep-2.0" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DOBJC_RUNTIME=20" )
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fobjc-runtime=gnustep-2.1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -DOBJC_RUNTIME=21" )
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fblocks" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fconstant-string-class=NSConstantString" )
set ( GNUSTEP_INCLUDE_DIRS "${GNUSTEP_INCLUDE_DIRS};." )
set ( GNUSTEP_INCLUDE_DIRS "${GNUSTEP_INCLUDE_DIRS};/home/darko/GNUstep/Library/Headers" )
set ( GNUSTEP_INCLUDE_DIRS "${GNUSTEP_INCLUDE_DIRS};/usr/GNUstep/Local/Library/Headers" )
set ( GNUSTEP_INCLUDE_DIRS "${GNUSTEP_INCLUDE_DIRS};/usr/GNUstep/System/Library/Headers" )
#
# gnustep-config --gui-libs
#
# set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fuse-ld=/usr/bin/ld.gold" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -pthread" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fexceptions" )
# set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -rdynamic" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fobjc-runtime=gnustep-2.1" )
set ( CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fblocks" )
set ( GNUSTEP_LIBRARY_DIRS "${GNUSTEP_LIBRARY_DIRS};/usr/lib" )
set ( GNUSTEP_LIBRARY_DIRS "${GNUSTEP_LIBRARY_DIRS};/usr/local/lib" )
set ( GNUSTEP_LIBRARY_DIRS "${GNUSTEP_LIBRARY_DIRS};/home/darko/GNUstep/Library/Libraries" )
set ( GNUSTEP_LIBRARY_DIRS "${GNUSTEP_LIBRARY_DIRS};/usr/GNUstep/Local/Library/Libraries" )
set ( GNUSTEP_LIBRARY_DIRS "${GNUSTEP_LIBRARY_DIRS};/usr/GNUstep/System/Library/Libraries" )
set ( GNUSTEP_LIBRARIES "${GNUSTEP_LIBRARIES};m" )
set ( GNUSTEP_LIBRARIES "${GNUSTEP_LIBRARIES};objc" )
set ( GNUSTEP_LIBRARIES "${GNUSTEP_LIBRARIES};gnustep-gui" )
set ( GNUSTEP_LIBRARIES "${GNUSTEP_LIBRARIES};gnustep-base" )
set ( GNUSTEP_LIBRARIES "${GNUSTEP_LIBRARIES};pthread" )
#
# which gnustep-config
# /usr/GNUstep/System/Tools/gnustep-config
#
##
# find_program(GNUSTEP_CONFIG_EXECUTABLE NAMES "gnustep-config")
# if (GNUSTEP_CONFIG_EXECUTABLE STREQUAL "GNUSTEP_CONFIG_EXECUTABLE-NOTFOUND")
# mark_as_advanced(GNUSTEP_CONFIG_EXECUTABLE)
# else(GNUSTEP_CONFIG_EXECUTABLE STREQUAL "GNUSTEP_CONFIG_EXECUTABLE-NOTFOUND")
# endif(GNUSTEP_CONFIG_EXECUTABLE STREQUAL "GNUSTEP_CONFIG_EXECUTABLE-NOTFOUND")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment