diff options
author | Steve MacLean <Steve.MacLean@microsoft.com> | 2020-06-02 16:49:14 -0400 |
---|---|---|
committer | Dave Watson <dade.watson@gmail.com> | 2020-06-04 09:02:24 -0700 |
commit | bac2b10878f729f9eaa9076f879bf40f1d58174b (patch) | |
tree | 929df128ebe874104951947526b71a530b6f23a4 /src | |
parent | 693f30a7c3c4092228de1430e005b435aa7656ce (diff) | |
download | libunwind-bac2b10878f729f9eaa9076f879bf40f1d58174b.tar.gz |
Add Windows build support
Add CMake file for Windows build
Enable Windows builds in Travis CI
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..43a61ff1 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,295 @@ +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# other source files +include_directories(../include/tdep) +include_directories(../include) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include/tdep) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include) + +if(TARGET_ARM) + # Ensure that the remote and local unwind code can reside in the same binary without name clashing + add_definitions("-Darm_search_unwind_table=UNW_OBJ(arm_search_unwind_table)") + # We compile code with -std=c99 and the asm keyword is not recognized as it is a gnu extension + add_definitions(-Dasm=__asm__) + # The arm sources include ex_tables.h from include/tdep-arm without going through a redirection + # in include/tdep like it works for similar files on other architectures. So we need to add + # the include/tdep-arm to include directories + include_directories(../include/tdep-arm) +elseif(TARGET_AARCH64) + # We compile code with -std=c99 and the asm keyword is not recognized as it is a gnu extension + add_definitions(-Dasm=__asm__) +endif() + +SET(libunwind_ptrace_la_SOURCES + ptrace/_UPT_elf.c + ptrace/_UPT_accessors.c ptrace/_UPT_access_fpreg.c + ptrace/_UPT_access_mem.c ptrace/_UPT_access_reg.c + ptrace/_UPT_create.c ptrace/_UPT_destroy.c + ptrace/_UPT_find_proc_info.c ptrace/_UPT_get_dyn_info_list_addr.c + ptrace/_UPT_put_unwind_info.c ptrace/_UPT_get_proc_name.c + ptrace/_UPT_reg_offset.c ptrace/_UPT_resume.c +) + +SET(libunwind_coredump_la_SOURCES + coredump/_UCD_accessors.c + coredump/_UCD_create.c + coredump/_UCD_destroy.c + coredump/_UCD_access_mem.c + coredump/_UCD_elf_map_image.c + coredump/_UCD_find_proc_info.c + coredump/_UCD_get_proc_name.c + + coredump/_UPT_elf.c + coredump/_UPT_access_fpreg.c + coredump/_UPT_get_dyn_info_list_addr.c + coredump/_UPT_put_unwind_info.c + coredump/_UPT_resume.c +) + +# List of arch-independent files needed by generic library (libunwind-$ARCH): +SET(libunwind_la_SOURCES_generic + mi/Gdyn-extract.c mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c + # The Gget_accessors.c implements the same function as Lget_accessors.c, so + # the source is excluded here to prevent name clash + #mi/Gget_accessors.c + mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c + mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c + mi/Gget_reg.c mi/Gset_reg.c + mi/Gget_fpreg.c mi/Gset_fpreg.c + mi/Gset_caching_policy.c + mi/Gset_cache_size.c +) + +SET(libunwind_la_SOURCES_os_linux + os-linux.c +) + +SET(libunwind_la_SOURCES_os_linux_local +# Nothing when we don't want to support CXX exceptions +) + +SET(libunwind_la_SOURCES_os_freebsd + os-freebsd.c +) + +SET(libunwind_la_SOURCES_os_freebsd_local +# Nothing +) + +SET(libunwind_la_SOURCES_os_solaris + os-solaris.c +) + +SET(libunwind_la_SOURCES_os_solaris_local +# Nothing +) + +if(UNW_CMAKE_TARGET_LINUX) + SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_linux}) + SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_linux_local}) + SET(libunwind_la_SOURCES_x86_os x86/Gos-linux.c) + SET(libunwind_x86_la_SOURCES_os x86/getcontext-linux.S) + SET(libunwind_la_SOURCES_x86_os_local x86/Los-linux.c) + SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-linux.c) + SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-linux.c) + SET(libunwind_la_SOURCES_arm_os arm/Gos-linux.c) + SET(libunwind_la_SOURCES_arm_os_local arm/Los-linux.c) + list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_linux.c) +elseif(UNW_CMAKE_TARGET_FREEBSD) + SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_freebsd}) + SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_freebsd_local}) + SET(libunwind_la_SOURCES_x86_os x86/Gos-freebsd.c) + SET(libunwind_x86_la_SOURCES_os x86/getcontext-freebsd.S) + SET(libunwind_la_SOURCES_x86_os_local x86/Los-freebsd.c) + SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-freebsd.c) + SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-freebsd.c) + SET(libunwind_la_SOURCES_arm_os arm/Gos-freebsd.c) + SET(libunwind_la_SOURCES_arm_os_local arm/Los-freebsd.c) + list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_freebsd.c) +elseif(UNW_CMAKE_HOST_SUNOS) + SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_solaris}) + SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_solaris_local}) + SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-solaris.c) + SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-solaris.c) +endif() + +# List of arch-independent files needed by both local-only and generic +# libraries: +SET(libunwind_la_SOURCES_common + ${libunwind_la_SOURCES_os} + mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c +) + +SET(libunwind_la_SOURCES_local_unwind +# Nothing when we don't want to support CXX exceptions +) + +# List of arch-independent files needed by local-only library (libunwind): +SET(libunwind_la_SOURCES_local_nounwind + ${libunwind_la_SOURCES_os_local} + mi/backtrace.c + mi/dyn-cancel.c mi/dyn-info-list.c mi/dyn-register.c + mi/Ldyn-extract.c mi/Lfind_dynamic_proc_info.c + mi/Lget_accessors.c + mi/Lget_proc_info_by_ip.c mi/Lget_proc_name.c + mi/Lput_dynamic_unwind_info.c mi/Ldestroy_addr_space.c + mi/Lget_reg.c mi/Lset_reg.c + mi/Lget_fpreg.c mi/Lset_fpreg.c + mi/Lset_caching_policy.c + mi/Lset_cache_size.c +) + +SET(libunwind_la_SOURCES_local + ${libunwind_la_SOURCES_local_nounwind} + ${libunwind_la_SOURCES_local_unwind} +) + +SET(libunwind_dwarf_common_la_SOURCES + dwarf/global.c +) + +SET(libunwind_dwarf_local_la_SOURCES + dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c + dwarf/Lfind_proc_info-lsb.c + dwarf/Lfind_unwind_table.c +) + +SET(libunwind_dwarf_generic_la_SOURCES + dwarf/Gexpr.c dwarf/Gfde.c dwarf/Gparser.c dwarf/Gpe.c + dwarf/Gfind_proc_info-lsb.c + dwarf/Gfind_unwind_table.c +) + +SET(libunwind_elf32_la_SOURCES + elf32.c +) + +SET(libunwind_elf64_la_SOURCES + elf64.c +) +SET(libunwind_elfxx_la_SOURCES + elfxx.c +) + +# The list of files that go into libunwind and libunwind-aarch64: +SET(libunwind_la_SOURCES_aarch64_common + ${libunwind_la_SOURCES_common} + aarch64/is_fpreg.c + aarch64/regname.c +) + +# The list of files that go into libunwind: +SET(libunwind_la_SOURCES_aarch64 + ${libunwind_la_SOURCES_aarch64_common} + ${libunwind_la_SOURCES_local} + aarch64/Lapply_reg_state.c aarch64/Lreg_states_iterate.c + aarch64/Lcreate_addr_space.c aarch64/Lget_proc_info.c + aarch64/Lget_save_loc.c aarch64/Lglobal.c aarch64/Linit.c + aarch64/Linit_local.c aarch64/Linit_remote.c + aarch64/Lis_signal_frame.c aarch64/Lregs.c aarch64/Lresume.c + aarch64/Lstash_frame.c aarch64/Lstep.c aarch64/Ltrace.c + aarch64/getcontext.S +) + +SET(libunwind_aarch64_la_SOURCES_aarch64 + ${libunwind_la_SOURCES_aarch64_common} + ${libunwind_la_SOURCES_generic} + aarch64/Gapply_reg_state.c aarch64/Greg_states_iterate.c + aarch64/Gcreate_addr_space.c aarch64/Gget_proc_info.c + aarch64/Gget_save_loc.c aarch64/Gglobal.c aarch64/Ginit.c + aarch64/Ginit_local.c aarch64/Ginit_remote.c + aarch64/Gis_signal_frame.c aarch64/Gregs.c aarch64/Gresume.c + aarch64/Gstash_frame.c aarch64/Gstep.c aarch64/Gtrace.c +) + +# The list of files that go into libunwind and libunwind-arm: +SET(libunwind_la_SOURCES_arm_common + ${libunwind_la_SOURCES_common} + arm/is_fpreg.c arm/regname.c +) + +# The list of files that go into libunwind: +SET(libunwind_la_SOURCES_arm + ${libunwind_la_SOURCES_arm_common} + ${libunwind_la_SOURCES_arm_os_local} + ${libunwind_la_SOURCES_local} + arm/getcontext.S + arm/Lapply_reg_state.c arm/Lreg_states_iterate.c + arm/Lcreate_addr_space.c arm/Lget_proc_info.c arm/Lget_save_loc.c + arm/Lglobal.c arm/Linit.c arm/Linit_local.c arm/Linit_remote.c + arm/Lregs.c arm/Lresume.c arm/Lstep.c + arm/Lex_tables.c arm/Lstash_frame.c arm/Ltrace.c +) + +# The list of files that go into libunwind-arm: +SET(libunwind_arm_la_SOURCES_arm + ${libunwind_la_SOURCES_arm_common} + ${libunwind_la_SOURCES_arm_os} + ${libunwind_la_SOURCES_generic} + arm/Gapply_reg_state.c arm/Greg_states_iterate.c + arm/Gcreate_addr_space.c arm/Gget_proc_info.c arm/Gget_save_loc.c + arm/Gglobal.c arm/Ginit.c arm/Ginit_local.c arm/Ginit_remote.c + arm/Gregs.c arm/Gresume.c arm/Gstep.c + arm/Gex_tables.c arm/Gstash_frame.c arm/Gtrace.c +) + +# The list of files that go both into libunwind and libunwind-x86_64: +SET(libunwind_la_SOURCES_x86_64_common + ${libunwind_la_SOURCES_common} + x86_64/is_fpreg.c x86_64/regname.c +) + +# The list of files that go into libunwind: +SET(libunwind_la_SOURCES_x86_64 + ${libunwind_la_SOURCES_x86_64_common} + ${libunwind_la_SOURCES_x86_64_os_local} + ${libunwind_la_SOURCES_local} + x86_64/setcontext.S + x86_64/Lapply_reg_state.c x86_64/Lreg_states_iterate.c + x86_64/Lcreate_addr_space.c x86_64/Lget_save_loc.c x86_64/Lglobal.c + x86_64/Linit.c x86_64/Linit_local.c x86_64/Linit_remote.c + x86_64/Lget_proc_info.c x86_64/Lregs.c x86_64/Lresume.c + x86_64/Lstash_frame.c x86_64/Lstep.c x86_64/Ltrace.c x86_64/getcontext.S +) + +# The list of files that go into libunwind-x86_64: +SET(libunwind_x86_64_la_SOURCES_x86_64 + ${libunwind_la_SOURCES_x86_64_common} + ${libunwind_la_SOURCES_x86_64_os} + ${libunwind_la_SOURCES_generic} + x86_64/Gapply_reg_state.c x86_64/Greg_states_iterate.c + x86_64/Gcreate_addr_space.c x86_64/Gget_save_loc.c x86_64/Gglobal.c + x86_64/Ginit.c x86_64/Ginit_local.c x86_64/Ginit_remote.c + x86_64/Gget_proc_info.c x86_64/Gregs.c x86_64/Gresume.c + x86_64/Gstash_frame.c x86_64/Gstep.c x86_64/Gtrace.c +) + +if(TARGET_AARCH64) + SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64}) + SET(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64}) + SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES}) + list(APPEND libunwind_setjmp_la_SOURCES aarch64/siglongjmp.S) +elseif(TARGET_ARM) + SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm}) + SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm}) + SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES}) + list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S) +elseif(TARGET_AMD64) + SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64}) + SET(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64}) + SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES}) + list(APPEND libunwind_setjmp_la_SOURCES x86_64/longjmp.S x86_64/siglongjmp.SA) +endif() + +add_library(libunwind + OBJECT + win/pal-single-threaded.c + # ${libunwind_la_SOURCES} Local... + ${libunwind_remote_la_SOURCES} + # Commented out above for LOCAL + REMOTE runtime build + mi/Gget_accessors.c + # ${libunwind_dwarf_local_la_SOURCES} + ${libunwind_dwarf_common_la_SOURCES} + ${libunwind_dwarf_generic_la_SOURCES} + ${libunwind_elf_la_SOURCES} +) |