set(SRCS
            arm/dynarmic/arm_dynarmic.cpp
            arm/unicorn/arm_unicorn.cpp
            core.cpp
            core_timing.cpp
            file_sys/archive_backend.cpp
            file_sys/disk_archive.cpp
            file_sys/ivfc_archive.cpp
            file_sys/path_parser.cpp
            file_sys/savedata_archive.cpp
            file_sys/title_metadata.cpp
            frontend/emu_window.cpp
            frontend/framebuffer_layout.cpp
            gdbstub/gdbstub.cpp
            hle/config_mem.cpp
            hle/kernel/address_arbiter.cpp
            hle/kernel/client_port.cpp
            hle/kernel/client_session.cpp
            hle/kernel/condition_variable.cpp
            hle/kernel/domain.cpp
            hle/kernel/event.cpp
            hle/kernel/handle_table.cpp
            hle/kernel/hle_ipc.cpp
            hle/kernel/kernel.cpp
            hle/kernel/memory.cpp
            hle/kernel/mutex.cpp
            hle/kernel/object_address_table.cpp
            hle/kernel/process.cpp
            hle/kernel/resource_limit.cpp
            hle/kernel/server_port.cpp
            hle/kernel/server_session.cpp
            hle/kernel/shared_memory.cpp
            hle/kernel/svc.cpp
            hle/kernel/thread.cpp
            hle/kernel/timer.cpp
            hle/kernel/vm_manager.cpp
            hle/kernel/wait_object.cpp
            hle/lock.cpp
            hle/romfs.cpp
            hle/service/am/am.cpp
            hle/service/am/applet_oe.cpp
            hle/service/aoc/aoc_u.cpp
            hle/service/apm/apm.cpp
            hle/service/dsp_dsp.cpp
            hle/service/gsp_gpu.cpp
            hle/service/hid/hid.cpp
            hle/service/lm/lm.cpp
            hle/service/nvdrv/devices/nvdisp_disp0.cpp
            hle/service/nvdrv/devices/nvhost_as_gpu.cpp
            hle/service/nvdrv/devices/nvmap.cpp
            hle/service/nvdrv/nvdrv.cpp
            hle/service/nvdrv/nvdrv_a.cpp
            hle/service/pctl/pctl.cpp
            hle/service/pctl/pctl_a.cpp
            hle/service/service.cpp
            hle/service/sm/controller.cpp
            hle/service/sm/sm.cpp
            hle/service/vi/vi.cpp
            hle/service/vi/vi_m.cpp
            hle/shared_page.cpp
            hw/aes/arithmetic128.cpp
            hw/aes/ccm.cpp
            hw/aes/key.cpp
            hw/gpu.cpp
            hw/hw.cpp
            hw/lcd.cpp
            loader/elf.cpp
            loader/linker.cpp
            loader/loader.cpp
            loader/nro.cpp
            loader/nso.cpp
            tracer/recorder.cpp
            memory.cpp
            perf_stats.cpp
            settings.cpp
            telemetry_session.cpp
            )

set(HEADERS
            arm/arm_interface.h
            arm/dynarmic/arm_dynarmic.h
            arm/unicorn/arm_unicorn.h
            core.h
            core_timing.h
            file_sys/archive_backend.h
            file_sys/directory_backend.h
            file_sys/disk_archive.h
            file_sys/errors.h
            file_sys/file_backend.h
            file_sys/ivfc_archive.h
            file_sys/path_parser.h
            file_sys/savedata_archive.h
            frontend/emu_window.h
            frontend/framebuffer_layout.h
            frontend/input.h
            gdbstub/gdbstub.h
            hle/config_mem.h
            hle/ipc.h
            hle/ipc_helpers.h
            hle/kernel/address_arbiter.h
            hle/kernel/client_port.h
            hle/kernel/client_session.h
            hle/kernel/condition_variable.h
            hle/kernel/domain.h
            hle/kernel/errors.h
            hle/kernel/event.h
            hle/kernel/handle_table.h
            hle/kernel/hle_ipc.h
            hle/kernel/kernel.h
            hle/kernel/memory.h
            hle/kernel/mutex.h
            hle/kernel/object_address_table.h
            hle/kernel/process.h
            hle/kernel/resource_limit.h
            hle/kernel/server_port.h
            hle/kernel/server_session.h
            hle/kernel/session.h
            hle/kernel/shared_memory.h
            hle/kernel/sync_object.h
            hle/kernel/svc.h
            hle/kernel/svc_wrap.h
            hle/kernel/thread.h
            hle/kernel/timer.h
            hle/kernel/vm_manager.h
            hle/kernel/wait_object.h
            hle/lock.h
            hle/result.h
            hle/romfs.h
            hle/service/am/am.h
            hle/service/am/applet_oe.h
            hle/service/aoc/aoc_u.h
            hle/service/apm/apm.h
            hle/service/dsp_dsp.h
            hle/service/gsp_gpu.h
            hle/service/hid/hid.h
            hle/service/lm/lm.h
            hle/service/nvdrv/devices/nvdevice.h
            hle/service/nvdrv/devices/nvdisp_disp0.h
            hle/service/nvdrv/devices/nvhost_as_gpu.h
            hle/service/nvdrv/devices/nvmap.h
            hle/service/nvdrv/nvdrv.h
            hle/service/nvdrv/nvdrv_a.h
            hle/service/pctl/pctl.h
            hle/service/pctl/pctl_a.h
            hle/service/service.h
            hle/service/sm/controller.h
            hle/service/sm/sm.h
            hle/service/vi/vi.h
            hle/service/vi/vi_m.h
            hle/shared_page.h
            hw/aes/arithmetic128.h
            hw/aes/ccm.h
            hw/aes/key.h
            hw/gpu.h
            hw/hw.h
            hw/lcd.h
            loader/elf.h
            loader/linker.h
            loader/loader.h
            loader/nro.h
            loader/nso.h
            tracer/recorder.h
            tracer/citrace.h
            memory.h
            memory_setup.h
            mmio.h
            perf_stats.h
            settings.h
            telemetry_session.h
            )

create_directory_groups(${SRCS} ${HEADERS})
add_library(core STATIC ${SRCS} ${HEADERS})
target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core)
target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp fmt lz4_static unicorn)
if (ENABLE_WEB_SERVICE)
    target_link_libraries(core PUBLIC json-headers web_service)
endif()
