From c8837a9ceb326f6c41fe3fd700975f61c44a97be Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Sat, 16 May 2015 17:02:19 +0100 Subject: [PATCH] CMake files for cctools --- cctools/CMakeLists.txt | 51 ++++++++++++++++++++ cctools/ar/CMakeLists.txt | 27 +++++++++++ cctools/as/CMakeLists.txt | 104 ++++++++++++++++++++++++++++++++++++++++ cctools/as/check-as | 16 +++++++ cctools/cbtlibs/CMakeLists.txt | 13 +++++ cctools/cctools_version.c.in | 4 ++ cctools/efitools/CMakeLists.txt | 23 +++++++++ cctools/ld/CMakeLists.txt | 31 ++++++++++++ cctools/libstuff/CMakeLists.txt | 72 ++++++++++++++++++++++++++++ cctools/misc/CMakeLists.txt | 93 +++++++++++++++++++++++++++++++++++ cctools/otool/CMakeLists.txt | 58 ++++++++++++++++++++++ 11 files changed, 492 insertions(+) create mode 100644 cctools/CMakeLists.txt create mode 100644 cctools/ar/CMakeLists.txt create mode 100644 cctools/as/CMakeLists.txt create mode 100755 cctools/as/check-as create mode 100644 cctools/cbtlibs/CMakeLists.txt create mode 100644 cctools/cctools_version.c.in create mode 100644 cctools/efitools/CMakeLists.txt create mode 100644 cctools/ld/CMakeLists.txt create mode 100644 cctools/libstuff/CMakeLists.txt create mode 100644 cctools/misc/CMakeLists.txt create mode 100644 cctools/otool/CMakeLists.txt diff --git a/cctools/CMakeLists.txt b/cctools/CMakeLists.txt new file mode 100644 index 0000000..0df89b7 --- /dev/null +++ b/cctools/CMakeLists.txt @@ -0,0 +1,51 @@ + +set(CCTOOLS_VERSION_NUM 895.0) + +# We need this on in the libraries as well as the apps. +if(XTOOLS_LTO_SUPPORT) + add_definitions(-DLTO_SUPORT) + set(LTO_SUPPORT_INFO "(with LLVM LTO support)") +endif() + +option(CCTOOLS_EFITOOLS "Build efitools as part of cctools" OFF) +option(CCTOOLS_LD_CLASSIC "Build ld_classic as part of cctools" ON) + +configure_file ( + "${CMAKE_SOURCE_DIR}/cctools/cctools_version.c.in" + "${CMAKE_BINARY_DIR}/cctools/cctools_version.c" + ) + +add_subdirectory(libstuff) +add_subdirectory(cbtlibs) + +if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/as/CMakeLists.txt ) + add_subdirectory(as) +endif() + +if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/ar/CMakeLists.txt ) + add_subdirectory(ar) +endif() + +if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/misc/CMakeLists.txt ) + add_subdirectory(misc) +endif() + +if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/otool/CMakeLists.txt ) + add_subdirectory(otool) +endif() + +if (CCTOOLS_LD_CLASSIC) + if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/ld/CMakeLists.txt ) + add_subdirectory(ld) + else() + message(WARNING "Asked to build ld_classic, but there's no CMakeList for it.") + endif() +endif() + +if (CCTOOLS_EFITOOLS) + if( EXISTS ${CMAKE_SOURCE_DIR}/cctools/efitools/CMakeLists.txt ) + add_subdirectory(efitools) + else() + message(WARNING "Asked to build efitools, but there's no CMakeList for them.") + endif() +endif() diff --git a/cctools/ar/CMakeLists.txt b/cctools/ar/CMakeLists.txt new file mode 100644 index 0000000..30d5860 --- /dev/null +++ b/cctools/ar/CMakeLists.txt @@ -0,0 +1,27 @@ + +set(AR_SRCS + ar.c + append.c + archive.c + contents.c + delete.c + extract.c + misc.c + move.c + print.c + replace.c + ) + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +add_executable(ar ${AR_SRCS}) +target_link_libraries(ar stuff) +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + target_compile_options(ar PRIVATE -Wno-deprecated) +endif() + +install(TARGETS ar + DESTINATION bin + ) diff --git a/cctools/as/CMakeLists.txt b/cctools/as/CMakeLists.txt new file mode 100644 index 0000000..acab477 --- /dev/null +++ b/cctools/as/CMakeLists.txt @@ -0,0 +1,104 @@ + +set(AS_COMMON_SRCS + app.c + as.c + atof-generic.c + atof-ieee.c + expr.c + fixes.c + flonum-const.c + flonum-copy.c + flonum-mult.c + frags.c + hash.c + hex-value.c + input-file.c + input-scrub.c + layout.c + messages.c + obstack.c + read.c + sections.c + symbols.c + write_object.c + xmalloc.c + dwarf2dbg.c + ) + +set(X86_SRCS i386.c ${AS_COMMON_SRCS}) + +set(PPC_SRCS ppc.c ${AS_COMMON_SRCS}) + +set(ARM_SRCS arm.c ${AS_COMMON_SRCS}) + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +include_directories("${CMAKE_SOURCE_DIR}/cctools/as") +include_directories("${CMAKE_SOURCE_DIR}/cctools/include/gnu") +add_definitions(-DNeXT_MOD -D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated") +endif() + +add_executable(as-driver driver.c) +set_target_properties(as-driver PROPERTIES COMPILE_FLAGS "-Di486 -Di586 -Di686") +target_link_libraries(as-driver stuff) +set_target_properties(as-driver PROPERTIES OUTPUT_NAME as) +install(TARGETS as-driver DESTINATION bin ) + +add_executable(i386-as ${X86_SRCS}) +set_target_properties(i386-as PROPERTIES COMPILE_FLAGS "-DI386 -Di486 -Di586 -Di686") +set_target_properties(i386-as PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/i386) +set_target_properties(i386-as PROPERTIES OUTPUT_NAME as) +target_link_libraries(i386-as stuff) +install(TARGETS i386-as DESTINATION bin/i386) + +if(BUILD_TESTING) + add_executable(test-x86 i386-check.c) + set_target_properties(test-x86 PROPERTIES COMPILE_FLAGS "-DI386 -Di486 -Di586 -Di686") + set_target_properties(test-x86 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests) + add_test(NAME check-x86-as COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/check-as $ i386 $) +endif() + +add_executable(x8664-as ${X86_SRCS}) +set_target_properties(x8664-as PROPERTIES COMPILE_FLAGS "-DI386 -Di486 -Di586 -Di686 -DARCH64") +set_target_properties(x8664-as PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/x86_64) +set_target_properties(x8664-as PROPERTIES OUTPUT_NAME as) +target_link_libraries(x8664-as stuff) +install(TARGETS x8664-as DESTINATION bin/x86_64) + +if(BUILD_TESTING) + add_executable(test-x86_64 i386-check.c) + set_target_properties(test-x86_64 PROPERTIES COMPILE_FLAGS "-DI386 -Di486 -Di586 -Di686 -DARCH64") + set_target_properties(test-x86_64 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests) + add_test(NAME check-x86_86-as COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/check-as $ x86_64 $) +endif() + +add_executable(ppc-as ${PPC_SRCS}) +set_target_properties(ppc-as PROPERTIES COMPILE_FLAGS "-DPPC") +set_target_properties(ppc-as PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ppc) +set_target_properties(ppc-as PROPERTIES OUTPUT_NAME as) +target_link_libraries(ppc-as stuff) +install(TARGETS ppc-as DESTINATION bin/ppc) + +if(BUILD_TESTING) + add_executable(test-ppc ppc-check.c) + set_target_properties(test-ppc PROPERTIES COMPILE_FLAGS "-DPPC") + set_target_properties(test-ppc PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests) + add_test(NAME check-ppc-as COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/check-as $ ppc $) +endif() + +add_executable(ppc64-as ${PPC_SRCS}) +set_target_properties(ppc64-as PROPERTIES COMPILE_FLAGS "-DPPC -DARCH64") +set_target_properties(ppc64-as PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ppc64) +set_target_properties(ppc64-as PROPERTIES OUTPUT_NAME as) +target_link_libraries(ppc64-as stuff) +install(TARGETS ppc64-as DESTINATION bin/ppc64) + +add_executable(arm-as ${ARM_SRCS}) +set_target_properties(arm-as PROPERTIES COMPILE_FLAGS "-DARM") +set_target_properties(arm-as PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/arm) +set_target_properties(arm-as PROPERTIES OUTPUT_NAME as) +target_link_libraries(arm-as stuff) +install(TARGETS arm-as DESTINATION bin/arm) diff --git a/cctools/as/check-as b/cctools/as/check-as new file mode 100755 index 0000000..b63d023 --- /dev/null +++ b/cctools/as/check-as @@ -0,0 +1,16 @@ +#! /bin/bash +# +# usage check-as +# $1 = generator +# $2 = arch +# $3 = assembler driver to test. +# return success/fail of the final comparison on objects. + +#set -x +$1 > check-$2.s +$3 -arch $2 -W -force_cpusubtype_ALL -o check-$2.o check-$2.s +otool -arch $2 -Q -X -tV check-$2.o > check-$2-1.s +$3 -arch $2 -W -force_cpusubtype_ALL -o check-$2-1.o check-$2-1.s +otool -arch $2 -Q -X -tV check-$2-1.o > check-$2-2.s +diff -W200 -y --suppress-common-lines check-$2-1.s check-$2-2.s >errors-$2-diff.txt +exec cmp check-$2.o check-$2-1.o diff --git a/cctools/cbtlibs/CMakeLists.txt b/cctools/cbtlibs/CMakeLists.txt new file mode 100644 index 0000000..77cc8f8 --- /dev/null +++ b/cctools/cbtlibs/CMakeLists.txt @@ -0,0 +1,13 @@ + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\) -DIN_CCTOOLS) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated") +endif() + +add_library(syminfo libsyminfo.c) +if(XTOOLS_C_HAS_FNOCOMMON_FLAG) + set_target_properties(syminfo PROPERTIES COMPILE_FLAGS "-fno-common") +endif() diff --git a/cctools/cctools_version.c.in b/cctools/cctools_version.c.in new file mode 100644 index 0000000..ee92a5f --- /dev/null +++ b/cctools/cctools_version.c.in @@ -0,0 +1,4 @@ + +const char + apple_version[] __attribute__ ((__used__)) = + "cctools-@CCTOOLS_VERSION_NUM@"; diff --git a/cctools/efitools/CMakeLists.txt b/cctools/efitools/CMakeLists.txt new file mode 100644 index 0000000..d34a247 --- /dev/null +++ b/cctools/efitools/CMakeLists.txt @@ -0,0 +1,23 @@ + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +add_executable(makerelocs makerelocs.c) +target_link_libraries(makerelocs stuff) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + target_compile_options(makerelocs PRIVATE -Wno-deprecated) +endif() + +add_executable(mtoc mtoc.c ) +target_link_libraries(mtoc stuff) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + target_compile_options(mtoc PRIVATE -Wno-deprecated) +endif() + +install(TARGETS mtoc + DESTINATION bin + ) diff --git a/cctools/ld/CMakeLists.txt b/cctools/ld/CMakeLists.txt new file mode 100644 index 0000000..016d23b --- /dev/null +++ b/cctools/ld/CMakeLists.txt @@ -0,0 +1,31 @@ + +set(LD_CLASSIC_SRCS + ld.c pass1.c objects.c sections.c cstring_literals.c symbols.c + fvmlibs.c layout.c specs.c pass2.c generic_reloc.c rld.c sets.c + 4byte_literals.c 8byte_literals.c literal_pointers.c dylibs.c + indirect_sections.c mod_sections.c i860_reloc.c ppc_reloc.c + m88k_reloc.c hppa_reloc.c sparc_reloc.c coalesced_sections.c uuid.c + debugcompunit.c debugline.c arm_reloc.c + ) + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +add_executable(ld_classic ${LD_CLASSIC_SRCS}) + +# has to be built and linked 32bit for now. +if(XTOOLS_HOST_IS_64B) + target_compile_options(ld_classic PRIVATE -m32) + target_link_libraries(ld_classic -m32 stuff-32) +else() + target_link_libraries(ld_classic stuff) +endif() + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + target_compile_options(ld_classic PRIVATE -Wno-deprecated) +endif() + +install(TARGETS ld_classic + DESTINATION bin + ) diff --git a/cctools/libstuff/CMakeLists.txt b/cctools/libstuff/CMakeLists.txt new file mode 100644 index 0000000..af6830d --- /dev/null +++ b/cctools/libstuff/CMakeLists.txt @@ -0,0 +1,72 @@ + +if (CCTOOLS_EFITOOLS) + set(COFF_BYTESEX "coff_bytesex.c") +else() + set(COFF_BYTESEX) +endif() + +set(LIBSTUFF_SOURCES + allocate.c + errors.c + arch.c + execute.c + bytesex.c + rnd.c + hppa.c + swap_headers.c + reloc.c + version_number.c + get_toc_byte_sex.c + best_arch.c + fatals.c + arch_usage.c + ofile.c + ofile_error.c + print.c + set_arch_flag_name.c + seg_addr_table.c + dylib_table.c + breakout.c + writeout.c + checkout.c + fatal_arch.c + ofile_get_word.c + vm_flush_cache.c + hash_string.c + dylib_roots.c + guess_short_name.c + SymLoc.c + get_arch_from_host.c + crc32.c + macosx_deployment_target.c + symbol_list.c unix_standard_mode.c + lto.c + llvm.c + ${COFF_BYTESEX} + ${CMAKE_BINARY_DIR}/cctools/cctools_version.c + ) +# paths_relative_to_exe.c + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") + +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\) -DIN_CCTOOLS) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated") +endif() + +add_library(stuff STATIC ${LIBSTUFF_SOURCES}) +if(XTOOLS_C_HAS_FNOCOMMON_FLAG) + set_target_properties(stuff PROPERTIES COMPILE_FLAGS "-fno-common") +endif() + +if(XTOOLS_HOST_IS_64B AND CCTOOLS_LD_CLASSIC) + # we have to build ld_classic as a 32b exe, it's never been converted for a 64b + # host. + add_library(stuff-32 STATIC ${LIBSTUFF_SOURCES}) + target_compile_options(stuff-32 PRIVATE -m32) + if(XTOOLS_C_HAS_FNOCOMMON_FLAG) + target_compile_options(stuff-32 PRIVATE -fno-common) + endif() +endif() diff --git a/cctools/misc/CMakeLists.txt b/cctools/misc/CMakeLists.txt new file mode 100644 index 0000000..01be3a7 --- /dev/null +++ b/cctools/misc/CMakeLists.txt @@ -0,0 +1,93 @@ + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +add_definitions(-D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated") +endif() + +if(XTOOLS_LTO_SUPPORT) +add_definitions(-DLTO_SUPORT) +endif() + +add_executable(lipo lipo.c) +target_link_libraries(lipo stuff) + +add_executable(size size.c) +target_link_libraries(size stuff) + +add_executable(strings strings.c) +target_link_libraries(strings stuff) + +add_executable(nm nm.c) +target_link_libraries(nm stuff) + +# The same executable does ranlib +add_executable(libtool libtool.c) +target_link_libraries(libtool stuff) + +add_executable(install_name_tool install_name_tool.c) +target_link_libraries(install_name_tool stuff) + +add_executable(codesign_allocate codesign_allocate.c) +target_link_libraries(codesign_allocate stuff) + +add_executable(nmedit strip.c) +target_link_libraries(nmedit stuff) +set_target_properties(nmedit PROPERTIES COMPILE_FLAGS "-DNMEDIT") + +add_executable(checksyms checksyms.c) +target_link_libraries(checksyms stuff) + +add_executable(indr indr.c) +target_link_libraries(indr stuff) + +add_executable(segedit segedit.c) +target_link_libraries(segedit stuff) + +add_executable(cmpdylib cmpdylib.c) +target_link_libraries(cmpdylib stuff) + +add_executable(pagestuff pagestuff.c) +target_link_libraries(pagestuff stuff) + +add_executable(redo_prebinding redo_prebinding.c) +target_link_libraries(redo_prebinding stuff) + +add_executable(seg_addr_table seg_addr_table.c) +target_link_libraries(seg_addr_table stuff) + +add_executable(check_dylib check_dylib.c) +target_link_libraries(check_dylib stuff) + +add_executable(seg_hack seg_hack.c) +target_link_libraries(seg_hack stuff) + +add_executable(ctf_insert ctf_insert.c) +target_link_libraries(ctf_insert stuff) + +add_executable(strip strip.c) +if(XTOOLS_HAS_LIBPRUNETRIE) + set_target_properties(strip PROPERTIES COMPILE_FLAGS "-DTRIE_SUPPORT") + set_target_properties(strip PROPERTIES LINKER_LANGUAGE CXX) + set(STRIP_FLAGS) + if(XTOOLS_CXX_HAS_STDCXX11_FLAG) + set(STRIP_FLAGS "-std=c++11") + endif() + if(XTOOLS_CXX_HAS_STDLIB_FLAG) + set(STRIP_FLAGS "${STRIP_FLAGS} -stdlib=libc++") + elseif(XTOOLS_CXX_HAS_STATICCXX_FLAG) + set_target_properties(strip PROPERTIES LINK_FLAGS -static-libstdc++) + endif() + target_link_libraries(strip stuff prunetrie ${STRIP_FLAGS}) +else() + target_link_libraries(strip stuff) +endif() + +install(TARGETS + lipo size strings nm libtool install_name_tool nmedit strip + codesign_allocate checksyms indr segedit cmpdylib pagestuff + redo_prebinding seg_addr_table check_dylib seg_hack ctf_insert + DESTINATION bin + ) diff --git a/cctools/otool/CMakeLists.txt b/cctools/otool/CMakeLists.txt new file mode 100644 index 0000000..d22bb24 --- /dev/null +++ b/cctools/otool/CMakeLists.txt @@ -0,0 +1,58 @@ +if(XTOOLS_LTO_SUPPORT) + add_definitions(-DLTO_SUPORT) +endif() + +set(OTOOL_SRCS + main.c + ofile_print.c + ppc_disasm.c + i386_disasm.c + arm_disasm.c + arm64_disasm.c + m68k_disasm.c + m88k_disasm.c + i860_disasm.c + hppa_disasm.c + sparc_disasm.c + print_objc.c + print_objc2_32bit.c + print_objc2_64bit.c + print_bitcode.c + dyld_bind_info.c + ${CMAKE_CURRENT_SOURCE_DIR}/../libstuff/ofile.c + ) + +set(COFF_PRINT) +if(CCTOOLS_EFITOOLS) + set(COFF_PRINT coff_print.c) +endif() + +include_directories("${CMAKE_SOURCE_DIR}/cctools/include") +include_directories("${CMAKE_SOURCE_DIR}/cctools/otool") +add_definitions(-DOTOOL -D__private_extern__=__attribute__\(\(__visibility__\("hidden"\)\)\)) + +if(XTOOLS_C_HAS_WNODEPRECATED_FLAG) + # suppress the 'import is deprecated' blather. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated") +endif() + +set_source_files_properties(dyld_bind_info.c PROPERTIES COMPILE_FLAGS -std=c99) + +add_executable(otool ${OTOOL_SRCS} ${COFF_PRINT}) +target_link_libraries(otool stuff) +set_target_properties(otool PROPERTIES LINKER_LANGUAGE CXX) + +# Prefer to build tools without deps on installed dylibs. +# We actually only need cxa_demangle - so it doesn't matter which c++ lib. +# On later OS X (where there are two) this will come from libc++abi either way. +if(XTOOLS_CXX_HAS_STATICCXX_FLAG) + set_target_properties(otool PROPERTIES LINK_FLAGS -static-libstdc++) +endif() + +if(XTOOLS_LTO_SUPPORT) + target_link_libraries(otool LTO) +endif() + +install(TARGETS otool + DESTINATION bin + ) -- 2.11.4.GIT