diff --git a/.gitignore b/.gitignore index 153c761..82b4b62 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /sqlite/ /data/ +/.idea + + diff --git a/CMakeLists.txt b/CMakeLists.txt index c4a8bd6..d21784f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,15 @@ if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) - include(${CMAKE_CURRENT_LIST_DIR}/main.cmake) + cmake_minimum_required(VERSION 3.16) + cmake_policy(SET CMP0141 NEW) + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$:Embedded>") + project(plantSunCat) + set(PLANT_SUN_CAT_VERSION 1.0.0) + set(CMAKE_CXX_STANDARD 20) + include(third_party/build_infra/start.cmake) + include(third_party/CPP_Core/main.cmake) + include(third_party/SSR/main.cmake) + include(${CMAKE_SOURCE_DIR}/main.cmake) + include(third_party/build_infra/end.cmake) else () endif () diff --git a/CMakeUserPresets.json b/CMakeUserPresets.json new file mode 100644 index 0000000..730e33c --- /dev/null +++ b/CMakeUserPresets.json @@ -0,0 +1,7 @@ +{ + "version": 4, + "include": [ + "toolchain/vs2022.json", + "toolchain/vs2019.json" + ] +} \ No newline at end of file diff --git a/main.cmake b/main.cmake index 0623def..f04c4f4 100644 --- a/main.cmake +++ b/main.cmake @@ -13,6 +13,7 @@ message(STATUS "CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH}") message(STATUS "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=${CMAKE_FIND_ROOT_PATH_MODE_PACKAGE}") +message("JSONCPP_INCLUDE_DIRS ${JSONCPP_INCLUDE_DIRS} JSONCPP_LIBRARIES ${JSONCPP_LIBRARIES}") find_package(Jsoncpp CONFIG) list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") if (MSVC AND NOT TARGET std::filesystem) @@ -138,13 +139,13 @@ endif () rcl_unload_dependency_environment(drogon ${rely}) -include("${CMAKE_SOURCE_DIR}/0_cmake_library/ninja_build_analyze/export.cmake") - -register_ninja_build_analyze_target( - ninja_build_analyze_ctx # 分析上下文 target 名,自己起名 - "Core_Static" # 要分析的构建目标;空字符串表示 all - "${CMAKE_BINARY_DIR}/analyze" # 分析输出目录;空字符串表示 build/build_analysis - "ON" # 是否先 clean:ON/OFF - "30" # top 数量;空字符串表示 30 -) +#include("${CMAKE_SOURCE_DIR}/0_cmake_library/ninja_build_analyze/export.cmake") +# +#register_ninja_build_analyze_target( +# ninja_build_analyze_ctx # 分析上下文 target 名,自己起名 +# "Core_Static" # 要分析的构建目标;空字符串表示 all +# "${CMAKE_BINARY_DIR}/analyze" # 分析输出目录;空字符串表示 build/build_analysis +# "ON" # 是否先 clean:ON/OFF +# "30" # top 数量;空字符串表示 30 +#) diff --git a/module/Local_Server/Aircraft/global.h b/module/Local_Server/Aircraft/global.h index 7517a08..07ff518 100644 --- a/module/Local_Server/Aircraft/global.h +++ b/module/Local_Server/Aircraft/global.h @@ -1,5 +1,5 @@ #pragma once -#include "../../../../../core_library/Core/Core/Base/JSON.h" +#include "Core/Base/JSON.h" #include "Core/socket/export.h" #include "SSR/export.h" #include diff --git a/module/Local_Server/Crawler/Crawler.h b/module/Local_Server/Crawler/Crawler.h index 44d3906..1773cbe 100644 --- a/module/Local_Server/Crawler/Crawler.h +++ b/module/Local_Server/Crawler/Crawler.h @@ -1,7 +1,7 @@ #pragma once #include -#include "../../../../../core_library/Core/Core/Base/JSON.h" +#include "Core/Base/JSON.h" #include "Core/Statistics/Frequency_Limit.h" #include diff --git a/module/Local_Server/DSP/DSP_Config.h b/module/Local_Server/DSP/DSP_Config.h index 147d48d..ab3e367 100644 --- a/module/Local_Server/DSP/DSP_Config.h +++ b/module/Local_Server/DSP/DSP_Config.h @@ -8,7 +8,7 @@ class Global; #define USE_PROCESS 0 #ifdef USE_PROCESS -#include "../../../../../core_library/Core/Core/Shared_Memory/Shared_Memory.h" +#include "Core/Shared_Memory/Shared_Memory.h" #endif // #ifdef WIN32 // #define USE_PROCESS 1 diff --git a/module/Local_Server/Data_Source/global.h b/module/Local_Server/Data_Source/global.h index 7517a08..07ff518 100644 --- a/module/Local_Server/Data_Source/global.h +++ b/module/Local_Server/Data_Source/global.h @@ -1,5 +1,5 @@ #pragma once -#include "../../../../../core_library/Core/Core/Base/JSON.h" +#include "Core/Base/JSON.h" #include "Core/socket/export.h" #include "SSR/export.h" #include diff --git a/module/Local_Server/server/Config.cpp b/module/Local_Server/server/Config.cpp index dbc4361..f097942 100644 --- a/module/Local_Server/server/Config.cpp +++ b/module/Local_Server/server/Config.cpp @@ -1,5 +1,5 @@ #include "Config.h" -#include "../../../../../core_library/Core/Core/Base/Check.h" +#include "Core/Base/Check.h" #include "Core/Net_Adapter/Net_Adapter.h" #include "Global.h" #include diff --git a/module/Local_Server/server/MLAT.h b/module/Local_Server/server/MLAT.h index 327a0f8..1bbbd71 100644 --- a/module/Local_Server/server/MLAT.h +++ b/module/Local_Server/server/MLAT.h @@ -1,7 +1,7 @@ #ifndef MLAT_H #define MLAT_H -#include "../../../../../core_library/Core/Core/Base/JSON.h" -#include "../../../../../core_library/Core/Core/system/export.h" +#include "Core/Base/JSON.h" +#include "Core/system/export.h" #include "../global_include.h" #include #include diff --git a/module/dll_source/Dll_Global.cpp b/module/dll_source/Dll_Global.cpp index 05edbf1..858273e 100644 --- a/module/dll_source/Dll_Global.cpp +++ b/module/dll_source/Dll_Global.cpp @@ -1,251 +1,222 @@ #include "Dll_Global.h" - -#include "../../../../core_library/Core/Core/Base/JSON.h" +#include "Core/Base/JSON.h" #include "Core/Base/SM_RingBuffer.h" - Dll_Global *dg = new Dll_Global(); - std::string Dll_Global::get_config_path() { - return get_exe_dir() + "/" + "data_progress_config.json"; + return get_exe_dir() + "/" + "data_progress_config.json"; } - void Dll_Global::init_when_exe() { - rb = new SM_RingBuffer; - rb->init("rb", 2112 * 1000); - json_func_call = new SM_RingBuffer; - json_func_call->init("json_func_call2", 1000); - mode_acs = new SM_RingBuffer; - mode_acs->init("mode_acs", 2112 * 1000); - - void *lib; - { - auto r = try_load_library(Psc::get_abs_path(library_path)); - if (!r) { - Psc::fail_fast(); - } - lib = r.value(); - } - - { - auto r = Psc::try_load_function(lib, "adsb_set_iq_cbk"); - if (!r) { - Psc::fail_fast(); - } - set_iq_cbk = (adsb_set_iq_cbk_t)r.value(); - } - { - auto r = Psc::try_load_function(lib, "adsb_set_less_30Mhz_ddc_param"); - if (!r) { - Psc::fail_fast(); - } - set_less_30Mhz_ddc_param = (adsb_set_less_30Mhz_ddc_param_t)r.value(); - } - { - auto r = Psc::try_load_function(lib, "adsb_set_less_30Mhz_fft_param"); - if (!r) { - Psc::fail_fast(); - } - set_less_30Mhz_fft_param = (adsb_set_less_30Mhz_fft_param_t)r.value(); - } - - std::cout << "set_less_30Mhz_ddc_param " - << VAR_STR_3(center_freq, sample_rate, band_width) << std::endl; - set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, 1); - std::cout << "set_less_30Mhz_fft_param " - << VAR_STR_3(center_freq, sample_rate, band_width) << std::endl; - set_less_30Mhz_fft_param(fft_win_type, fft_point_number, fft_period_ms, 1); - std::cout << "set_iq_cbk " << std::endl; - set_iq_cbk( - [](void *phandle, void *pdata, uint64_t length) { - if (length != 2112) { - std::cout << LOG_POS << " IQ回调传入的长度不对!" << std::endl; - return; - } - auto dg = (Dll_Global *)phandle; - // - dg->handle_2112(pdata); - - // auto sk = (UHD_Struct_KFFT *) pdata; - // std::cout << (int)sk->DataType << std::endl; - - // dg->iq_memory_buffer.push(pdata, length); // length 永远等于2112 - }, - this); + rb = new SM_RingBuffer; + rb->init("rb", 2112 * 1000); + json_func_call = new SM_RingBuffer; + json_func_call->init("json_func_call2", 1000); + mode_acs = new SM_RingBuffer; + mode_acs->init("mode_acs", 2112 * 1000); + void *lib; + { + auto r = try_load_library(Psc::get_abs_path(library_path)); + if (!r) { + Psc::fail_fast(); + } + lib = r.value(); + } + { + auto r = Psc::try_load_function(lib, "adsb_set_iq_cbk"); + if (!r) { + Psc::fail_fast(); + } + set_iq_cbk = (adsb_set_iq_cbk_t)r.value(); + } + { + auto r = Psc::try_load_function(lib, "adsb_set_less_30Mhz_ddc_param"); + if (!r) { + Psc::fail_fast(); + } + set_less_30Mhz_ddc_param = (adsb_set_less_30Mhz_ddc_param_t)r.value(); + } + { + auto r = Psc::try_load_function(lib, "adsb_set_less_30Mhz_fft_param"); + if (!r) { + Psc::fail_fast(); + } + set_less_30Mhz_fft_param = (adsb_set_less_30Mhz_fft_param_t)r.value(); + } + std::cout << "set_less_30Mhz_ddc_param " + << VAR_STR_3(center_freq, sample_rate, band_width) << std::endl; + set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, 1); + std::cout << "set_less_30Mhz_fft_param " + << VAR_STR_3(center_freq, sample_rate, band_width) << std::endl; + set_less_30Mhz_fft_param(fft_win_type, fft_point_number, fft_period_ms, 1); + std::cout << "set_iq_cbk " << std::endl; + set_iq_cbk( + [](void *phandle, void *pdata, uint64_t length) { + if (length != 2112) { + std::cout << LOG_POS << " IQ回调传入的长度不对!" << std::endl; + return; + } + auto dg = (Dll_Global*)phandle; + // + dg->handle_2112(pdata); + // auto sk = (UHD_Struct_KFFT *) pdata; + // std::cout << (int)sk->DataType << std::endl; + // dg->iq_memory_buffer.push(pdata, length); // length 永远等于2112 + }, + this); } void Dll_Global::init_when_dll() { - - Detach_Thread_Manager &manager = dtm; - - manager.test_and_start_thread("Dll_Global", [&](std::atomic &run) { - std::mt19937 rng(std::random_device{}()); // 随机数引擎 - std::uniform_int_distribution dist(0 * 256, 70 * 256); - constexpr int size = 64 + 1024 * sizeof(uint16_t); - uint8_t buf[size]; - - while (run) { - int fn = fft_point_number / 1024; - auto sk = (UHD_Struct_KFFT *)buf; - - uint16_t *fft = (uint16_t *)(buf + 64); - for (int fi = 0; fi < fn; fi++) { - sk->DataType = kd_fft; - sk->Param.FFT.SubFrame = fi; - for (int i = 0; i < 1024; ++i) { - fft[i] = dist(rng); - } - give_call_back(buf, size); - } - - uint64_t sleep_ms = fft_period_ms; - uint64_t num = sample_rate / sleep_ms; - uint64_t times = num / 2048; - if (times < 1) { - times = 1; - } - - sk->DataType = zd_ddc; - uint16_t *iq = (uint16_t *)(buf + 64); - for (int i = 0; i < 1024; ++i) { - auto random = dist(rng); - iq[i] = random; - } - - sk->UsefullLen = 2048; - for (int i = 0; i < times; ++i) { - give_call_back(buf, size); - } - std::this_thread::sleep_for(std::chrono::milliseconds(fft_period_ms)); - } - }); + Detach_Thread_Manager& manager = dtm; + manager.test_and_start_thread("Dll_Global", [&](std::atomic& run) { + std::mt19937 rng(std::random_device{}()); // 随机数引擎 + std::uniform_int_distribution dist(0 * 256, 70 * 256); + constexpr int size = 64 + 1024 * sizeof(uint16_t); + uint8_t buf[size]; + while (run) { + int fn = fft_point_number / 1024; + auto sk = (UHD_Struct_KFFT*)buf; + uint16_t *fft = (uint16_t*)(buf + 64); + for (int fi = 0; fi < fn; fi++) { + sk->DataType = kd_fft; + sk->Param.FFT.SubFrame = fi; + for (int i = 0; i < 1024; ++i) { + fft[i] = dist(rng); + } + give_call_back(buf, size); + } + uint64_t sleep_ms = fft_period_ms; + uint64_t num = sample_rate / sleep_ms; + uint64_t times = num / 2048; + if (times < 1) { + times = 1; + } + sk->DataType = zd_ddc; + uint16_t *iq = (uint16_t*)(buf + 64); + for (int i = 0; i < 1024; ++i) { + auto random = dist(rng); + iq[i] = random; + } + sk->UsefullLen = 2048; + for (int i = 0; i < times; ++i) { + give_call_back(buf, size); + } + std::this_thread::sleep_for(std::chrono::milliseconds(fft_period_ms)); + } + }); } - Dll_Global::Dll_Global() { - auto config = try_parse_json_file(get_config_path()); - if (!config.has_value()) { - std::cout << "Dll_Global 配置文件加载失败!" << std::endl; - Psc::fail_fast(); - } - from_base_json(&config.value()); - psm = new std::uint8_t[65536 * 2]; + auto config = try_parse_json_file(get_config_path()); + if (!config.has_value()) { + std::cout << "Dll_Global 配置文件加载失败!" << std::endl; + Psc::fail_fast(); + } + from_base_json(&config.value()); + psm = new std::uint8_t[65536 * 2]; +} +Dll_Global::~Dll_Global() { + delete psm; } - -Dll_Global::~Dll_Global() { delete psm; } - void adsb_close() { - std::cout << " adsb_close()" << std::endl; - Dll_Global::instance()->dtm.stop_all_thread(); + std::cout << " adsb_close()" << std::endl; + Dll_Global::instance()->dtm.stop_all_thread(); } - void Dll_Global::save() { - std::ofstream config_file; - config_file.open(get_config_path()); - std::string json = to_base_json().to_json_string(); - config_file.write(json.c_str(), static_cast(json.size())); - config_file.close(); + std::ofstream config_file; + config_file.open(get_config_path()); + std::string json = to_base_json().to_json_string(); + config_file.write(json.c_str(), static_cast(json.size())); + config_file.close(); } - void Dll_Global::give_call_back(std::uint8_t *data, size_t len) { - recv_cbk(puser, data, len); - auto sk = (UHD_Struct_KFFT *)data; - if (sk->DataType == kd_fft) { - auto idx_max = fft_point_number / 1024; - auto idx = sk->Param.FFT.SubFrame; - if (idx >= idx_max) { - std::cout << "give_call_back idx 越界" << idx << " >= " << idx_max - << std::endl; - } - } + recv_cbk(puser, data, len); + auto sk = (UHD_Struct_KFFT*)data; + if (sk->DataType == kd_fft) { + auto idx_max = fft_point_number / 1024; + auto idx = sk->Param.FFT.SubFrame; + if (idx >= idx_max) { + std::cout << "give_call_back idx 越界" << idx << " >= " << idx_max + << std::endl; + } + } } - void Dll_Global::handle_2112_test(void *data) { - // 记录开始时间 - auto start = std::chrono::high_resolution_clock::now(); - - // 调用目标函数 - handle_2112_pure(data); - - // 记录结束时间 - auto end = std::chrono::high_resolution_clock::now(); - - // 计算持续时间(微秒) - auto duration = - std::chrono::duration_cast(end - start); - - // 输出每次调用的时间 - std::cout << "Average time per call: " << duration.count() << " microseconds" - << std::endl; + // 记录开始时间 + auto start = std::chrono::high_resolution_clock::now(); + // 调用目标函数 + handle_2112_pure(data); + // 记录结束时间 + auto end = std::chrono::high_resolution_clock::now(); + // 计算持续时间(微秒) + auto duration = + std::chrono::duration_cast(end - start); + // 输出每次调用的时间 + std::cout << "Average time per call: " << duration.count() << " microseconds" + << std::endl; } - void Dll_Global::handle_2112(void *data) { - handle_2112_pure(data); - // static Frequency_Limit fl(freq); - // if (fl.test()) { - // handle_2112_test(data); - // } else { - // handle_2112_pure(data); - // } + handle_2112_pure(data); + // static Frequency_Limit fl(freq); + // if (fl.test()) { + // handle_2112_test(data); + // } else { + // handle_2112_pure(data); + // } } - void Dll_Global::handle_2112_pure(void *data) { - auto d = (UHD_Struct_KFFT *)(data); - auto pdata = (std::uint8_t *)data + 64; - auto idx_max = fft_point_number / 1024; - auto type = d->DataType; - if (type == kd_fft) { - auto idx = d->Param.FFT.SubFrame; - if (idx >= idx_max) { - std::cout << "idx 越界" << idx << " >= " << idx_max << std::endl; - } else { - memcpy(psm + idx * 2048, pdata, 2048); - } - } + auto d = (UHD_Struct_KFFT*)(data); + auto pdata = (std::uint8_t*)data + 64; + auto idx_max = fft_point_number / 1024; + auto type = d->DataType; + if (type == kd_fft) { + auto idx = d->Param.FFT.SubFrame; + if (idx >= idx_max) { + std::cout << "idx 越界" << idx << " >= " << idx_max << std::endl; + } + else { + memcpy(psm + idx * 2048, pdata, 2048); + } + } #if WIN32 - else if (type == kd_ddc || type == zd_ddc) { - dg->rb->write((uint8_t *)data, 2112); - } else { - Psc::fail_fast(); - } + else if (type == kd_ddc || type == zd_ddc) { + dg->rb->write((uint8_t*)data, 2112); + } + else { + Psc::fail_fast(); + } #else else { - dg->rb->write((uint8_t *)data, 2112); - } + dg->rb->write((uint8_t*)data, 2112); + } #endif } - void Dll_Global::handle_json_call() { - size_t length = 0; - uint8_t json_func_data[1000]; - json_func_call->read(json_func_data, length); - - std::string json((const char *)json_func_data, length); - if (!json.empty()) { - auto func_call = Psc::parse_json(json); - auto method = func_call.get_string("method"); - std::cout << func_call.to_json_string() << std::endl; - - if (method == "adsb_set_less_30Mhz_ddc_param") { - center_freq = func_call.get_number("center_freq"); - sample_rate = func_call.get_number("sample_rate"); - band_width = func_call.get_number("band_width"); - auto sw = func_call.get_number("sw"); - save(); - set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, sw); - } - - if (method == "adsb_set_less_30Mhz_fft_param") { - fft_win_type = (UHD_FFTWin)func_call.get_number("fft_win_type"); - fft_point_number = func_call.get_number("fft_point_number"); - fft_period_ms = func_call.get_number("fft_period_ms"); - auto sw = func_call.get_number("sw"); - save(); - set_less_30Mhz_fft_param(fft_win_type, fft_point_number, fft_period_ms, - sw); - } - - if (method == "restart_device") { - std::cout << "关闭进程, 然后会被守护进程拉起来" << std::endl; - stop_program = true; - } - } + size_t length = 0; + uint8_t json_func_data[1000]; + json_func_call->read(json_func_data, length); + std::string json((const char*)json_func_data, length); + if (!json.empty()) { + auto func_call = Psc::parse_json(json); + auto method = func_call.get_string("method"); + std::cout << func_call.to_json_string() << std::endl; + if (method == "adsb_set_less_30Mhz_ddc_param") { + center_freq = func_call.get_number("center_freq"); + sample_rate = func_call.get_number("sample_rate"); + band_width = func_call.get_number("band_width"); + auto sw = func_call.get_number("sw"); + save(); + set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, sw); + } + if (method == "adsb_set_less_30Mhz_fft_param") { + fft_win_type = (UHD_FFTWin)func_call.get_number("fft_win_type"); + fft_point_number = func_call.get_number("fft_point_number"); + fft_period_ms = func_call.get_number("fft_period_ms"); + auto sw = func_call.get_number("sw"); + save(); + set_less_30Mhz_fft_param(fft_win_type, fft_point_number, fft_period_ms, + sw); + } + if (method == "restart_device") { + std::cout << "关闭进程, 然后会被守护进程拉起来" << std::endl; + stop_program = true; + } + } } void set_error_cbk(error_cbk_t cbk) {} diff --git a/third_party/CPP_Core b/third_party/CPP_Core index 6e22ccd..e8eec32 160000 --- a/third_party/CPP_Core +++ b/third_party/CPP_Core @@ -1 +1 @@ -Subproject commit 6e22ccdc6bbed62e557185d6391b433763df301d +Subproject commit e8eec327ddb227daae419743f55a1b7337f7a5af diff --git a/third_party/SSR b/third_party/SSR index 5e1d88f..d44ee01 160000 --- a/third_party/SSR +++ b/third_party/SSR @@ -1 +1 @@ -Subproject commit 5e1d88f2e2a87c1faca0e9a34bb27e93c61f0941 +Subproject commit d44ee01cd38ee4c1cc9e33651d8430feb9aeac47 diff --git a/third_party/build_infra b/third_party/build_infra index d777714..8440aac 160000 --- a/third_party/build_infra +++ b/third_party/build_infra @@ -1 +1 @@ -Subproject commit d777714fd1f755d9824700e2cd855cb45c0e91fe +Subproject commit 8440aac659f74d851e64a86b4d22c5f6ef9ff03f diff --git a/toolchain/vs2019.cmake b/toolchain/vs2019.cmake new file mode 100644 index 0000000..5f9cd9f --- /dev/null +++ b/toolchain/vs2019.cmake @@ -0,0 +1,88 @@ + +#set(dir "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64") +# +#set(CMAKE_CXX_COMPILER "${dir}/cl.exe") +#set(CMAKE_C_COMPILER "${dir}/cl.exe") + +#get_filename_component(_compiler_dir "${CMAKE_CXX_COMPILER}" DIRECTORY) +# +#set(CMAKE_LINKER "${_compiler_dir}/link.bat") + + +#if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja") +# +# +# message(STATUS "CMAKE_GENERATOR = ${CMAKE_GENERATOR}") +# message(STATUS "CMAKE_GENERATOR_INSTANCE = ${CMAKE_GENERATOR_INSTANCE}") +# message(STATUS "CMAKE_GENERATOR_TOOLSET = ${CMAKE_GENERATOR_TOOLSET}") +# message(STATUS "CMAKE_GENERATOR_PLATFORM = ${CMAKE_GENERATOR_PLATFORM}") +# message(STATUS "CMAKE_MAKE_PROGRAM before = ${CMAKE_MAKE_PROGRAM}") +# +# file(GLOB CLION_NINJA_CANDIDATES +# "C:/Program Files/JetBrains/CLion */bin/ninja/win/x64/ninja.exe" +# ) +# +# list(SORT CLION_NINJA_CANDIDATES ORDER DESCENDING) +# +# if(CLION_NINJA_CANDIDATES) +# list(GET CLION_NINJA_CANDIDATES 0 CLION_NINJA_EXE) +# message(STATUS "CLION_NINJA_EXE = ${CLION_NINJA_EXE}") +# +# set(CMAKE_MAKE_PROGRAM "${CLION_NINJA_EXE}" CACHE FILEPATH "Ninja executable" FORCE) +# else() +# message(WARNING "CLion ninja.exe not found") +# endif() +# +# message(STATUS "CMAKE_MAKE_PROGRAM after = ${CMAKE_MAKE_PROGRAM}") +# +# # 输出 Ninja 版本 +# execute_process( +# COMMAND "${CMAKE_MAKE_PROGRAM}" --version +# OUTPUT_VARIABLE _ninja_version +# ERROR_VARIABLE _ninja_version_err +# RESULT_VARIABLE _ninja_version_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "Ninja version ret = ${_ninja_version_ret}") +# message(STATUS "Ninja version = ${_ninja_version}") +# if(_ninja_version_err) +# message(STATUS "Ninja version err = ${_ninja_version_err}") +# endif() +# +# # 输出 Ninja Windows 编码模式 +# execute_process( +# COMMAND "${CMAKE_MAKE_PROGRAM}" -t wincodepage +# OUTPUT_VARIABLE _ninja_wincodepage +# ERROR_VARIABLE _ninja_wincodepage_err +# RESULT_VARIABLE _ninja_wincodepage_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "Ninja wincodepage ret = ${_ninja_wincodepage_ret}") +# message(STATUS "Ninja wincodepage = ${_ninja_wincodepage}") +# if(_ninja_wincodepage_err) +# message(STATUS "Ninja wincodepage err = ${_ninja_wincodepage_err}") +# endif() +# +# # 输出当前 cmd 代码页 +# execute_process( +# COMMAND cmd /c chcp +# OUTPUT_VARIABLE _cmd_chcp +# ERROR_VARIABLE _cmd_chcp_err +# RESULT_VARIABLE _cmd_chcp_ret +# OUTPUT_STRIP_TRAILING_WHITESPACE +# ERROR_STRIP_TRAILING_WHITESPACE +# ) +# +# message(STATUS "cmd chcp ret = ${_cmd_chcp_ret}") +# message(STATUS "cmd chcp = ${_cmd_chcp}") +# if(_cmd_chcp_err) +# message(STATUS "cmd chcp err = ${_cmd_chcp_err}") +# endif() +#endif() + + + diff --git a/toolchain/vs2019.json b/toolchain/vs2019.json new file mode 100644 index 0000000..4693bba --- /dev/null +++ b/toolchain/vs2019.json @@ -0,0 +1,38 @@ +{ + "version": 10, + "cmakeMinimumRequired": { + "major": 3, + "minor": 21, + "patch": 0 + }, + "configurePresets": [ + { + "name": "vs2019", + "hidden": true, + "graphviz": "${sourceDir}/../build/${presetName}/graphviz/yc.dot", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/toolchain/vs2019.cmake" + }, + "vendor": { + "jetbrains.com/clion": { + "toolchain": "vs2019" + } + } + }, + { + "name": "vs2019_Debug", + "inherits": "vs2019", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vs2019_Release", + "inherits": "vs2019", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + } + ] +} diff --git a/toolchain/vs2022.cmake b/toolchain/vs2022.cmake new file mode 100644 index 0000000..193d1b6 --- /dev/null +++ b/toolchain/vs2022.cmake @@ -0,0 +1,13 @@ + +set(dir "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64") + +set(CMAKE_CXX_COMPILER "${dir}/cl.bat") +set(CMAKE_C_COMPILER "${dir}/cl.bat") +set(CMAKE_LINKER "${dir}/link.bat") + +#set(CMAKE_CXX_COMPILER "${dir}/cl.exe") +#set(CMAKE_C_COMPILER "${dir}/cl.exe") +#set(CMAKE_LINKER "${dir}/link.exe") + +# [2/2] C:\Windows\system32\cmd.exe /C "cd . && "C:\Program Files\JetBrains\CLion 2025.3.4\bin\cmake\win\x64\bin\cmake.exe" -E vs_link_exe --msvc-ver=1944 --intdir=CMakeFiles\radio.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests -- C:\PROGRA~1\MICROS~1\2022\ENTERP~1\VC\Tools\MSVC\1444~1.352\bin\Hostx64\x64\LINK_2~1.BAT /nologo @CMakeFiles\radio.rsp /out:radio.exe /implib:radio.lib /pdb:radio.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console && cd ." + diff --git a/toolchain/vs2022.json b/toolchain/vs2022.json new file mode 100644 index 0000000..bf55b51 --- /dev/null +++ b/toolchain/vs2022.json @@ -0,0 +1,38 @@ +{ + "version": 10, + "cmakeMinimumRequired": { + "major": 3, + "minor": 21, + "patch": 0 + }, + "configurePresets": [ + { + "name": "vs2022", + "hidden": true, + "graphviz": "${sourceDir}/../build/${presetName}/graphviz/yc.dot", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/toolchain/vs2022.cmake" + }, + "vendor": { + "jetbrains.com/clion": { + "toolchain": "vs2022" + } + } + }, + { + "name": "vs2022_debug", + "inherits": "vs2022", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vs2022_release", + "inherits": "vs2022", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + } + ] +} \ No newline at end of file