project(darling) enable_language(ASM) cmake_minimum_required(VERSION 2.4.0) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/") if(CMAKE_SIZEOF_VOID_P EQUAL 4 OR CMAKE_INSTALL_LIBDIR STREQUAL "lib32") set(BITS 32) else(CMAKE_SIZEOF_VOID_P EQUAL 4 OR CMAKE_INSTALL_LIBDIR STREQUAL "lib32") set(BITS 64) endif(CMAKE_SIZEOF_VOID_P EQUAL 4 OR CMAKE_INSTALL_LIBDIR STREQUAL "lib32") if (NOT CMAKE_BUILD_TYPE) message(STATUS "No build type selected, default to Debug") set(CMAKE_BUILD_TYPE "Debug") endif(NOT CMAKE_BUILD_TYPE) if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(DEBUG TRUE) endif (${CMAKE_BUILD_TYPE} STREQUAL "Debug") message(STATUS "This is a ${BITS}-bit build") if (DEBUG) ADD_DEFINITIONS(-ggdb -DDEBUG) endif (DEBUG) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/xnu) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/xnu/bsd) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/darwin) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/util) include_directories(${CMAKE_BINARY_DIR}) # for config.h set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ###################### # iOS build # ###################### if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm.*") message(STATUS "Building Darling for iOS binary translation") add_subdirectory(src/util) add_subdirectory(src/libmach-o) add_subdirectory(src/libdyld) add_subdirectory(src/dyld) add_subdirectory(src/libSystem) add_dependencies(dyld mach-o) add_dependencies(dyld-bin dyld) # TODO: iOS will use a different set install(FILES etc/dylib.conf DESTINATION /etc/darling) # TODO: more libs else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm.*") ##################### # OS X build # ##################### message(STATUS "Building Darling for OS X binary translation") include(FindPkgConfig) include(FindGnustepBase) include(FindGnustepCorebase) include(FindGnustepGui) include(FindLibkqueue) include(FindLibobjc2) #include(FindOpal) pkg_check_modules(libbsd REQUIRED "libbsd >= 0.4.2") pkg_check_modules(libudev REQUIRED "libudev") #set(CMAKE_ASM_NASM_COMPILER "nasm") find_package(GnustepBase REQUIRED) find_package(GnustepCorebase REQUIRED) find_package(GnustepGui REQUIRED) find_package(Libkqueue REQUIRED) find_package(Libobjc2 REQUIRED) #find_package(Opal REQUIRED) if (CMAKE_INSTALL_LIBDIR STREQUAL "lib32") set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -m32") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") set(CMAKE_ASM_NASM_OBJECT_FORMAT "elf") SET(CMAKE_C_SIZEOF_DATA_PTR 4) SET(SUFFIX "32") endif(CMAKE_INSTALL_LIBDIR STREQUAL "lib32") if (CMAKE_INSTALL_LIBDIR STREQUAL "lib64") set(SUFFIX "64") endif (CMAKE_INSTALL_LIBDIR STREQUAL "lib64") SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${SUFFIX}/darling") enable_language(ASM-ATT) enable_language(ASM_NASM) include_directories(${LIBGNUSTEPBASE_INCLUDE_DIR}) include_directories(${LIBGNUSTEPCOREBASE_INCLUDE_DIR}) include_directories(${LIBKQUEUE_INCLUDE_DIR}) include_directories(${LIBOBJC2_INCLUDE_DIR}) include_directories(${LIBOPAL_INCLUDE_DIR}) configure_file(frameworks.h.in frameworks.h) # If building on a 64bit system, only install these for 64bits #if (CMAKE_SIZEOF_VOID_P EQUAL 4 OR NOT CMAKE_INSTALL_LIBDIR STREQUAL "lib32") install(FILES etc/dylib.conf DESTINATION /etc/darling) add_subdirectory(src/motool) # add_subdirectory(src/crash) #endif(CMAKE_SIZEOF_VOID_P EQUAL 4 OR NOT CMAKE_INSTALL_LIBDIR STREQUAL "lib32") add_subdirectory(src/util) add_subdirectory(src/libmach-o) add_subdirectory(src/libdyld) add_subdirectory(src/dyld) add_subdirectory(src/libSystem) add_subdirectory(src/libltdl) add_subdirectory(src/Cocoa) add_subdirectory(src/libobjcdarwin) add_subdirectory(src/CoreFoundation) add_subdirectory(src/libncurses) add_subdirectory(src/CoreSecurity) add_subdirectory(src/CoreServices) #add_subdirectory(src/CoreGraphics) add_subdirectory(src/ExceptionHandling) add_subdirectory(src/IOKit) add_subdirectory(src/Foundation) add_subdirectory(src/Carbon) add_subdirectory(src/SystemConfiguration) # Experimental stuff! if (WITH_COREAUDIO) set(FRAMEWORK_COREAUDIO TRUE) add_subdirectory(src/AudioUnit) add_subdirectory(src/AudioToolbox) endif (WITH_COREAUDIO) if (WITH_DARLING_APPKIT) set(FRAMEWORK_APPKIT TRUE) add_subdirectory(src/AppKit) endif (WITH_DARLING_APPKIT) add_subdirectory(src/CoreVideo) add_subdirectory(src/OpenGL) #add_subdirectory(src/libcrashhandler) add_subdirectory(src/thin) add_subdirectory(src/libstdc++darwin) add_dependencies(dyld mach-o) add_dependencies(dyld-bin dyld) add_dependencies(Cocoa crashhandler) endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm.*") configure_file(config.h.in config.h)